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. 【转帖】Ethernet 与 Infiniband的网络特性对比

    一.两者定位 以太网(Ethernet): 应用最广泛,是最成熟的网络互联技术,也是整个互联网络大厦的基石,兼容性非常好,可实现不同的系统之间的互连互通 IB(Infiniband): 领域很专,作为 ...

  2. PG数据库异步流复制

    PG数据库异步流复制 背景说明 最近想进行一个数据库高可用课题的研究. 因为之前某种原因,这次选择的是PG数据库. 为了简单起见, 暂时采用PG异步流复制的场景. 这次仅是为了测试, 不考虑高可用绿色 ...

  3. WebAssembly入门笔记[1]:与JavaScript的交互

    前一阵子利用Balazor开发了一个NuGet站点,对WebAssembly进行了初步的了解,觉得挺有意思.在接下来的一系列文章中,我们将通过实例演示的方式介绍WebAssembly的一些基本概念和编 ...

  4. 浅谈kafka

    作者:京东科技 徐拥 入门 1.什么是kafka? apache Kafka is a distributed streaming platform. What exactly dose that m ...

  5. ts函数讲解与不确定参数是否使用以及限制返回类型

    1.声明式函数 函数有两个参数 参数的数据类型是 string number 返回值值 number 哈 function person(name: string, age: number): num ...

  6. vm-storage在全部都是新metric情况下的写入性能测试

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 vm-storage中,写入索引的性能要比写入data p ...

  7. python2排序

    python list cmp排序 对于list的排序一般使用cmp 示例: sorted(xxlist, cmp=self.sortFunc) def sortFunc(self, a, b): r ...

  8. 从零开始配置vim(30)——DAP的其他配置

    很抱歉这么久才来更新这一系列,主要是来新公司还在试用期,我希望在试用期干出点事来,所以摸鱼的时间就少了.加上前面自己阳了休息了一段时间.在想起来更新就过去一个多月了.废话不多说了,让我们开始进入正题. ...

  9. vim 从嫌弃到依赖(23)——最后的闲扯

    截止到上一篇文章,关于vim的基础操作都已经讨论完了,这篇我主要就是闲扯,瞎聊.就想毕业论文都有一个致谢一样,这篇我们就作为整个系列的致谢吧 学习vim到底能给我们带来什么 学习vim到底能给我们带来 ...

  10. c++基础之字符串、向量和数组

    上一次整理完了<c++ primer>的第二章的内容.这次整理本书的第3章内容. 这里还是声明一下,我整理的主要是自己不知道的或者需要注意的内容,以我本人的主观意志为准,并不具备普适性. ...