7

My need is that I upload two image files and that should be added to an existing PDF file. I have read about FPDF, basing on that I have followed this post link. In case if somebody can post a simple working example/link it would be helpful for searchers like me and some more people who would also take the same route to find some helpful answers.

Community
  • 1
  • 1
125369
  • 3,547
  • 20
  • 52
  • 70
  • Adding an image to an existing PDF - should this appear on an existing page, or on a new one? If the former, bear in mind you can really only render _on top_ of existing content afaik - if you want to reflow the document with an image inserted, you need to re-render from scratch. – halfer Mar 06 '12 at 15:17
  • for the information the images should appear on the existing page – 125369 Mar 06 '12 at 15:20
  • Great, the answer from @tonymarschall should sort you out then. – halfer Mar 06 '12 at 15:23
  • Who gave a Down-Vote when the post received more than 1000 Views...... – 125369 Oct 14 '13 at 08:27
  • Don't worry about downvotes here - it's only one. For what it's worth, the question isn't a great fit here by today's standards - for the most part we like questions that demonstrate substantial prior research, are specific, and usually feature a code snippet. Requests for tutorials are mostly off-topic. – halfer Oct 14 '13 at 08:33

2 Answers2

18

It seems there is an extension called FPDI for FPDF. Here is a blog post about how to modify an existing pdf: http://pranavom.wordpress.com/2011/03/15/modify-pdf-using-fpdffpdi-library/

You can place an image using FPDI like so:

$pdf = new FPDI();
$pdf->AddPage();
$pdf->setSourceFile("MySource");
$template = $pdf->importPage(1);
$pdf->useTemplate($template);
$pdf->Image('MyImage.jpg', $x, $y, $width, $height);
$pdf->Output($outputPath, "F");
teynon
  • 7,540
  • 10
  • 63
  • 106
tonymarschall
  • 3,862
  • 3
  • 29
  • 52
  • Hi Tony, I followed the example which you have mentioned and I can create a pdf with images, but even though my original pdf consists of only one page, the created pdf has a first page which is BLANK and in the second page I get the contents which I wanted. Any idea how to eliminate this and get the required changes in the first page. I would also accept your answer if you could sort this out. Thanks – 125369 Mar 06 '12 at 15:42
  • Not sure, try to remove first `$pdf->AddPage();`But this is another question. – tonymarschall Mar 06 '12 at 15:45
  • thanks tony for pointing it out, answer accepted :) just one more basic question, is it possible to increase/decrease the image size or the image sizes are standard. – 125369 Mar 06 '12 at 15:50
  • @webMot yes it is possible ---Author Pranavom – OM The Eternity Aug 14 '12 at 04:07
  • Free fpdi version only support pdf up to version 1.4 (Acrobat 5). [source](https://www.setasign.com/support/faq/fpdi/error-document-compression-technique-not-supported/#question-89) – SwissFr Feb 28 '18 at 14:27
  • @tonymarschall it just downloads the page we pass to importPage. How do I download the entire file without losing all the other pages. – Sumit Wadhwa Oct 05 '21 at 15:35
3

I am using PHP, FPDF to generate a pdf from an FDF file and then insert a qrcode graphic into the pdf as well. I kept running into trouble because my empty pdf has form fields built in and inserting a graphic with other programs erased my form fields. I finally figured it out. Hope this helps someone else who is struggling with the same.

I work for funeral home if any of the var names throw you off and this code isn't polished its been cut and pasted from tons of different sources ;)

I am using the following libraries http://www.fpdf.org/ and http://phpqrcode.sourceforge.net/

for($count=0;$count<$doc_list_length;$count++){

    //create FDF file
    $id = rand(11111,99999);
    $filename = $populated_pdf_path . $casenumber.$doc_list[$count].".fdf";    
    $file = fopen($filename,"w");
    $filecontents = "%FDF-1.2". PHP_EOL;
    $filecontents .= "%âãÏÓ" . PHP_EOL;
    $filecontents .= "1 0 obj" . PHP_EOL;
    $filecontents .= "<<" .PHP_EOL;
    $filecontents .= "/FDF << /Fields [ ";
    $filecontents .= "<</T(name)/V($name)>>";
    $filecontents .= "] " . PHP_EOL;
    $filecontents .= "/F (empty_pdf/$doc_list[$count].pdf) ";
    $filecontents .= "/ID [ <$id>" . PHP_EOL;
    $filecontents .= "] >> " . PHP_EOL;
    $filecontents .= ">> ". PHP_EOL;
    $filecontents .= "endobj" . PHP_EOL;
    $filecontents .= "trailer" . PHP_EOL;
    $filecontents .= "<<" . PHP_EOL;
    $filecontents .= "/Root 1 0 R" . PHP_EOL . PHP_EOL;
    $filecontents .= ">>" . PHP_EOL;
    $filecontents .= "%%EOF";
    fwrite($file, $filecontents);
    fclose($file);

    //insert image on this document only
    //generate qrcode
    if($doc_list[$count] == "checklist"){

        $qrCodeFileName = $cemetery."qrcode.png";
        if(!file_exists($populated_pdf_path.$qrCodeFileName)){
            include('include/phpqrcode/qrlib.php');  
            $codeContents = "http://www.asuperduperwebaddress.com"; 
            QRcode::png($codeContents, $populated_pdf_path.$qrCodeFileName);
        }

        if(!file_exists($populated_pdf_path.$cemetery."qrcode.pdf")){
            //make pdf with image
            require_once('include/fpdf.php');
            $image = $populated_pdf_path.$qrCodeFileName;
            $pdf = new FPDF();
            $pdf->AddPage();
            $pdf->Image($image, 183, 250, 25, 25, 'PNG' );
            $pdf->Output( $populated_pdf_path.$cemetery."qrcode.pdf");
        }

        //setup file paths for pdf output
        $tempFile = $populated_pdf_path . $casenumber.$doc_list[$count]."temp.pdf";
        $pdfExampleFile = $populated_pdf_path . $casenumber.$doc_list[$count].".pdf"; 
        $pdfFile = $empty_pdf_path . $doc_list[$count] . ".pdf";
        if($doc_list[$count] == "checklist")
        $fdfFile = $filename; 
        $fdfTemplateFile = $filename;

        //fill pdf
        $command = "pdftk $pdfFile fill_form $fdfTemplateFile output $tempFile 2> fill_form.log";
        passthru($command);

        //stamp pdf with qrcode
        $command = "pdftk " . $tempFile . " stamp " . $populated_pdf_path.$cemetery . "qrcode.pdf output " . $pdfExampleFile; 
        passthru($command);
    }
    else{
        //setup file paths for pdf output
        $pdfExampleFile = $populated_pdf_path . $casenumber.$doc_list[$count].".pdf"; 
        $pdfFile = $empty_pdf_path . $doc_list[$count] . ".pdf";
        if($doc_list[$count] == "checklist")
        $fdfFile = $filename; 
        $fdfTemplateFile = $filename;

        //fill pdf
        $command = "pdftk $pdfFile fill_form $fdfTemplateFile output $pdfExampleFile 2> fill_form.log";
        passthru($command);
    }

}
James
  • 31
  • 2
  • Thanks. One change I had to make, a dest parameter is needed for the $pdf->Output call. I used: $pdf->Output("F", $filename); – NoelHunter Apr 13 '17 at 13:20