首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结果的ConvertAPI数组而不是ResultFiles

结果的ConvertAPI数组而不是ResultFiles
EN

Stack Overflow用户
提问于 2019-04-26 19:17:50
回答 1查看 156关注 0票数 1

我试图将PDF拆分成不同的页面,然后使用用户提供的组织模式(比如如何在Word中打印各种页面),然后将单独的页面合并到单独的文档中,并将它们保存到磁盘中。

我的问题是,当我试图保存时,我得到了这个例外:

"is_file()期望参数1是一个有效路径,对象给定“

经过进一步研究,我认为问题在于,我正在向ConvertApi::convert()方法提供类型结果的对象,而不是ResultFile类型。

我目前的实现大致如下:

代码语言:javascript
复制
$pdf = new Pdf_ConvertApi($input);
$pdf->chunk(['method'=>'pattern', 'chunkPattern'=>[1, '3-4']]);
$pdf->write();

在构造函数中,我拆分PDF文件并将各个页面保存在$this->rawFiles中。

代码语言:javascript
复制
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.的适当值。

代码语言:javascript
复制
...
$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;        }

写入方法如下所示:

代码语言:javascript
复制
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;
}

我的期望是构造函数实际上是这样做的:

代码语言:javascript
复制
$splitResult = ConvertApi::convert('split', ['File' => 'files/test.pdf']);
$files = $splitResult->getFiles();

语块()方法就是这样做的:

代码语言:javascript
复制
$firstPage = $files[0];
$lastPage = end($files);
$firstAndLast = [$firstPage, $lastPage];

而write()方法就是这样做的:

代码语言:javascript
复制
$mergeResult = ConvertApi::convert('merge', ['Files' => $firstAndLast]);
$savedFiles = $mergeResult->saveFiles($dir);

但是,"firstAndLast“值数组中的值似乎包含的是结果对象,而不是预期的ResultFile对象。

这是我第一次尝试使用ConvertAPI,因此,任何见解或建议都将受到赞赏。

EN

回答 1

Stack Overflow用户

发布于 2019-04-29 19:34:52

您的问题非常复杂,但通常您正在进行拆分和合并,如下面的示例所示:

pdf.php

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55873753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档