说明

日常开发中,通常会有动态填充Pdf表单的需求,程序可根据用户的输入或后台数据库的内容,动态、批量向Pdf模板中填充内容。

这里简单介绍一下Pdf模板的制作,以及通过iTextPdf组件给pdf Form表单进行内容填充。

Pdf模板制作

1、word中制作表格

使用Office word 或 WPS word,制作出一个表格,通过表格底色,颜色、字体设置、对齐等方式美化一下表格。

效果图如下:

2、word导出为pdf

可以使用WPS的另存为功能,将word导出为pdf文件
导出完的pdf文件,效果如下:

3、pdf模板制作

使用 “Adobe Acrobat DC” 软件,对已经生成的pdf文件进行表单项默认文本的替换。


操作方法:
A). 使用该软件打开上述pdf模板后,依次点击左上角菜单处“文档”–》右侧工具栏中“编辑PDF”;
B). 新的面板中可以看到左上角已出现“编辑PDF”菜单,在其下拉菜单中,选择最下方的“准备表单”项,这时可以看到所有的pdf表单项均被识别出来了;
C). 但是表单上面默认的文本项名称为类似“fill_1”这种文档,双击该文件,在弹窗中将其修改为业务字段名称,如下:

D). 修改适配完毕后,保存该表单pdf文件,为后续程序读写该文件做准备。

使用iTextPdf对pdf表单进行读写

iText(公司网址:https://itextpdf.com/en)是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

项目要使用iText,必须引入jar包才能使用,maven依赖如下:

<!-- 核心jar--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency><!-- 设置输出中文 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- 设置pdf文件密码 -->
<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.54</version>
</dependency>

GenerateResumePDF.java代码清单:

package com.david.pdf;import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.*;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import java.util.Map;public class GenerateResumePDF {public static void resumeGenerate(Map<String, String> paramsMap) {String templatePath = "C:\\Users\\user\\Desktop\\pdf_template\\test-output-2.pdf";String outputPDFPath = "C:\\Users\\user\\Desktop\\pdf_template\\" + paramsMap.get("name") + "-" + paramsMap.get("phone") + ".pdf";PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {out = new FileOutputStream(outputPDFPath);reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields(); //获取pdf上的表单集合,如name/phone//给表单添加中文字体BaseFont baseFont = BaseFont.createFont("C:\\Windows\\Fonts\\simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);form.addSubstitutionFont(baseFont);//遍历map插入数据for (Map.Entry<String, String> entry : paramsMap.entrySet()) {form.setField(entry.getKey(), entry.getValue());System.out.println(String.format("插入PDF数据---> key=%13s, value=%5s", entry.getKey(), entry.getValue()));}//如果设置为false,那么生成的文件还能编辑,一般都需要设置为falsestamper.setFormFlattening(true);stamper.close();//文档对象,包括header、footer、page信息、和页面元数据信息Document doc = new Document();//Make copies of PDF documents. Documents can be edited after reading and before writing them out.PdfCopy copy = new PdfCopy(doc, out);//文档打开,等待写入doc.open();//待写入的页面PdfImportedPage importedPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);//添加页面copy.addPage(importedPage);doc.close();} catch (Exception e) {e.printStackTrace();} finally {}}public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("name", "david");map.put("age", "30");map.put("gender", "男");map.put("phone", "13666666666");map.put("email", "me@189.com");map.put("marriage", "未婚");map.put("jobyear", "2");map.put("education", "博士");map.put("location", "墨尔本");System.out.println("map = " + map);resumeGenerate(map);}}

经过代码填充表单的pdf文件,效果如下图所示:

参考列表,致谢:

  • 使用iTextPdf为Pdf模板填充表单项
  • itext 生成 PDF(一)
  • itext 生成 PDF(二)
  • 官网iText5使用教程
  • itextpdf生成表格的常见用法
  • 使用PdfPCell,PdfPTable生成所需的pdf文件

使用iTextPdf为Pdf模板填充表单项相关推荐

  1. java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...

    Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片) 相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文 ...

  2. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  3. 使用itextpdf在pdf模板中插入对应数据

    大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 目录 大家好今儿给大家带来的是使用itextpdf在pdf模板中插入对应数据 1.需求描述 2.操作Adobe Acrobat ...

  4. itextpdf实现PDF模板文件动态赋值和绘制条形码

    步骤一 创建工程,导入maven依赖如下: <dependency><groupId>com.itextpdf</groupId><artifactId> ...

  5. java使用itextpdf生成pdf并填充自定义数据

    项目中有个需求,对于已有的数据生成对应的发票pdf或者合同pdf,这些pdf具有一些特性,就是pdf有固定的格式,类似于表格,我们只要往表格里面填充数据即可.当然,也会涉及到签章,二维码等需求. 总体 ...

  6. itext通过pdf模板填充数据并调用打印机打印

    使用itext5对生成的pdf模板进行编辑填充数据,一种是通过绝对定位去做,简单的可以,通用性太差,第二种是通过pdf域来填充字段,通用性很强 在使用过程中遇到的问题: 网上都是通过这种字体设置中文的 ...

  7. java pdf模板填充生成pdf打印 (亲测有效)

    //先要制作好pdf模板(可以在word 里面画好,导出保存pdf文件), 下载Adobe Acrobat DC 工具 后打开 pdf 里面带格式的,然后 点击 准备表单按钮 你可以拖动 文本 和文本 ...

  8. #踩坑 Java 使用itextpdf将PDF模板导出文件过大

    itextpdf导出文件 踩坑 问题产生 解决方案 最终方法 涉及到的公共方法/参数 问题产生 处理需求将PDF模板导出后发现前端调取文件时间过长,1min左右.查看才发现导出的文件6m左右,又查看了 ...

  9. 使用itextpdf完成PDF模板类制作、使用

    前言 大家项目中大家或多或少的有啥用到导出功能,有excel的还有pdf的,本文我们就拿pdf来说事,为啥呢,因为excel有阿里的easyExcel用起来很方便,这里就不介绍了. 一.根据公司业务人 ...

最新文章

  1. 优化 UI 应用启动时间的方法
  2. “约见”面试官系列之常见面试题之第七十五篇之vue中如何使当前css起作用(建议收藏)
  3. C++语言基础 —— STL —— 容器与迭代器 —— list 与 deque
  4. 在github上搭建hexo博客
  5. 创业需要的学习能力不是读书考试做题也不是所谓的思维格局
  6. 为何有 60% 的程序员拒绝公开讨论薪资?
  7. 回溯法 —— 判断子集和问题是否存在解
  8. 「三分钟系列04」3分钟看懂Python黑魔法之__repr__和__str__
  9. Mysql绿色版本安装
  10. spring-cloud 出现 No instances available for xxx的问题
  11. 从平安保险出来后,我考察了大童、明亚、永达理,客观说说它们的不同
  12. Qml自定义等待指示器
  13. AWD平台搭建与使用入门
  14. 基因-药物相互作用数据库 DGIdb 介绍
  15. 汽车通信协议:一文搞懂Flexray通信
  16. 使用ubuntu22.04的ibus键盘的汉语输入法
  17. List对象集合属性处理
  18. 零基础如何学习ps?
  19. 微信小程序基础知识 || 如何让微信开发者工具显示切后台按键
  20. 按下( )组合键 可以快速锁定计算机,锁定计算机,小编教你锁定计算机的快捷键...

热门文章

  1. 洛谷P1536村村通(并查集模板题)
  2. 瑞芯微Rockchip出品的驱动安装助手DriverAssitant v4.6
  3. handsontable 自定义编辑器 模版
  4. 中国电信公司全球网络
  5. linux配置js运行环境,解决JavaScript运行环境
  6. python爬虫设置代理ip池
  7. 硬件(磁盘):机械硬盘内部硬件结构和工作原理详解
  8. Alien Skin ExposureX7中文版RAW照片编辑器和组织器
  9. springboot源码分析
  10. 【小白理财】定投实践结束 - 番外篇