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. [转帖]VLAN与三层交换机

    目录 一.VLAN概述与优势 二.Trunk的作用 三.IEEE 802.1q 四.VLAN转发 五.Trunk的配置 六.单臂路由概述 七.三层交换机实现VLAN之间通信的原理 八.实验一 九.实验 ...

  2. Win10 查看无线局域网的密码

    1. 打开命令行 输入 control 打开控制面板 2. 进入网络和共享中心 3. 打开连接 4. 使用如下进行查看.

  3. electron-builder

    electron-builder打包工具 首先,确保你的项目中已经安装了 electron-builder.可以在项目根目录下运行以下命令来安装它: npm install electron-buil ...

  4. HTML直接插入js、css

    简单的小页面可以使用 代码量大的话还是建议引用代码 直接包裹起来 <style>这里添加css代码</style> 加入css标识 <style type="t ...

  5. 设置两个Chrome浏览器 一个正常使用 一个无图片版

    添加两个Chrome浏览器 双击打开Chrome浏览器,点击右上角头像,点击添加 选择"在不登录帐号的情况下继续",创建一个名字,选个配色,勾选下面的创建桌面快捷方式 此时会打开一 ...

  6. 10、数据库学习规划:MySQL - 学习规划系列文章

    MySQL数据库是笔者认识的几个流行的数据库之一.类似于Linux重装系统,其也是开源的,最主要是有很多的社区支持,众多的开发者对其能够进行使用,所以其功能也挺强大,便于使用.通过对MySQL数据库的 ...

  7. 案例:推进GTID解决MySQL主主不同步问题

    之前文章介绍过MySQL修改lower_case_table_names参数,如果之前大写存储的表将无法识别,需要特殊处理. 最近遇到一例应用开发人员在修改这个参数之后,为了清除之前大写存储的表,做了 ...

  8. Delphi 官方 MD5

    去官方文档搜就行了,引入System.Hash 单元: http://docwiki.embarcadero.com/Libraries/Athens/en/System.Hash.THashMD5 ...

  9. JAVA生成随机数工具类RandomStringUtils详解

    public static String random(int count, boolean letters, boolean numbers) /** * count 创建一个随机字符串,其长度是指 ...

  10. ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记

    任务16:oauth2 + oidc 实现 client部分 实现 client 之前启动一下上一节的 server,启动之前需要清除一些代码 注释 Program 的 MigrateDbContex ...