Java 使用 itext 向PDF插入数据和图片
Java 使用 itext 向PDF插入数据和图片
一、下载Adobe Acrobat DC

二、制作模板
1、准备一个word模板,并转换成PDF格式

2、使用Adobe Acrobat DC打开PDF文档,并在右侧搜索框搜索表单,点击准备表单

3、点击开始,制作PDF表单

4、扫描完成后如下图,蓝白色框就是可编辑表单

5、点击表单编辑表单名称以及插入时的字体大小样式等,如果没有设置字体大小,数据写入时会将字体会根据表单的高度自适应大小


6、编辑完成后保存PDF模板
三、在Java中使用

1 import com.itextpdf.text.DocumentException;
2 import com.itextpdf.text.Image;
3 import com.itextpdf.text.Rectangle;
4 import com.itextpdf.text.pdf.*;
5
6 import java.io.*;
7
8 import java.nio.file.Files;
9 import java.util.Calendar;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 public class PDFUtil {
14
15 private static void insertImage(AcroFields form, PdfStamper stamper, String filedName, String url) throws IOException, DocumentException {
16 int pageNo = form.getFieldPositions(filedName).get(0).page;
17 Rectangle signRect = form.getFieldPositions(filedName).get(0).position;
18 float x = signRect.getLeft();
19 float y = signRect.getBottom();
20
21 Image image = Image.getInstance(url);
22 // 获取操作的页面
23 PdfContentByte under = stamper.getOverContent(pageNo);
24 // 根据域的大小缩放图片
25 image.scaleToFit(signRect.getWidth(), signRect.getHeight());
26 // 添加图片
27 image.setAbsolutePosition(x, y);
28 under.addImage(image);
29 }
30
31 public static Boolean pdfTemplateInsert(String templateUrl, String outputFileUrl, Map<String, Object> templateValueMap, Map<String, String> templateImageMap) {
32 boolean success = true;
33
34 OutputStream os = null;
35 PdfStamper ps = null;
36 PdfReader reader = null;
37 try {
38 os = Files.newOutputStream(new File(outputFileUrl).toPath());
39 //读取pdf表单
40 reader = new PdfReader(templateUrl);
41 //根据表单生成一个新的pdf文件
42 ps = new PdfStamper(reader, os);
43 //获取pdf表单
44 AcroFields form = ps.getAcroFields();
45 //给表单中添加中文字体
46 BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
47 form.addSubstitutionFont(bf);
48 if (null != templateValueMap && !templateValueMap.isEmpty()) {
49 for (String key : templateValueMap.keySet()) {
50 form.setField(key, String.valueOf(templateValueMap.get(key)));
51 }
52 }
53
54 if (null != templateImageMap && !templateImageMap.isEmpty()) {
55 for (String key : templateImageMap.keySet()) {
56 insertImage(form, ps, key, templateImageMap.get(key));
57 }
58 }
59 ps.setFormFlattening(true);
60 } catch (Exception e) {
61 success = false;
62 } finally {
63 try {
64 ps.close();
65 reader.close();
66 os.close();
67 } catch (Exception e) {
68 e.printStackTrace();
69 }
70 }
71 return success;
72 }
73
74
75 public static void main(String[] args) {
76 //模板路径
77 String inputUrl = "E:/Desktop/test/demo/itext-demo.pdf";
78 //生成的文件路径
79 String outputUrl = "E:/Desktop/test/demo/itext-demo-output.pdf";
80 Map<String, Object> data = new HashMap<>();
81 data.put("name", "张山");
82 data.put("year", "2000年10月");
83 data.put("phone", "13032451234");
84 data.put("gangwei", "Java开发");
85 data.put("introduceOneself", "熟练使用Java常用框架:Spring 、mybatis等");
86 //图片地址
87 String imageUrl = "E:/Desktop/test/demo/1.jpeg";
88 Map<String, String> templateImageMap = new HashMap<>();
89 templateImageMap.put("image", imageUrl);
90
91 PDFUtil.pdfTemplateInsert(inputUrl, outputUrl, data, templateImageMap);
92 }
93 }
PDFUtil
执行结果

转自:https://blog.csdn.net/HP1004/article/details/131912387
Java 使用 itext 向PDF插入数据和图片的更多相关文章
- 【JAVA - SSM】之MyBatis插入数据后获取自增主键
很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...
- jdbc java数据库连接 7)获取插入数据的自增长值
我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...
- iText导出pdf、word、图片
一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...
- 使用poi根据模版生成word文档,支持插入数据和图片
一.制作word模版,${xxxx}是一会要替换的内容,最下面的表格是要插入数据,根据是否以$开头来判断是需要替换还是插入数据, 注意如果是需要插入数据,制作的表格模版需要一行空行,也只能有一行空行, ...
- Java 使用PDFBox提取PDF文件中的图片
今天做PDF文件解析,遇到一个需求:提取文件中的图片并保存.使用的是流行的apache开源jar包pdfbox, 但还是遇到坑了,比如pdfbox版本太高或太低都不能用!!这个包竟然没有很好地做好兼容 ...
- Android iText向pdf模板插入数据和图片
一.需求 这些日志在写App程序,有这么一个需求,就是需要生成格式统一的一个pdf文件,并向固定表格中填充数据,并且再在pdf中追加两页图片. 二.方案 手工设计一个pdf模板,这个具体步骤就不再赘述 ...
- 【PDF】java使用Itext生成pdf文档--详解
[API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...
- java使用iText生成pdf表格
转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...
- java利用itext导出pdf
项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf.在网上查可以用那些方式导出pdf,用itext比较多广泛. 导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行 ...
- 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)
废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ...
随机推荐
- [转帖]使用 TiUP bench 组件压测 TiDB
https://docs.pingcap.com/zh/tidb/stable/tiup-bench 在测试数据库性能时,经常需要对数据库进行压测,为了满足这一需求,TiUP 集成了 bench 组件 ...
- [转帖]docker build 中的 -f 选项
https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...
- [转帖]深入理解Redis的scan命令
熟悉Redis的人都知道,它是单线程的.因此在使用一些时间复杂度为O(N)的命令时要非常谨慎.可能一不小心就会阻塞进程,导致Redis出现卡顿. 有时,我们需要针对符合条件的一部分命令进行操作,比如删 ...
- [转帖]“炫技”还是“真硬核”,OpenPPL 实测阿里「倚天 710」芯片
http://www.voycn.com/article/xuanjihaishizhenyingheopenppl-shicealiyitian-710-xinpian 本文将以深度学习模型推理 ...
- [转帖]一个故事看懂CPU的TLB
https://www.cnblogs.com/xuanyuan/p/15347054.html Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了- 我所在的CPU是一个八核CPU,就有八个 ...
- ARM平台安装Docker的方法
1. 找了一下有一个网站能够下载docker的arm的deb包可以使用 网址为: https://download.docker.com/linux/ubuntu/dists/xenial/pool/ ...
- adb驱动安装
学会adb,工资涨一千 win系统安装 1.安装adb首先需要去官网下载adb安装包,下载完成后解压会有一个adb目录以及目录下四个文件 2.然后将adb目录mv到C:\Windows下,配置环境变量 ...
- vue render函数的简单使用(1)
1.render函数的介绍 在vue中我们经常使用HTML模板语法来组建页面. 除此之外,使用还可以使用render函数来创建页面. 因为vue是虚拟DOM,拿到template模板时也要转译成VNo ...
- 你不知道的Promise状态变化机制
1.Promise中PromiseStatus的三种状态 var p = new Promise((resolve, reject) => { // resolve 既是函数也是参数,它用于处理 ...
- 微信小程序-常用弹窗
官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showToast.html showToast ...