imprimir generar formulario ejemplos desde crear con php forms zend-framework pdf

generar - Cómo llenar el formulario PDF en PHP



html2pdf php (5)

El Zend_Pdf Zend_Pdf puede dibujar texto en tu pdf, pero es un poco torpe ya que debes especificar las coordenadas x e y en tu página de pdf. Algo como eso:

// This is the pdf-file you want to fill out... $pdf = Zend_Pdf::load(''/path/to/pdf-template.pdf'') $page = $pdf->pages[0]; // Use first page $page->drawText("firstname lastname", 200, 600); ... $pdf->pages[0] = $page; // be sure to write to a new file, not the original empty form. $pdf->save(''/path/to/pdf-output.pdf'');

No sé si hay formas fáciles de encontrar las cuerdas exactas, generalmente juego hasta que encaja.

Tengo muchos formularios PDF, necesito rellenarlos en PHP con los datos que ya tengo.

Aquí es solo un ejemplo de formulario en PDF , quiero llenar este formulario usando php. Los datos que ya tengo en DB. Solo quiero llenar este formulario y guardarlo.

Estoy trabajando en PHP Zend Framework.

Todo lo que quiero es que cuando descargue esos formularios de mi sitio, rellene todos los campos del formulario pdf con la información que ya tengo.

Por favor, ayúdame.


Encontré esto y funciona para mí. Es un parche no oficial para que Zend complete los campos de formulario FDF. Sitio con la discusión y el parche.

SIN INSTALACIÓN, SIN PROGRAMAS EXTERNOS, SIN COORDENADOS

Utilizar:

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

Si la página ya no existe, aquí está el parche para PDF.php (si alguien tiene problemas, escríbeme en privado):

--- 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.


Encontré la biblioteca fpdf buscando lo mismo en internet.

http://www.fpdf.org/en/script/script93.php

El código se ve limpio, fácil de usar y recordarlo, y funciona para PDF con formularios (se puede rellenar).

<?php /*************************** Sample using a PHP array ****************************/ require(''fpdm.php''); $fields = array( ''name'' => ''My name'', ''address'' => ''My address'', ''city'' => ''My city'', ''phone'' => ''My phone number'' ); $pdf = new FPDM(''template.pdf''); $pdf->Load($fields, false); // second parameter: false if field values are in ISO-8859-1, true if UTF-8 $pdf->Merge(); $pdf->Output(); ?>

Viene con el ejemplo que funcionó fuera de la caja. Espero eso ayude.


Llamar a pdftk es una buena manera de lograr esto. Asumiré que sabe cómo ejecutar un programa externo y lo omitirá.

Primero, crea un archivo FDF desde tu PDF.

pdftk form.pdf generate_fdf output data.fdf

Ahora puedes usar eso como plantilla. La muestra que proporcionaste se ve así:

%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

Los campos son líneas que comienzan con /V () . Introduzca sus valores deseados en esos campos. Por ejemplo:

%FDF-1.2 %<E2><E3><CF><D3> 1 0 obj << /FDF << /Fields [ << /V (February 4, 2012) /T (Date) ...

Finalmente, fusionar el FDF con el PDF. Ejecuta el comando:

pdftk form.pdf fill_form data.fdf output form_with_data.pdf

Si no necesita mantener el FDF y los archivos PDF generados, simplemente puede canalizar los datos a través de stdin y stdout en lugar de usar archivos temporales.


Si no le importa instalar Drupal y configurar un sitio simple, puede instalar el módulo Fill PDF y configurarlo. Si ya tiene los datos, esto podría ser una exageración, pero si puede importarlos a Drupal de alguna manera (como por ejemplo con el módulo Feeds ), ahorraría tiempo al escribir el código de llenado de PDF. Puedes usar un servicio alojado con ese módulo o instalar cosas en tu servidor.

Descargo de responsabilidad: mantengo ese módulo y ejecuto el servicio alojado.