TCPDF and FPDI with multiple pages

前端 未结 4 406
情话喂你
情话喂你 2020-12-09 23:45

This looks like the simplest thing but I can\'t get it to work.

I need to add text to the first page of a multi-page pdf (could be any number of pages)

Using

相关标签:
4条回答
  • 2020-12-10 00:27

    I struggled with this a little and tried to come up with simplest way to add some text to the last page of a multi-page document. Here is the very simple code that worked for me:

    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);
    

    Just change the full path to file to a location where you have a multi-page PDF.

    0 讨论(0)
  • 2020-12-10 00:41

    Solved my problem...

    // 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');
    

    You get the number of pages by adding the first part of this line

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

    And see the second last block of code - the for loop adds the remainder of the pages.

    Don't know if this is how it should be done? I read in a few places that it wasn't even possible to achieve this, also the code is not supplied in the docs. However, this works, hope it helps someone.

    0 讨论(0)
  • 2020-12-10 00:41

    that code wont work, try this:

    $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);
    }
    }
    
    0 讨论(0)
  • 2020-12-10 00:45
    $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
    }
    

    In example, you have 10 pupils in array, and you need create resume for each. In exam, one resume have 3 pages. So in out u get pdf with 30 pages, with correct text. SetAutoPageBreak(true, 10), not set cursor at last page, so you need to do it manually with function $pdf->lastPage();

    0 讨论(0)
提交回复
热议问题