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 ...
随机推荐
- [转帖]DBWR与LGWR的写入机制
https://www.jianshu.com/p/6c87cb6cd320 读与写是每个数据库提供的最基本的功能.当数据库中出现第一个进程时,总免不了要将数据从磁盘上加载到内存中,一次数据库的物理I ...
- [转帖]在KingbaseES数据库中批量创建数据库/表
1. 问题 如何在KingbaseES中批量创建表和库? 2. 通过shell脚本文件实现 有时候我们在进行测试的时候需要进行批量的建库以及建表,这时我们可以使用shell脚本实现或者是SQL实现,s ...
- [转帖]CentOS7上systemctl的使用
https://www.cnblogs.com/yeyuzhuanjia/p/14676182.html CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系 ...
- [转帖]ubuntu开启sar记录日志
https://www.cnblogs.com/ishmaelwanglin/p/16955227.html 背景 之前一直用CentOS系统,最近换到了ubuntu的,sar日志对分析系统状态和基本 ...
- [转帖]docker build 中的 -f 选项
https://www.jianshu.com/p/06c35fd299b7 需要注意的是,在 docker build 命令接收的参数中,提供给 docker build 命令的 -f 选项应该 D ...
- [转帖]Elasticsearch部署配置建议
1: 选择合理的硬件配置:尽可能使用 SSD Elasticsearch 最大的瓶颈往往是磁盘读写性能,尤其是随机读取性能.使用SSD(PCI-E接口SSD卡/SATA接口SSD盘)通常比机械硬盘(S ...
- [转帖]SQL Server JDBC – Set sendStringParametersAsUnicode to false
https://vladmihalcea.com/sql-server-jdbc-sendstringparametersasunicode/ https://learn.microsoft.com/ ...
- [转帖]Nginx动静分离详解以及配置
https://developer.aliyun.com/article/885602?spm=a2c6h.24874632.expert-profile.314.7c46cfe9h5DxWK 简介: ...
- Harbor简单搭建以及异常排查的过程与思路
Harbor简单搭建以及异常排查的过程与思路 前言 我发现我总是能够遇到别人遇不到的问题. 本来搭建十分钟就可以搭建完成 结果我硬生生的搭建了四十分钟. 为了保证下次不再浪费时间. 这里加单总结一下遇 ...
- 【遇到一个怪异的问题】使用embed来加载模版,只要写在init()函数中就会导致HTTP服务出错
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 经过反复测试,只要换一个写法就能开启/重现这个怪异的问题. ...