php 填写pdf 表单
最近换了个模板,但是pdf一直报错,预览的时候提示未能加载pdf文件,发现是忘了执行命令,重新编辑一下,提醒自己以后有问题要牢记
今天有问题百度的时候百度到自己的文章了,但是不在自己的博客里面,阅读量比我的还多,哈哈哈哈哈哈
文章可以转载,麻烦注明出处哈~
--------------------------------------------------正文分割线--------------------------------------------------------------
最近接到新的任务,要求把pdf的文档,编辑后发邮件
首先pdf表单提交,需要用到这个东西pdftk,GitHub地址:https://github.com/mikehaertl/php-pdftk
首先用到他需要安装,我的环境是win7,先已到项目的根目录,然后用composer安装
1、
composer require mikehaertl/php-pdftk
安装完了,在项目根目录会多出来这些东西(没有.setting,buildpath啥的应该,这些是我加到编辑器里面自动加上的)
还有一个办法是在GitHub上面直接下载 地址 而且这里面有教程啊
2、在项目根目录新建一个bootstrap.php,里面放上这串代码
<?php
require '/vendor/autoload.php';
use mikehaertl\pdftk\Pdf;
use mikehaertl\pdftk\FdfFile;
// 用数据数组填充表单 $pdf = new Pdf('form.pdf'); $pdf->fillForm([ 'name'=>'西贝小小凤', 'sex' => '女', ]) ->needAppearances() ->saveAs('filled.pdf'); // 从FDF填写表格 data.xfdf文件长啥样呢?看下面的代码 $pdf = new Pdf('form.pdf'); $pdf->fillForm('data.xfdf') ->saveAs('filled.pdf'); // 检查错误 if (!$pdf->saveAs('my.pdf')) { $error = $pdf->getError(); }
然后保存一下,我看这个我看了好长时间没看懂,我这个理解能力也是醉了,最后请教了大佬
这是比较简单的,运行第一个,会自定下载一个filled.pdf文件,内容是你你填写的内容
第二个也是
3、从PHP数组创建XFDF/FDF文件,也就是上面的那个data.xfdf文件
use mikehaertl\pdftk\XfdfFile; use mikehaertl\pdftk\FdfFile; $xfdf = new XfdfFile(['name' => '西贝小小凤','sex' => '女']);
$xfdf->saveAs('/path/to/data.xfdf');
$fdf = new FdfFile(['name' => '西贝小小凤','sex' => '女']);
$fdf->saveAs('/path/to/data.fdf');
然后生成这样的文件
<?xml version="1.0" encoding="UTF-8"?> <xfdf xmlns="http://ns.adobe.com/xfdf/" xml:space="preserve"> <fields> <field name="name"> <value>西贝小小凤</value> </field> <field name="sex"> <value>女</value> </field> </fields> </xfdf>
因为我本地环境有问题,我不能直接保存,我用了一条命令保存的
pdftk a.pdf fill_form data.fdf output b.pdf
a.pdf是模板文件
data.fdf是填充数据
b.pdf是填充后保存的数据
我们再做的时候发现这样的一个问题,就是填充完了,但是不显示,需要点击后才显示,看网上说是字体的问题,改为微软雅黑也不可以,求各位大神指教
---------------------------分割线------------------------------------------------
因为填充的问题,我有换了新的方法,也彻底放弃了上面所有的方法,功亏一篑的感觉真难受,
下面我说一下新的方法,文件下载链接https://files.cnblogs.com/files/xbxxf/fpdm.rar
下载文件,会看到这些文件
linux系统,首先把模板文件用命令执行一下,然后作为模板文件
这一条非常重要,我这次换了个pdf模板,但是忘了执行这个命令,一直报错,我还是搜文档,发现搜到了自己的文章,哈哈哈哈哈哈
pdftk 1.pdf output fixed.pdf
然后执行ex-array.php,会直接打开pdf文件
<?php
//引入文件 require('fpdm.php'); //数组数据填充,字段要对应pdf的表单字段 $fields = array( 'name' => '你好', 'type' => '1231', ); //引入模板文件 $pdf = new FPDM('fixed.pdf'); $pdf->Load($fields, true); // second parameter: false if field values are in ISO-8859-1, true if UTF-8 $pdf->Merge(); $pdf->Output();//输出文件 ?>
然后执行pdf.php,会生成一个新的文件
<?php $aa = file_get_contents('http://localhost/fpdm/ex-array.php');//上面的ex_array.php文件 $myfile = file_put_contents("1122.pdf", $aa)//生成新的填充后的1122.pdf文件 ?>
但是我在框架里面测试的时候把ex_array.php文件的内容放在函数里面,生成新的文件会报错,所以还得用原生的php方法去写,
其实也很简单,我是前台提交数据,然后接收数据后填充pdf,
首先表单提交单pdf.php文件,接受数据后把file_get_contents('http://localhost/fpdm/ex-array.php?name=123&type=233'); 把数据加到url里面,然后ex-array.php接受数据,填充pdf
file_put_contents 生成新的pdf,我们获得了填充后的pdf就简单了,之后再跳回方法里面去执行其他的操作
说的好乱,但是有问题请留言,趁着刚做完还能记住
再叨叨一句,说一下pdf表单的设置,对表单右键->属性,设置一下,我用的 迅捷PDF编辑器,那个Adobe的Acrobat挺好用的,就是我没有破解版的,自己找去吧