我正在尝试将 PDF 拆分为单独的页面,然后使用用户提供的组织模式(例如在 Word 中打印各种页面的方式),然后将单独的页面合并到单独的文档中并将它们保存到磁盘。
我的问题是,当我尝试保存时,我得到了这个异常:
“is_file() 期望参数 1 是有效路径,给定对象”
进一步挖掘后,我认为问题在于我向ConvertApi::convert()方法提供了 Result 类型的对象而不是 ResultFile 类型的对象。
我当前的实现通常如下所示:
$pdf = new Pdf_ConvertApi($input);
$pdf->chunk(['method'=>'pattern', 'chunkPattern'=>[1, '3-4']]);
$pdf->write();
在构造函数中,我拆分 PDF 文件并将各个页面保存在 $this->rawFiles 中。
public function __construct($input, $parameters = [])
{
if (is_array($input)) $key = 'Files';
else $key = 'File';
$this->splitResult = ConvertApi::convert('split', [$key => $input]);
$this->rawFiles = $this->splitResult->getFiles();
}
然后在块方法中,我使用提供的模式分配$this->preparedDocuments数组,这是一个多级数组,顶层是单独的文档,下一层包含来自$this->rawFiles的适当值。
...
$patterns = <what pages to include>
...
foreach ($patterns as $idx => $docPattern)
{
// ... reList() converts patterns like "2-5" into the list [2, 3, 4, 5]
$document = $this->reList($docPattern, count($this->rawFiles));
$newDoc = [];
foreach ($document as $pageNumber)
{
$pg = $pageNumber - 1; // convert to zero-based
$newDoc[] = $this->rawFiles[$pg];
}
$documents[$idx] = ConvertApi::convert('merge', ['Files' => $newDoc]);
}
...
$this->preparedDocuments=$documents; }
写入方法如下所示:
public function write($outputPaths=null)
{
...
foreach($this->preparedDocuments as $idx=>$document)
{
$outputFile = $outputPaths[$idx];
$mergeResult = ConvertApi::convert('merge', ['File' => $document]);
$savedFiles[$idx] = $mergeResult->saveFiles($outputFile);
}
return $savedFiles;
}
我的期望是构造函数本质上是这样做的:
$splitResult = ConvertApi::convert('split', ['File' => 'files/test.pdf']);
$files = $splitResult->getFiles();
chunk() 方法正在这样做:
$firstPage = $files[0];
$lastPage = end($files);
$firstAndLast = [$firstPage, $lastPage];
而 write() 方法正在这样做:
$mergeResult = ConvertApi::convert('merge', ['Files' => $firstAndLast]);
$savedFiles = $mergeResult->saveFiles($dir);
但是,“firstAndLast”值数组中的值似乎包含 Result 对象而不是预期的 ResultFile 对象。
这是我第一次尝试使用 ConvertAPI,因此感谢任何见解或建议。