Intereting Posts
Предупреждение «Не обращайтесь к суперглобальному $ _POST массиву напрямую» на Netbeans 7.4 для PHP jQuery удалить идентификатор из элемента с помощью ajax базы данных и обновить Можно ли пропустить параметры, которые имеют значения по умолчанию в вызове функции php (5)? Потоковое видео через php-сервер simplexml_load_string не анализирует мою XML-строку. Проблема с кодировкой? Столбец «группа» каким-то образом вызывает синтаксическую ошибку call_user_func_array передает аргументы конструктору Проблема с загрузкой php iphone / IOS6: лучший способ сохранить повернутое изображение Поместите изображение в центр другого изображения, используя PHP GD PHP + MYSQL на Duplicate KEY все еще увеличивает ключ INDEX Как активировать PHP на Apache2 по httpd.conf Могу ли я использовать зарезервированные имена PHP для своих функций и классов? Symfony2 – Doctrine2: Cross-Database Join Column throws Mapping-Exception Разделите запросы mysql в массиве, каждый запрос разделяется на ";" PHP Добавить тире для декодирования

Как заполнить форму PDF в php

У меня много PDF-форм, мне нужно будет заполнить их каждый в php данными, которые у меня уже есть.

Вот только образец PDF-формы , я хочу заполнить эту форму, используя php. Данные, которые у меня уже есть в БД. Я просто хочу заполнить эту форму и сохранить ее.

Я работаю в PHP Zend Framework.

Все, что я хочу, это когда я буду загружать эти формы с моего сайта, он предварительно заполнил все поля в форме pdf с информацией, которую я уже имел.

Пожалуйста, помогите мне.

Вызов pdftk – отличный способ выполнить это. Я предполагаю, что вы знаете, как выполнить внешнюю программу и оставить это.

Сначала создайте файл FDF из вашего PDF-файла.

pdftk form.pdf generate_fdf output data.fdf 

Теперь вы можете использовать это как шаблон. Пример, который вы указали, выглядит так:

 %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 

Поля – это строки, начинающиеся с /V () . Введите нужные значения в эти поля. Например:

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

Наконец, объедините FDF с PDF. Выполните команду:

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

Если вам не нужно сохранять FDF и сгенерированные PDF-файлы, вы можете просто передавать данные через stdin и stdout вместо использования временных файлов.

Я нашел это, и это работает для меня. Это неофициальный патч для Zend для заполнения полей формы FDF. Сайт с обсуждением и патчем

НЕТ УСТАНОВКИ, НИКАКИХ ПРОГРАММ, НЕ КООРДИНАТОВ

Использование:

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

Если страница больше не существует, это патч для PDF.php (если у кого-то проблемы – напишите мне сообщение privete):

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

Компонент Zend_Pdf может нарисовать текст в вашем pdf-файле, но он немного неуклюжий, поскольку вам нужно указать x- и y-координаты на вашем pdf-странице. Что-то вроде того:

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

Я не знаю, есть ли простые способы найти точные координаты, я обычно играю, пока это не подойдет.

Я нашел библиотеку fpdf, которая ищет то же самое в Интернете.

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

Код выглядит чистым, простым в использовании и запоминающимся, и работает в формате pdf с формами (заполняется).

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

Он поставляется с примером, который работал из коробки. Надеюсь, поможет.

Если вы не возражаете при установке Drupal и создании простого сайта, вы можете установить модуль Fill PDF и настроить его. Если у вас уже есть данные, это может быть излишним, но если вы можете каким-то образом импортировать эти данные в Drupal (например, с модулем Feeds ), вы сэкономите время на написании кода заполнения PDF. Вы можете использовать размещенную службу с этим модулем или установить материал на своем сервере.

Отказ от ответственности: я поддерживаю этот модуль и запускаю размещенный сервис.