#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 водяного знака.