【问题标题】:ConvertAPI array of Results instead of ResultFilesConvertAPI 结果数组而不是 ResultFiles
【发布时间】:2019-04-26 19:17:50
【问题描述】:

我正在尝试将 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;        }

write方法如下所示:

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,感谢任何见解或建议。

【问题讨论】:

    标签: php convertapi


    【解决方案1】:

    你的问题很复杂,但一般来说你是在做拆分和合并,就像在这个例子中一样:

    https://github.com/ConvertAPI/convertapi-php/blob/master/examples/split_and_merge_pdf.php

    此示例正在运行,merge 接受来自split 输出的文件结果。

    我建议您以更小的步骤来实现您的脚本 - 首先修改此示例以使用多个块,然后将其重构到类中。

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      相关资源
      最近更新 更多