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(文字和图片)...相关推荐

  1. java itextpdf使用HTML模板生成pdf文件,并设置table

    我们这里是maven项目,导入相应jar包: <dependency><groupId>org.freemarker</groupId><artifactId ...

  2. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  3. java导出pdf文件并下载_java根据模板生成pdf文件并导出

    1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy com.itextpdf itextpdf 5.5.10 [html ...

  4. Java使用Itext5与html模板生成pdf并支持下载

    Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...

  5. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  6. java根据模板生成pdf文件并导出(iText)

    java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...

  7. java按模板生成pdf_java中根据模板生成pdf文件

    简介 本文使用java引入apache提供的pdf操作工具生成pdf文件,主要是根据需求开发了一个util类,记录一下学习和开发过程. 业务需求 因为业务需要,对于不同的用户要生成一个不同的pdf文件 ...

  8. JAVA 使用Itext模板生成pdf,解决图片插入,文本域超出字体缩放,半自动换行

    1.前言 前一段时间遇到一个制作Pdf的业务,自己下来摸索了一下,基本上解决.将其中遇到的几个问题及解决方法做以记录,仅供大家参考. 首先在这里对于刚接触该类型业务的同学说明下,ItexPdf支持使用 ...

  9. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

最新文章

  1. Hive SQL 监控系统 - Hive Falcon
  2. Spark-ML-数据获取/处理/准备
  3. iOS开发-动画总结
  4. renderer的两种使用方式
  5. Spring MVC + Thymeleaf
  6. openwrt上wifi探针的实现
  7. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
  8. c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎
  9. CentOS添加明细路由
  10. scala泛型上边界_Scala类型边界:上边界,下边界和视图边界
  11. 6010dn 华为 组网 胖ap_家庭网络AC+AP升级改造记录
  12. java基础习题_Java基础知识练习题及答案
  13. codec engine代码阅读四---CE_DIR/examples/ti/sdo/ce/examles/codecs/videnc_copy
  14. 01 #pragma once用法总结
  15. datetime计算天数
  16. 中国十六烷基磷酸钾行业市场供需与战略研究报告
  17. Spring使用标签aop:aspectj-autoproxy 出的一些错
  18. 清华 计算机系 赵晟,来看看2010年清华大学自动化系录取名单本科毕业学校
  19. 第三课:创建BootRom引导镜像
  20. 自由市场经济、社会主义和大数据

热门文章

  1. 【转】互联网产品经理常用软件及工作平台
  2. PHP 技巧 * 附近的人功能实现
  3. dom4j解析dom示例
  4. 图灵机器人快速接入教程
  5. (三)【矩阵论】(子空间)常见子空间|基扩张定理|和空间与交空间|直和
  6. sql20005 分页存储过程
  7. 数据库设计--数据流图(DFD)
  8. sublime3怎么设置中文很简单
  9. vue-seamless-scroll组件踩坑指南
  10. 微信小程序API----授权登录拿到用户头像昵称等信息