I have many PDF forms, I would need to fill them each in php with the data I already have.
Here is just a sample PDF form , I want to fill this form using php. The data I already have in DB. I just want to fill this form and save it.
I am working in PHP Zend Framework.
All I want is when I would download those forms from my site, it would pre-fill all the fields in the pdf form with the information I already have.
Please help me.
FPDF is a PHP class which allows to generate PDF files with pure PHP, that is to say without using the PDFlib library. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.
php require('./fpdf. php'); $pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(40,10,'Hello World! '); $pdf->Output(); ?> Upon execution, the PHP script will generate a PDF file in your browser.
Calling pdftk is a nice way to accomplish this. I'll assume that you know how to execute an external program and leave that out.
First, create an FDF file from your PDF.
pdftk form.pdf generate_fdf output data.fdf
You can now use that as template. The sample that you provided looks like this:
%FDF-1.2 %<E2><E3><CF><D3> 1 0 obj << /FDF << /Fields [ << /V () /T (Date) >> << /V / /T (CheckBox2) >> << /V / /T (CheckBox3) >> << /V / /T (CheckBox4) >> << /V / /T (CheckBox5) >> << /V () /T (Your_Last_Name) >> << /V () /T (Your_First_Name) >> << /V / /T (CheckBox1) >>] >> >> endobj trailer << /Root 1 0 R >> %%EOF
The fields are lines that start with /V ()
. Enter your desired values into those fields. For example:
%FDF-1.2 %<E2><E3><CF><D3> 1 0 obj << /FDF << /Fields [ << /V (February 4, 2012) /T (Date) ...
Finally, merge the FDF with the PDF. Execute the command:
pdftk form.pdf fill_form data.fdf output form_with_data.pdf
If you don't need to keep the FDF and generated PDF files, you can simply pipe the data via stdin and stdout instead of using temp files.
I found this and it works for me. It is an unofficial patch for Zend to fill FDF Form Fields.Site with the discussion and patch
NO INSTALLATION, NO OUTSIDE PROGRAMS, NO COORDINATES
Use:
$pdf = Zend_Pdf::load('input-file-containing-form.pdf'); $pdf->setTextField('name', 'Someone'); $pdf->setTextField('address', '1 Main Street'); $pdf->setTextField('city', 'Cyberspace'); $pdf->save('outputfile.pdf');
If page no longer exists here is the patch for PDF.php (if someone have problems - write me privete message):
--- Pdf.php.orig 2009-11-15 17:52:57.000000000 +0100 +++ Pdf.php 2010-01-07 04:05:23.000000000 +0100 @@ -202,6 +202,13 @@ * @var array */ protected static $_inheritableAttributes = array('Resources', 'MediaBox', 'CropBox', 'Rotate'); + + /** + * List of form fields + * + * @var array - Associative array, key: name of form field, value: Zend_Pdf_Element + */ + protected $_formFields = array(); /** * Request used memory manager @@ -315,6 +322,7 @@ $this->_loadNamedDestinations($this->_trailer->Root, $this->_parser->getPDFVersion()); $this->_loadOutlines($this->_trailer->Root); + $this->_loadFormfields($this->_trailer->Root); if ($this->_trailer->Info !== null) { $this->properties = $this->_trailer->Info->toPhp(); @@ -557,6 +565,61 @@ $this->_originalOpenOutlinesCount = $root->Outlines->Count->value; } } + + /** + * Load form fields + * Populates the _formFields array, for later lookup of fields by name + * + * @param Zend_Pdf_Element_Reference $root Document catalog entry + */ + protected function _loadFormFields(Zend_Pdf_Element_Reference $root) + { + if ($root->AcroForm === null || $root->AcroForm->Fields === null) { + return; + } + + foreach ($root->AcroForm->Fields->items as $field) + { + if ( $field->FT->value == 'Tx' && $field->T !== null ) /* We only support fields that are textfields and have a name */ + { + $this->_formFields[$field->T->value] = $field; + } + } + + if ( !$root->AcroForm->NeedAppearances || !$root->AcroForm->NeedAppearances->value ) + { + /* Ask the .pdf viewer to generate its own appearance data, so we do not have to */ + $root->AcroForm->add(new Zend_Pdf_Element_Name('NeedAppearances'), new Zend_Pdf_Element_Boolean(true) ); + $root->AcroForm->touch(); + } + } + + /** + * Retrieves a list with the names of the AcroForm textfields in the PDF + * + * @return array of strings + */ + public function getTextFieldNames() + { + return array_keys($this->_formFields); + } + + /** + * Sets the value of an AcroForm text field + * + * @param string $name Name of textfield + * @param string $value Value + * @throws Zend_Pdf_Exception if the textfield does not exist in the pdf + */ + public function setTextField($name, $value) + { + if ( !isset($this->_formFields[$name])) + throw new Zend_Pdf_Exception("Field '$name' does not exist or is not a textfield"); + + $field = $this->_formFields[$name]; + $field->add(new Zend_Pdf_Element_Name('V'), new Zend_Pdf_Element_String($value) ); + $field->touch(); + } /** * Orginize pages to tha pages tree structure.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With