Intereting Posts
json_encode и персидские слова? Загрузка файла с помощью AngularJS с скриптом php-сервера PHP: обновление нескольких полей MySQL в одном запросе Поиск расширенного скрипта pgination php / mysql Проверьте, выполняется ли процесс с использованием PHP в Linux как я могу написать окно предупреждения javascript, чтобы задать вопрос «да» или «нет» и интегрироваться с вызовами php? как получить доступ к файлу из внешнего корневого каталога в php API Youtube: учетная запись службы Перенос файлов с локального компьютера на удаленный сервер с помощью php-скрипта, находящегося на удаленном сервере Нужна помощь с проблемами JSON Множественная выборка PHP для вставки нескольких строк в MySQL Тайм-аут сеанса в php Symfony 2: Как получить маршрут по умолчанию по названию маршрута? Проблема WordPress PHP в functions.php относительно оператора if и else if Yii2 htaccess – Как скрыть интерфейс / web и бэкэнд / web ПОЛНОСТЬЮ

TCPDF и FPDI с несколькими страницами

Это похоже на простейшую вещь, но я не могу заставить ее работать.

Мне нужно добавить текст на первую страницу многостраничного pdf (может быть любое количество страниц)

Используя этот код на двухстраничном pdf (без цикла for, просто используя $ pdf-> importPage (2)), я получаю две страницы, а вторая страница – это повторение первой страницы. Текст написан на первой странице только хорошо, но мне нужны все страницы, включенные в выходной файл pdf. Вот мой код

// Original file with multiple pages $fullPathToFile = 'full/path/to/file.pdf'; class PDF extends FPDI { var $_tplIdx; function Header() { global $fullPathToFile; if (is_null($this->_tplIdx)) { $this->setSourceFile($fullPathToFile); $this->_tplIdx = $this->importPage(1); } $this->useTemplate($this->_tplIdx); } function Footer() {} } // initiate PDF $pdf = new PDF(); $pdf->setFontSubsetting(true); // add a page $pdf->AddPage(); // The new content $pdf->SetFont("helvetica", "B", 14); $pdf->Text(10,10,'Some text here'); // How to get the number of pages of original pdf??? // $numPages = $pdf->getNumPages(???); // Carry on adding all remaining pages starting from page 2 for($i=2;$i<=$numPages;$i++) { // Add another page $pdf->AddPage(); // Do I need to declare the source file here? // $pdf->setSourceFile($fullPathToWD); $pdf->importPage($i); } // Output the file as forced download $pdf->Output('theNewFile.pdf', 'D'); 

Ссылки на документы

Классы TCPDF http://www.tcpdf.org/doc/code/classTCPDF.html#a5171e20b366b74523709d84c349c1ced

FPDI Классы http://www.setasign.de/support/manuals/fpdi/

FPDF_TPL Классы http://www.setasign.de/support/manuals/fpdf-tpl/

Решила мою проблему …

 // Original file with multiple pages $fullPathToFile = 'full/path/to/file.pdf'; class PDF extends FPDI { var $_tplIdx; function Header() { global $fullPathToFile; if (is_null($this->_tplIdx)) { // THIS IS WHERE YOU GET THE NUMBER OF PAGES $this->numPages = $this->setSourceFile($fullPathToFile); $this->_tplIdx = $this->importPage(1); } $this->useTemplate($this->_tplIdx); } function Footer() {} } // initiate PDF $pdf = new PDF(); $pdf->setFontSubsetting(true); // add a page $pdf->AddPage(); // The new content $pdf->SetFont("helvetica", "B", 14); $pdf->Text(10,10,'Some text here'); // THIS PUTS THE REMAINDER OF THE PAGES IN if($pdf->numPages>1) { for($i=2;$i<=$pdf->numPages;$i++) { $pdf->endPage(); $pdf->_tplIdx = $pdf->importPage($i); $pdf->AddPage(); } } // Output the file as forced download $pdf->Output('theNewFile.pdf', 'D'); 

Вы получаете количество страниц, добавляя первую часть этой строки

 $this->numPages = $this->setSourceFile($fullPathToFile); 

И см. Второй последний блок кода – цикл for добавляет оставшуюся часть страниц.

Не знаете, так ли это должно быть сделано? Я читал в нескольких местах, что этого было даже невозможно достичь, также код не предоставляется в документах. Однако это работает, надеюсь, что это поможет кому-то.

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

 require_once('fpdf/fpdf.php'); require_once('fpdf/fpdi.php'); $pdf = new FPDI(); $fullPathToPDF = '/usr/local/common/my.pdf'; $pageCount = $pdf->setSourceFile($fullPathToPDF); for ($i = 1; $i <= $pageCount; $i++) { $pdf->importPage($i); $pdf->AddPage(); $pdf->useTemplate($i); } $pdf->SetFont('Helvetica'); $pdf->SetXY(110, 225); $pdf->Write(8, 'A complete document imported with FPDI'); $pdf->Output($fullPathToPDF); 

Просто измените полный путь к файлу в том месте, где у вас многостраничный PDF.

 $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); ... $pdf->SetMargins(10, 10, 10); $pdf->SetAutoPageBreak(true, 10); foreach($array as $item) { $pdf->AddPage(); //add new page for new item $txt = some_long_long_text; $pdf->Write(0, $txt, '', 0, 'C', true); $pdf->endPage(); //do end of page $pdf->lastPage(); //set cursor at last page, because autopagebreak not do it } 

В примере у вас есть 10 учеников в массиве, и вам нужно создать резюме для каждого. На экзамене одно резюме имеет 3 страницы. Таким образом, вы получите pdf с 30 страницами, с правильным текстом. SetAutoPageBreak (true, 10), не устанавливайте курсор на последней странице, поэтому вам нужно сделать это вручную с помощью функции $pdf->lastPage();

этот код не работает, попробуйте следующее:

 $pdf = new PDI(); $pdf->AddPage(); $pdf->setSourceFile('zzz.pdf'); $pdf->numPages = $pdf->setSourceFile('zzz.pdf'); $tplIdx = $pdf->importPage(1); $pdf->useTemplate($tplIdx, 10, 20, 200); if($pdf->numPages>1) { for($i=2;$i<=$pdf->numPages;$i++) { $pdf->AddPage(); $tplIdx = $pdf->importPage($i); $pdf->useTemplate($tplIdx, 10, 20, 200); } }