Intereting Posts

Объединение файлов PDF с помощью PHP / FPDI

Я пытаюсь объединить два файла с помощью FPDI, я получаю сообщение: «TCPDF ERROR: файл зашифрован!», однако файлы не зашифрованы, по крайней мере, файлы могут быть распечатаны, доступны для просмотра и т. д., и пароль не требуется.

Я хочу объединить два файла:

http://www.nps.org.au/__data/cmi_pdfs/CMI7412.pdf http://www.nps.org.au/__data/cmi_pdfs/CMI6656.pdf

после того, как я скопирую файлы на сервер и сохраню имена файлов в массиве ($ files), которые имеют абсолютные пути к файлу, мой код:

if (count ($files) > 0 ) { $pdf = new FPDI(); $pdf->setPrintHeader(FALSE); $pdf->setPrintFooter(FALSE); foreach ($files as $file) { for ($i = 0; $i < count($files); $i++ ) { $pagecount = $pdf->setSourceFile($files[$i]); for($j = 0; $j < $pagecount ; $j++) { $tplidx = $pdf->importPage(($j +1), '/MediaBox'); $specs = $pdf->getTemplateSize($tplidx); if ( $specs['h'] > $specs['w'] ) { $orientation = 'P'; } else { $orientation = 'L'; } $pdf->addPage($orientation,'A4'); $pdf->useTemplate($tplidx, 0, 0, 0, 0, TRUE); } } $output = $pdf->Output('', 'S'); foreach ( $files as $file ) { delete_file($file); } } 

Я также пытался объединить файлы, используя ghostscript, но не повезло. Я пробовал acrobat pro, который требовал пароль для одного файла, но когда я использовал предварительный просмотр Mac, я экспортировал файл и смог объединить его с помощью acrobat без проблем. т.е. предварительный просмотр с предварительного просмотра удалил защиту без проблем. Итак, что это за файл CMI7412.pdf, который перестает сливаться, но не экспортирует, просматривает, печатает? и как я могу обойти это?

Проблема заключалась в шифровании в pdf-файле, он был защищен от изменений без пароля.

Я использовал qpdf для экспорта расшифрованной версии pdf в качестве временного файла. Затем я использовал pdftk для присоединения к файлам. Оказывается, это намного быстрее, чем библиотеки PHP.

Я пробовал аналогичную проблему и отлично работает, попробуйте. Он может обрабатывать различные ориентации между PDF-файлами.

  // array to hold list of PDF files to be merged $files = array("a.pdf", "b.pdf", "c.pdf"); $pageCount = 0; // initiate FPDI $pdf = new FPDI(); // iterate through the files foreach ($files AS $file) { // get the page count $pageCount = $pdf->setSourceFile($file); // iterate through all pages for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) { // import a page $templateId = $pdf->importPage($pageNo); // get the size of the imported page $size = $pdf->getTemplateSize($templateId); // create a page (landscape or portrait depending on the imported page size) if ($size['w'] > $size['h']) { $pdf->AddPage('L', array($size['w'], $size['h'])); } else { $pdf->AddPage('P', array($size['w'], $size['h'])); } // use the imported page $pdf->useTemplate($templateId); $pdf->SetFont('Helvetica'); $pdf->SetXY(5, 5); $pdf->Write(8, 'Generated by FPDI'); } }