php 填写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系统,首先把模板文件用命令执行一下,然后作为模板文件

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挺好用的,就是我没有破解版的,自己找去吧

 

 


posted @ 2019-03-28 16:14  西贝小小凤  阅读(...)  评论(... 编辑 收藏