Как перенести подпись пользователя из веб-формы в шаблон pdf?

#php #html5-canvas #base64 #pdftk #fdf

#php #html5-canvas #base64 #pdftk #fdf

Вопрос:

У меня есть веб-форма, которая использует элемент холста HTML5, позволяющий пользователям подписывать свое имя. При отправке формы обрабатываются и сохраняются все значения полей и строка base64 (например, «данные: изображение / png; base64,blahblahetc»), содержащие подпись пользователя.

Я хотел бы заполнить свой шаблон PDF представленными данными и записать подпись в форму, но я борюсь с задачей подписи.

Я нашел один метод во время исследования, который предполагает, что я мог бы написать подпись в виде кнопки pdf с помощью:

 << /T (button1)/APRef << /N << /F (http://www.yoursite.com/pfds/icons.pdf)/Name (icon3)>> >> >> 
 

Однако мне не удается заставить это работать. Я не знаю, должна ли подпись быть подготовлена в формате .png, .pdf или что-то еще. (Я могу успешно сгенерировать файл .png на сервере, но не пытался применить его к файлу .pdf, потому что не знаю, нужно ли мне это.)

Я использую pdftk для заполнения моего template .pdf динамическим файлом .fdf. Нужно ли мне выполнять какие-либо специальные приготовления для кнопки подписи? Кажется, я что-то читал о настройке макета на «Только значок».

Ответ №1:

Поскольку я не мог найти способ применить подпись к pdf в виде кнопки, мне пришлось повозиться и взломать, чтобы получить все данные формы и подписи с сервера в новый pdf.

Сначала fopen / fwrite значения формы в новый fdf, затем используйте pdftk для создания неподписанного pdf:

 echo exec("cd $submissions_path/; $pdftk "$template" fill_form "$fdf" output "$unsigned_pdf"; chmod 777 "$unsigned_pdf";");
 

Затем fopen / fwrite мои подписи base64 в изображения подписей:

 $fp=fopen("$submissions_path/$simg","wb");
fwrite($fp,base64_decode($scode));
fclose($fp);
 

Затем сгенерируйте водяной знак .html для преобразования в водяной знак .pdf с помощью mPDF (пожалуйста, извините за использование таблиц, mPDF не понравились мои <div> ):

 $watermark_pdf="InstallOrder_{$submissionID}_Watermark.pdf";
$watermark_html="<table style="width:792px;height:1123px;"><tr>";
$watermark_html.="<td colspan="2" style="padding-top:900px;padding-left:70px;width:240px;height:20px;">{$watermark[CustomerSignature]}</td>";
$watermark_html.="</tr><tr>";
$watermark_html.="<td style="padding-top:16px;padding-left:69px;width:240px;height:20px;">{$watermark[OwnerSignature]}</td>";
$watermark_html.="<td style="padding-top:16px;padding-left:169px;width:240px;height:20px;">{$watermark[ManagerSignature]}</td>";
$watermark_html.="</tr></table>";
include("../mpdf/mpdf.php"); //Include mPDF Class
$mpdf=new mPDF('','',0,'',0,0,0,0,0,0,'P'); // Create new mPDF Document
$mpdf->WriteHTML($watermark_html);
$mpdf->Output("$watermark_pdf","F");    //save file to server - may include a path
 

Наконец, поставьте водяной знак.pdf на неподписанный.pdf, снова используя pdftk:

 echo exec("cd $submissions_path/; $pdftk "$unsigned_pdf" stamp "$watermark_pdf" output "$pdf"");
 

Самая утомительная часть — это правильная настройка размера и положения изображений подписи в html водяного знака.