java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...
Java PDF工具类(一)| 使用 itextpdf 根据设置好的PDF模板填充PDF(文字和图片)
相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文字/图片/页眉页脚).
参考文章:https://www.cnblogs.com/wangpeng00700/p/8418594.html
这里主要使用到 itextpdf 的工具包
特点:
一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把“张三”赋给name,那么输出的pdf里面name的地方就变成了张三,准确方便快捷
支持中文,可以使用自己下载的字体。
支持图片:图片的大小范围可以在模板随意调,生成出来的图片不会超过范围。而且不需要根据坐标去算,程序里面自动计算的。
支持多页模板,即使是好几页的模板,只要每个变量对应的范围确定好了,生成出来的格式就不会错乱。
这里我下载了一个宋体的字体文件,大家可以下载进行参考:
链接:https://pan.baidu.com/s/13i4t7R4gHOBUeh4lGzVZYg
提取码:s7un
效果图:
一、模板准备
1.下载编辑PDF软件(adobe_acrobat_pro),大家可自行下载,也可下载我的百度网盘中的
链接:https://pan.baidu.com/s/1I-a2rHnI_Xrz0zK7OzWP0A
提取码:hi71
下载成功,解压后双击运行安装:
2.根据work模板生成对应的PDF模板文件
1.新建一个work文档,并将其另存为为PDF格式:
2.将名称为 test2 的PDF文件用第一步安装的 Adobe Acrobat Pro 打开,进行表单的编辑和变量名的填充:
设置文本域的变量名,后期在代码中用于替换对应的值用:
也可以设置字体大小等,是否需要边框
设置图片,图片的地方没有文本域,在空白地方点击右键,选择文本域,然后就可以规定显示图片区域的大小了,最后的图片显示不会超出这个边框:
最后的结果,直接保存即可:
二、具体代码实现
1.在pom文件中引入 itextpdf 依赖
com.itextpdfgroupId>
itextpdfartifactId>
5.4.3version>
dependency>
2.在F盘下放入test2.pdf文件和一张图片
3.PDFUtils:
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* PDF生成
*/
public class PDFUtils {
/** 模板路径 */
private static final String TEMPLATE_PATH = "F:\\test2.pdf";
/** 生成的新文件路径 */
private static final String NEW_PDF_PATH = "F:\\testOut1.pdf";
/**
* 利用模板生成pdf
* @param sourceMap 数据源Map
*/
public static void pdfout(Map sourceMap) {
PdfReader reader;
FileOutputStream out;
ByteArrayOutputStream bos;
PdfStamper stamper;
try {
// 设置字体
BaseFont bf = BaseFont.createFont("D:\\bb2360\\simsun.ttf" , BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font fontChinese = new Font(bf, 3, Font.NORMAL);
out = new FileOutputStream(NEW_PDF_PATH);// 输出流
reader = new PdfReader(TEMPLATE_PATH);// 读取pdf模板
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
AcroFields form = stamper.getAcroFields();
//文字类的内容处理
Map dataMap = (Map)sourceMap.get("dataMap");
form.addSubstitutionFont(bf);
for(String key : dataMap.keySet()){
String value = dataMap.get(key);
form.setField(key,value);
}
//图片类的内容处理
Map imageMap = (Map)sourceMap.get("imageMap");
for(String key : imageMap.keySet()) {
String imgpath = imageMap.get(key).toString();
int pageNo = form.getFieldPositions(key).get(0).page;
Rectangle signRect = form.getFieldPositions(key).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
//根据路径读取图片
Image image = Image.getInstance(imgpath);
//获取图片页面
PdfContentByte under = stamper.getOverContent(pageNo);
//图片大小自适应
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
//添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
}
stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
stamper.close();
Document doc = new Document();
Font font = new Font(bf, 32);
PdfCopy copy = new PdfCopy(doc, out);
doc.open();
PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
copy.addPage(importPage);
doc.close();
} catch (IOException | DocumentException e) {
System.out.println(e);
}
}
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("name","张三");
map.put("idcard","430159199802156596");
Map map2 = new HashMap<>();
map2.put("image","F:\\test2.png");
Map o=new HashMap<>();
o.put("dataMap",map);
o.put("imageMap",map2);
pdfout(o);
}
}
4.结果展示:
至此结束,更多的功能和优化,大家可以自行补充完整!希望能对大家有用!
相关文章: Java PDF工具类(二)| 使用 wkhtmltox 实现 HTML转PDF(文字/图片/页眉页脚).
java pdf工具类_Java PDF工具类(一)| 使用 itextpdf 根据PDF模板生成PDF(文字和图片)...相关推荐
- java itextpdf使用HTML模板生成pdf文件,并设置table
我们这里是maven项目,导入相应jar包: <dependency><groupId>org.freemarker</groupId><artifactId ...
- java 字符串转pdf文件_java中根据模板生成pdf文件
原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...
- java导出pdf文件并下载_java根据模板生成pdf文件并导出
1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...
- Java使用Itext5与html模板生成pdf并支持下载
Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...
- Java根据模板生成pdf文件并导出
原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...
- java根据模板生成pdf文件并导出(iText)
java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...
- java按模板生成pdf_java中根据模板生成pdf文件
简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...
- JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行
1.前言 前一段时间遇到一个制作Pdf的业务,自己下来摸索了一下,基本上解决.将其中遇到的几个问题及解决方法做以记录,仅供大家参考. 首先在这里对于刚接触该类型业务的同学说明下,ItexPdf支持使用 ...
- java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件
Java 使用pdf 模板生成pdf文件 --制作流程 1. 使用工具 adobe acrobat dc.word 2015 2. 使用 word 繪制一個 3*5 的表格並保存, ...
最新文章
- Hive SQL 监控系统 - Hive Falcon
- Spark-ML-数据获取/处理/准备
- iOS开发-动画总结
- renderer的两种使用方式
- Spring MVC + Thymeleaf
- openwrt上wifi探针的实现
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
- c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎
- CentOS添加明细路由
- scala泛型上边界_Scala类型边界:上边界,下边界和视图边界
- 6010dn 华为 组网 胖ap_家庭网络AC+AP升级改造记录
- java基础习题_Java基础知识练习题及答案
- codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy
- 01 #pragma once用法总结
- datetime计算天数
- 中国十六烷基磷酸钾行业市场供需与战略研究报告
- Spring使用标签aop:aspectj-autoproxy 出的一些错
- 清华 计算机系 赵晟,来看看2010年清华大学自动化系录取名单本科毕业学校
- 第三课:创建BootRom引导镜像
- 自由市场经济、社会主义和大数据