12

I have a bank of pdfs on my server which when downloaded need text appended to every page. I am using fpdf to try and open the file, append the text to each page, close the file and serve to the browser.

$pdf = new FPDI();

$pdf->setSourceFile($filename); 
// import page 1 
$tplIdx = $pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$pdf->SetFont('Arial', '', '13'); 
$pdf->SetTextColor(0,0,0);
//set position in pdf document
$pdf->SetXY(20, 20);
//first parameter defines the line height
$pdf->Write(0, 'gift code');
//force the browser to download the output
$pdf->Output('gift_coupon_generated.pdf', 'D');

header("location: ".$filename);

At the minute this just tries to put some text anywhere on the pdf and save it but I get the error

FPDF error: You have to add a page first!

If I can get it to do this I then need it to append the text to every page in the document rather than just 1, not sure how to do this having read the documentation

Steve Smith
  • 734
  • 6
  • 14
  • 29

3 Answers3

17

Try following

require_once('fpdf.php');
require_once('fpdi.php');

$pdf =& new FPDI();
$pdf->AddPage();

Use this page as template, then

$pdf->setSourceFile($filename); 
// import page 1 
$tplIdx = $pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

Let me know if you have any errors

GBD
  • 15,847
  • 2
  • 46
  • 50
  • 3
    worked for me only using Nulls in $x & $y `$outPdf->useTemplate($outPdf->importPage($i), null, null, 0, 0, true);`. Otherwise It cuts Pages to A4. – juanmf Jul 23 '14 at 19:25
11

Since you want all the pages with the text, one way to do it is putting the code in a loop.

Like this:

// Get total of the pages
$pages_count = $pdf->setSourceFile('your_file.pdf'); 

for($i = 1; $i <= $pages_count; $i++)
{
    $pdf->AddPage(); 

    $tplIdx = $pdf->importPage($i);

    $pdf->useTemplate($tplIdx, 0, 0); 


    $pdf->SetFont('Arial'); 
    $pdf->SetTextColor(255,0,0); 
    $pdf->SetXY(25, 25); 
    $pdf->Write(0, "This is just a simple text"); 
}
halfer
  • 19,824
  • 17
  • 99
  • 186
1

You can use Dhek graphical tool to design a template in JSON format, defining areas (bounds, name, ...) you want to add later on existing PDF (using FPDF and dynamic data). See doc at https://github.com/cchantep/dhek/blob/master/README.md#php-integration .

cchantep
  • 9,118
  • 3
  • 30
  • 41