Это похоже на простейшую вещь, но я не могу заставить ее работать.
Мне нужно добавить текст на первую страницу многостраничного 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); } }