0

我正在构建一个应用程序来帮助为我的站点设置 PDF 表单。我有我使用的标准表格,但每次将标准表格添加到新帐户时,都需要更改 PDF 文件中的一些隐藏字段。

使用 PHP 如何更新 PDF 文件中字段的值,然后保存文件?我假设我需要使用某种 PHP-PDF 库,所以免费的会有所帮助。

(表单已经使用 Adob​​e Acrobat 使用表单字段进行编程,并且具有唯一的字段名称。我需要做的就是使用字段名称作为键更新几个现有字段)

例子-

PDF File Location = www.mysite.com/accounts/john_smith/form.pdf
PDF Field to update (Field Name) = "account_directory"
PDF Field value to be set = "john_smith"
4

1 回答 1

0

这很笨重,但它完成了工作:使用 createXFDF.php,然后使用 PDFTK 两次。确保您的模板 pdf 在 Adob​​e Reader 中具有扩展功能。使用您将用于填充 PDF 的数据创建一个 XFDF 文件 - 请记住,pdf 中的字段名称必须与 xfdf 中的字段名称匹配。数据是字段名称、字段值的数组。将 PDFTK 与模板 pdf 和 XFDF 一起使用以创建新的中间 PDF。不要使用 FLATTEN - 这将删除可编辑性。现在将 PDFTK cat 与新的中间 PDF 一起使用来创建最终 PDF - 它以某种方式摆脱了 Adob​​e 数字签名(在填充 pdftk 后保持 pdf 表单可编辑- 请参阅 Marco 的答案)。

示例代码:

$data = array();
$field_name = "account_directory";
$field_value = "john_smith";
$data[$field_name] = $field_value;
/* Make $data as big as you need with as many field names/values 
as you need to populate your pdf */

$pdf_template_url = 'http://yoursite.com/yourpath/yourtemplate.pdf';
include 'createXFDF.php';
$xfdf = createXFDF( $pdf_template_url, $data );

/* Set up the temporary file name for xfdf */
$filename = "temp_file.xfdf";

/* Create and write the XFDF for this application */
$directory = $_SERVER['DOCUMENT_ROOT']."/path_to_temp_files/";
$xfdf_file_path = $directory.$filename ; /* needed for PDFTK */
// Open the temp xfdf file and erase the contents if any
$fp = fopen($directory.$filename, "w");
// Write the data to the file
fwrite($fp, $xfdf);
// Close the xfdf file
fclose($fp); 

/*  Write the pdf for this application - Temporary, then Final */
$pdf_template_path = '/yourpath/yourtemplate.pdf';
$pdftk = '/path/to/pdftk'; /* location of PDFTK */
$temp_pdf_file_path = substr( $xfdf_file_path, 0, -4 ) . 'pdf'; 

$command = "$pdftk $pdf_template_path fill_form $xfdf_file_path output $temp_pdf_file_path"; 
/* Note that the created file is NOT flattened so that recipient
can edit form - but this is not enough to allow edit with
Adobe Reader: will also need to remove the signature with PDFTK cat */

exec( $command, $output, $ret );

/* Workaround to get editable final pdf */ 
$pdf_path_final = $directory. "your_final_filename.pdf" ;
$command2 = "$pdftk $temp_pdf_file_path cat output $pdf_path_final";
exec( $command2, $output2, $ret2 );
/* Your pdf is now saved 

/* Remember to UNLINK any files you don't want to save - the .xfdf and the temporary pdf */
于 2015-10-30T18:30:51.747 回答