寻求通过php将表单数据馈送到pdf文档的更高效、更可靠的方法
从2005年左右开始的几年里,我一直在寻找一种使用php填充现有pdf文档的方法,因为在php中从头开始重新绘制现有pdf,使其具有与现有pdf完全相同的外观是一项heluva任务,尤其是在涉及不断变化的联邦BK文档时 经过一次永恒的搜索,我在2008年发现了这段代码,它“有效”,但不可靠,因为它可能无法“找到”fdf文件(必须将其放入等待的pdf中),因此用户必须尝试几次,fdf加载到浏览器缓存中,最终触发:寻求通过php将表单数据馈送到pdf文档的更高效、更可靠的方法,php,pdf,Php,Pdf,从2005年左右开始的几年里,我一直在寻找一种使用php填充现有pdf文档的方法,因为在php中从头开始重新绘制现有pdf,使其具有与现有pdf完全相同的外观是一项heluva任务,尤其是在涉及不断变化的联邦BK文档时 经过一次永恒的搜索,我在2008年发现了这段代码,它“有效”,但不可靠,因为它可能无法“找到”fdf文件(必须将其放入等待的pdf中),因此用户必须尝试几次,fdf加载到浏览器缓存中,最终触发: $tstamp = date('mdYHis'); $test1 = mysql_
$tstamp = date('mdYHis');
$test1 = mysql_real_escape_string($_POST['test1']);
$test2 = mysql_real_escape_string($_POST['test2']);
$fdf=dirname(__FILE__).'/doc_test/'.$tstamp.'.fdf';
if (file_exists($fdf)) {unlink($fdf);}
require_once 'createFDF_doc_test.php';
$pdf_file_doc_test=$link. '/forms/doc_test.pdf';
// allow for up to 25 different files to be created, based on the minute
$min=date('i') % 25;
$fdf_file_dt=dirname(__FILE__).'/doc_test/'.$tstamp.'.fdf';
if(isset($_POST['test1'])){
$_POST['test1']=$_POST['test1'];
// get the FDF file contents
$fdf_doc_test=createFDF_doc_test($pdf_file_doc_test,$_POST);
// Create a file for later use
if($fp=fopen($fdf_file_dt,'w')){
fwrite($fp,$fdf_doc_test,strlen($fdf_doc_test));
$CREATED=TRUE;
}else{
echo 'Unable to create file: '.$fdf_file_dt.'<br><br>';
$CREATED=FALSE;
}
fclose($fp);
}
$tstamp=date('mdYHis');
$test1=mysql\u real\u escape\u字符串($\u POST['test1']);
$test2=mysql\u real\u escape\u字符串($\u POST['test2']);
$fdf=dirname(uuu文件)'/doc_test/'.$tstamp..fdf';
如果(文件_存在($fdf)){unlink($fdf);}
需要一次“createFDF_doc_test.php”;
$pdf\u文件\u文档\u测试=$link'/表格/doc_test.pdf';
//允许根据分钟数创建多达25个不同的文件
$min=日期('i')%25;
$fdf_file_dt=dirname(_file__)。“/doc_test/”.$tstamp..fdf';
如果(isset($_POST['test1'])){
$_POST['test1']=$_POST['test1'];
//获取FDF文件内容
$fdf_doc_test=createFDF_doc_test($pdf_file_doc_test,$\u POST);
//创建一个文件供以后使用
如果($fp=fopen($fdf\u file\u dt,'w')){
fwrite($fp,$fdf_doc_test,strlen($fdf_doc_test));
$CREATED=TRUE;
}否则{
echo“无法创建文件:”。$fdf_file_dt。“
”;
$CREATED=FALSE;
}
fclose($fp);
}
以下是createFDF_doc_test.php的内容:
<?php
function createFDF_doc_test($file,$info){
$data="%FDF-1.2\n%âãÏÓ\n1 0 obj\n<< \n/FDF << /Fields [ ";
foreach($info as $field => $val){
if(is_array($val)){
$data.='<</T('.$field.')/V[';
foreach($val as $opt)
$data.='('.trim($opt).')';
$data.=']>>';
}else{
$data.='<</T('.$field.')/V('.trim($val).')>>';
}
}
$data.="] \n/F (".$file.") /ID [ <".md5(time()).">\n] >>".
" \n>> \nendobj\ntrailer\n".
"<<\n/Root 1 0 R \n\n>>\n%%EOF\n";
return $data;
}
?>
所有这些操作都是创建一个fdf文件并将其存储在服务器上的一个文件夹中。html表单中的字段名与pdf匹配,fdf充当两者之间的管道
fdf的内容(始终成功保存到服务器)将如下所示:
%FDF-1.2
%âãÏÓ
1 0 obj
<<
/FDF << /Fields [ <</T(test1)/V(Test)>><</T(test2)/V(Complete)>>]
/F (http://example.com/forms/doc_test.pdf) /ID [ <5d721ab873727ae4de3ebd21859bbc60>
] >>
>>
endobj
trailer
<<
/Root 1 0 R
>>
%%EOF
%FDF-1.2
%âãÏÓ
10 obj
>>
endobj
拖车
>
%%EOF
问题是fdf和pdf之间的“联姻”通常不会因为浏览器问题、调用fdf的时间或其他原因而触发。无论哪种方式,代码都很旧,我希望有人知道一种更好、更高效的代码,可以通过php将html表单数据快速无误地移动到等待处理的pdf文档中。我已经使用了8年以上,我已经厌倦了。我们一直在重建模板引擎,以便根据用户提供的模板生成报告。 在搜索web解决方案后,pdftk+的组合成为最佳解决方案 它有一个非常简单的界面,可以使用php数组填充pdf表单,还具有良好的UTF8支持 如文档所示,最简单的用例是:
use mikehaertl\pdftk\Pdf;
// Fill form with data array
$pdf = new Pdf('form.pdf');
$pdf->fillForm(array('name'=>'ÄÜÖ äüö мирано čárka'))
->needAppearances()
->saveAs('filled.pdf');
// Fill form from FDF
$pdf = new Pdf('form.pdf');
$pdf->fillForm('data.fdf')
->saveAs('filled.pdf');
我知道这对目前的问题没有帮助,但我相信这将提供更易于维护的代码
但是真正有趣的是,如果你想嵌入图片,我们必须借助一个帮助程序python脚本来计算我们想要附加图片的元素的位置。你是在寻找免费的还是付费的解决方案?