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插入数据和图片的更多相关文章

  1. 【JAVA - SSM】之MyBatis插入数据后获取自增主键

    很多时候,我们都需要在插入一条数据后回过头来获取到这条数据在数据表中的自增主键,便于后续操作.针对这个问题,有两种解决方案: (1)先插入,后查询.我们可以先插入一条数据,然后根据插入的数据的各个字段 ...

  2. jdbc java数据库连接 7)获取插入数据的自增长值

    我们创建一个sql表,里面的数据往往都会有自增长值. 那么,我们用jdbc插入数据的时候,要想同时获得这个增长值. 代码: /** * * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自 ...

  3. iText导出pdf、word、图片

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  4. 使用poi根据模版生成word文档,支持插入数据和图片

    一.制作word模版,${xxxx}是一会要替换的内容,最下面的表格是要插入数据,根据是否以$开头来判断是需要替换还是插入数据, 注意如果是需要插入数据,制作的表格模版需要一行空行,也只能有一行空行, ...

  5. Java 使用PDFBox提取PDF文件中的图片

    今天做PDF文件解析,遇到一个需求:提取文件中的图片并保存.使用的是流行的apache开源jar包pdfbox, 但还是遇到坑了,比如pdfbox版本太高或太低都不能用!!这个包竟然没有很好地做好兼容 ...

  6. Android iText向pdf模板插入数据和图片

    一.需求 这些日志在写App程序,有这么一个需求,就是需要生成格式统一的一个pdf文件,并向固定表格中填充数据,并且再在pdf中追加两页图片. 二.方案 手工设计一个pdf模板,这个具体步骤就不再赘述 ...

  7. 【PDF】java使用Itext生成pdf文档--详解

    [API接口]  一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...

  8. java使用iText生成pdf表格

    转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...

  9. java利用itext导出pdf

    项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf.在网上查可以用那些方式导出pdf,用itext比较多广泛. 导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行 ...

  10. 新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)

    废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acr ...

随机推荐

  1. [转帖]Linux中awk命令正确的求最大值、最小值、平均值、总和

    https://blog.csdn.net/fireblue1990/article/details/51622416 test.txt文件内容: 9 11 35 21 42 118 求最大值: aw ...

  2. [转帖]十大主流Nehalem服务器横评(多图)

    https://server.51cto.com/article/201820.html 作者:佚名2010-05-25 09:52:27 运维服务器运维 除了我们的两台基准服务器之外,本次横向评测活 ...

  3. [转帖]超线程 Smt 究竟可以快多少?

    https://www.51cto.com/article/686171.html 刚才我们关闭SMT是把CPU10-CPU19全关了,只留下每对里面的1个CPU,也就是留下了CPU0-CPU9. 默 ...

  4. [转帖]Redis各版本特性汇总

    redis4 redis5 redis6 redis6.2 重大特性 1.模块系统 2.PSYNC2 3.LFU淘汰策略 4.混合RDB-AOF持久化 5.LAZY FREE延迟释放 6.MEMORY ...

  5. [转帖]linux下 进程io队列,IO队列和IO调度

    IO体系概览 先看看本文主题IO调度和IO队列处于整个IO体系的哪个位置,这个IO体系是非常重要的,了解IO体系我们可以对整个IO过程有个全面的认识.虽然一下两下并不清楚IO体系各个部分的细节,但是我 ...

  6. How to Die ( Since 10.10 )

    以后再也不要相信 sqrt 的精度!对 long long 级别的数取 sqrt 会炸精度! 对于区间差分 \([l,r]\) 的问题,一定要注意是否会出现 \(l>r\) 的情况!(\(|A| ...

  7. js 删除数组中的某一个内容

    <script type="text/javascript"> let list=["为","啊发大水","阿斯蒂芬& ...

  8. KPlayer无人直播

    KPlayer文档 其实就看这个教程就可以了: KPlayer文档 启动阿里云或者腾讯云的服务器进行这个步骤 服务器的购买链接: 腾讯云618 夏日盛惠_腾讯云年中优惠活动-腾讯云 域名特惠活动_域名 ...

  9. 第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023)

    第三届人工智能,大数据与算法国际学术会议 (CAIBDA 2023) ​ 大会官网:http://www.caibda.org/ 大会时间:2023年6月16-18日 大会地点:中国郑州 截稿日期:2 ...

  10. 【Jmeter】Request1输出作为Request2输入-后置处理器

    [Jmeter]基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header ...