最近接到新的任务,要求把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 .pdf output fixed.pdf

然后执行ex-array.php,会直接打开pdf文件

<?php

//引入文件
require('fpdm.php');
//数组数据填充,字段要对应pdf的表单字段
$fields = array(
'name' => '你好',
'type' => '',
);
//引入模板文件
$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挺好用的,就是我没有破解版的,自己找去吧

												

php 填写pdf 表单的更多相关文章

  1. Java 创建、填充PDF表单域

    表单域,可以按用途分为多种不同的类型,常见的有文本框.多行文本框.密码框.隐藏域.复选框.单选框和下拉选择框等,目的是用于采集用户的输入或选择的数据.下面的示例中,将分享通过Java编程在PDF中添加 ...

  2. 对pdf 表单域 或文本框的操作---动态填充PDF 文件内容

    前提:需要pdf模板:并且模板内容以pdf 文本框的形式填写 package com.test;import java.io.File;import java.io.FileOutputStream; ...

  3. PDF表单域(FormField)在HTML显示与提交数据到服务器

    1.Adobe Arobat Pro等可以编辑表单域,只有几种控件: 2.展示PDF,可用PdfObject.js,Chrome自带? @{ViewBag.Title = @ViewBag.aaa;} ...

  4. 怎样使我们的用户不再抵触填写Form表单?

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://blog.bitsrc.io/8-tips-for-an-awesome-sign ...

  5. c#程序为PDF文件填写表单内容

    众所周知,PDF文件一般情况下是无法修改的,如果你有一张现成的PDF表格,这时想通过编程实现从数据库或者动态生成内容去填写这张表格,就会有些问题了,首先我们要解决以下2个重要的问题: 1.如何将内容写 ...

  6. java中将表单转换为PDF

    经过网上搜索大概有三种方式:PDF模板数据填充,html代码转换pdf,借用wkhtmltopdf工具 一 .PDF模板数据填充 1.新建word,在word中做出和表单一样的布局的空表单,然后另存为 ...

  7. javaWeb项目springMVC框架下利用ITextpdf 工具打印PDF文件的方法(打印表单、插入图片)

    方法一:打印PDF表单以及在PDF中加入图片 需要的资料: jar包:iTextAsian.jar ,itext-2.1.7.jar: 源码: public static void main(Stri ...

  8. Java导出Pdf格式表单

    前言   作为开发人员,工作中难免会遇到复杂表单的导出,接下来介绍一种通过Java利用模板便捷导出Pdf表单的方式 模拟需求   需求:按照下面格式导出pdf格式的学生成绩单 准备工作 Excel软件 ...

  9. 在Adobe Reader中保存PDF表单数据的方法

    通常,Adobe Reader 用户填写表单后,是无法保存所填表单的副本的.但是,对于 Reader 8 和更高版本的用户,您可以扩展其权限,使他们可以完成此操作.如果您使用的是 Acrobat Pr ...

随机推荐

  1. XSS漏洞原理

    注入型漏洞的本质都是服务端分不清用户输入的内容是数据还是指令代码,从而造成用户输入恶意代码传到服务端执行. 00x01js执行 Js是浏览器执行的前端语言,用户在存在xss漏洞的站点url后者能输入数 ...

  2. Codeforces 832A. Sasha and Sticks

    It's one more school day now. Sasha doesn't like classes and is always bored at them. So, each day h ...

  3. idea软件操作

    1.快捷键: 1.1.格式化代码:crtl+alt+L 1.2.一些构造啊,setter/getter等方法:alt+insert 1.3.crtl + f 搜素当前页面

  4. 如何在K3查找BOS单据在哪个子系统中

    select FFunctionID,* from ICClassType where FName_CHS like '%采购订单%'select FSubSysID,* from t_DataFlo ...

  5. PATA-1151 LCA in a Binary Tree

    题意:根据前序和中序建立树,寻找两个点的LCA. 我在之前的博客中写了关于LCA的多种求法. https://www.cnblogs.com/yy-1046741080/p/11505547.html ...

  6. VM中Linux网络设置(固定ip、连接外网开发环境)

      在开发过程中,我们经常需要在linux中进行操作.毕竟服务器的系统大多数都是Linux,所以在dev环境需要配置好一台Linux系统配合开发.   在VMWare Workstation Pro中 ...

  7. Codeforces 1295E. Permutation Separation (线段树)

    https://codeforces.com/contest/1295/problem/E 建一颗线段树,叶子结点是花费从1到i所需要花费的前缀和,表示前i个元素全部移动到右边的花费,再维护区间最小值 ...

  8. c++踩坑大法好 赋值和指针的区别

    1,先说结论: 两个指针指向同一个结构,一个改了结构,另一个也会改掉. 两个指针指向同一个结构,修改了其中一个的指向,并且改了其中的内容,另一个不为所动. 2,看例子 main.cpp #includ ...

  9. python面试的100题(20)

    76.递归函数停止的条件? 递归的终止条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身,还是return:返回终止递归.终止的条件:1.判断递归的次数是否达到 ...

  10. mybatis(五):源码分析 - sqlsource创建流程