Добавить изображение в PDF с полями формы - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь с помощью PHP заполнить поля формы в существующем PDF-файле и добавить к нему изображение.

Я нашел библиотеку FPDM для заполнения полей формы:

$formInputArray = ['field1' => 'test value', 'field2' => 'second value'];

$pdf = new FPDM('orginal-file.pdf');
$pdf->getEntries($templatePDF, 'PDF');
$pdf->Load($formInputArray);
$pdf->Merge();
$pdf->Output('F', 'form-filled-file.pdf');

Пока это работает.

На следующем шаге я пытаюсь добавить изображение с классом Fpdi в редактируемый документ:

$pdf = new Fpdi();
$pdf->setSourceFile('form-filled-file.pdf');
$pageId = $pdf->importPage(1, \setasign\Fpdi\PdfReader\PageBoundaries::MEDIA_BOX);
$pdf->addPage();
$pdf->useTemplate($pageId);
$pdf->Image('test-image.jpg', 150*0.39, 150*0.39, 100*0.39);
$pdf->Output('F', 'finished-file.pdf');

Проблема в том, что Fpdiпреобразование структуры PDF шаблона в новую структуру PDF.Таким образом, все указанные поля формы пропали.

Итак, вопрос:

Как добавить изображение в существующий PDF-файл с полями формы?

Я также посмотрел на iText / PDFtk (Serverside) и библиотеку mPDF PHP, но они не подходят из-за лицензии GPL.

Есть ли другой способ или другая библиотека для заполнения полей формыи добавить изображение в PDF в PHP?

1 Ответ

1 голос
/ 25 сентября 2019

Мы (Setasign - также автор FPDI) предлагаем коммерческое решение для обеих задач: заполнение PDF-форм и заполнение полей изображениями на чистом PHP.

Если вы использовали FPDM, вы могли заполнить тольков текстовых полях.Заменой будет SetaPDF-FormFiller Lite Component .Полная версия позволит вам также заполнить другие типы полей, такие как флажки или группы радиокнопок.

Простой пример заполнения одного текстового поля и дополнительного поля с изображением:

<?php

require_once('library/SetaPDF/Autoload.php');
// or if you use composer require_once('vendor/autoload.php');

// create a file writer
$writer = new SetaPDF_Core_Writer_File('image-in-form-field.pdf');
// get the main document instance
$document = SetaPDF_Core_Document::loadByFilename($filename, $writer);

// now get an instance of the form filler
$formFiller = new SetaPDF_FormFiller($document);

// Get the form fields of the document
$fields = $formFiller->getFields();

// Let's fill a field
$fields['Text Field']->setValue("Some example text.");

// Now prepare an appearance for the Logo field
// First of all let's get the annotation of the form field
$annotation = $fields['Logo']->getAnnotation();
// Remember the width and height for further calculations
$width = $annotation->getWidth();
$height = $annotation->getHeight();

// Create a form xobject to which we are going to write the image.
// This form xobject will be the resulting appearance of our form field.
$xobject = SetaPDF_Core_XObject_Form::create($document, array(0, 0, $width, $height));
// Get the canvas for this xobject
$canvas = $xobject->getCanvas();

// Let's create an image xobject
$image = SetaPDF_Core_Image::getByPath('Logo.png')->toXObject($document);

// scale image into available space and align in the center
if ($image->getHeight($width) >= $height) {
    $image->draw($canvas, $width / 2 - $image->getWidth($height) / 2, 0, null, $height);
} else {
    $image->draw($canvas, 0, $height / 2 - $image->getHeight($width) / 2, $width);
}

// Now add the appearance to the annotation
$annotation->setAppearance($xobject);

// Flatten all appearances to the pages content stream
$fields->flatten();

// finish the document
$document->save()->finish();

Этот скрипт является краткой версией this demo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...