zoukankan      html  css  js  c++  java
  • 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 mikehaertlpdftkPdf;
     use mikehaertlpdftkFdfFile;

    // 用数据数组填充表单
    $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 mikehaertlpdftkXfdfFile;
    use mikehaertlpdftkFdfFile;
    
    $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挺好用的,就是我没有破解版的,自己找去吧

    
    
  • 相关阅读:
    跨源资源共享(CORS)
    7.9 restful api
    7.8 http redirected
    7.7 设置http首部
    7.6 request form post
    7.5 URL 解析
    7.4 http request post get
    7.3 ip host反解析
    7.2 tcpclient 基本web
    7.1 获取所有网卡ip地址
  • 原文地址:https://www.cnblogs.com/xbxxf/p/10573487.html
Copyright © 2011-2022 走看看