ConvertAPI массив результатов вместо ResultFiles - PullRequest
2 голосов
/ 26 апреля 2019

Я пытаюсь разделить PDF на отдельные страницы, затем использовать предоставленный пользователем организационный шаблон (например, как вы печатаете различные страницы в Word), а затем объединить отдельные страницы в отдельные документы и сохранить их на диск.

Моя проблема в том, что когда я пытаюсь сохранить, я получаю следующее исключение:

"is_file () ожидает, что параметр 1 является допустимым путем, объект задан"

При дальнейшем копании, я думаю, проблема в том, что я предоставляю объект типа Result вместо типа ResultFile методу ConvertApi :: convert () .

Моя текущая реализация выглядитобычно так:

$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-> prepareDocuments , который является многоуровневым массивом, причем верхний уровень является отдельным документом, а следующий уровень содержит соответствующее значение из $ 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();

Чанк() метод делал это:

$firstPage = $files[0];
$lastPage = end($files);
$firstAndLast = [$firstPage, $lastPage];

И метод write () делал это:

$mergeResult = ConvertApi::convert('merge', ['Files' => $firstAndLast]);
$savedFiles = $mergeResult->saveFiles($dir);

Однако значения в массиве значений "firstAndLast", кажется, содержат объекты Result вместо ожидаемых объектов ResultFile.

Это моя первая попытка использования ConvertAPI, поэтому любые идеи и предложения приветствуются.

1 Ответ

0 голосов
/ 29 апреля 2019

Ваш вопрос довольно сложный, но в целом вы выполняете разделение и слияние, как в этом примере:

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

Этот пример работает и merge принимает файлрезультаты вывода split.

Я предлагаю вам реализовать свой сценарий меньшими шагами - сначала измените этот пример для работы с несколькими кусками, а затем реорганизуйте его в класс.

...