我需要在使用 PHP 将预填写的 PDF 表单发送到外部签名服务之前将其展平。我试过使用 php-pdftk 库 (https://github.com/mikehaertl/php-pdftk),但它对我不起作用。
这是我试过的代码:
<?php
require __DIR__ . '/vendor/autoload.php';
use mikehaertl\pdftk\Pdf;
($pdf = new Pdf('/app/pdf-prefilled.pdf'))->flatten()->saveAs('/app/pdf-flat.pdf');
echo $pdf->getError();
这会导致以下错误:
Unhandled Java Exception in create_output():
java.lang.ClassCastException: class pdftk.com.lowagie.text.pdf.PdfString cannot be cast to class pdftk.com.lowagie.text.pdf.PdfDictionary (pdftk.com.lowagie.text.pdf.PdfString and pdftk.com.lowagie.text.pdf.PdfDictionary are in unnamed module of loader 'app')
at pdftk.com.lowagie.text.pdf.PdfStamperImp.flatFields(PdfStamperImp.java:738)
at pdftk.com.lowagie.text.pdf.PdfStamperImp.close(PdfStamperImp.java:163)
at pdftk.com.lowagie.text.pdf.PdfStamperImp.close(PdfStamperImp.java:304)
at com.gitlab.pdftk_java.filter.create_output_filter(filter.java:424)
at com.gitlab.pdftk_java.TK_Session.create_output(TK_Session.java:1445)
at com.gitlab.pdftk_java.pdftk.main_noexit(pdftk.java:192)
at com.gitlab.pdftk_java.pdftk.main(pdftk.java:163)
There was a problem with pdftk-java. Please report it at
https://gitlab.com/pdftk-java/pdftk/issues
including the message above, the version of pdftk-java (3.2.2), and if possible steps to reproduce the error.Xdebug: [Step Debug] Time-out connecting to debugging clien
我还尝试使用 tcpdi 库 (https://github.com/kulbakin/tcpdi),它成功地展平了 PDF 但不保留预填充的数据。不幸的是,它还不支持解析表单字段。
<?php
use TCPDI;
$pdf = new TCPDI();
$pagecount = $pdf->setSourceData($data);
for ($i = 1; $i <= $pagecount; $i++) {
$tplidx = $pdf->importPage($i);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->AddPage();
$pdf->importAnnotations($i);
$pdf->useTemplate($tplidx);
}
$data = $pdf->Output('', 'S');
在保留预填数据的同时,还有其他方法可以在 PHP 中展平预填的 PDF 表单吗?任何帮助将不胜感激
FPDF
PHP 库,用于使用预填表单字段拼合 PDF。
setasign/fpdi
下载:
composer require setasign/fpdi
例子:
<?php
// After include FPDF library
// Load the PDF file
$pdf = new FPDI();
$pdf->AddPage();
// Set source
$pdf->setSourceFile('path/to/your/pdf.pdf');
$template = $pdf->importPage(1);
$pdf->useTemplate($template);
// Flatten the form fields
$pdf->flattenFields();
// Output the flattened PDF
$pdf->Output('path/to/output.pdf', 'F');
?>
您可以使用
flattenFields()
方法来展平PDF 中的表单域。输出是不可编辑的表单字段。填写的数据将在文档中可见。
资源: