自动生成PDF文件(Java通过PDF模板自动生成PDF)
思路:
1、创建PDF模板(先创建对应的excel文件,创建好后另存为PDF文件)即可。
2、使用Adobe Acrobat DC工具打开PDF文件,设置自己想要替换的内容。
3、maven项目引入依赖:
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.5</version>
</dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>
3、编写工具类读取模板文件,自动生成PDF文件。
package com.icbc.jfxj.util;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;/*** ** http://www.sinoufc.com/* .--, .--,* ( ( \.---./ ) )* '.__/o o\__.'* {= ^ =}* > - <* / \* // \\* //| . |\\* "'\ /'"_.-~^`'-.* \ _ /--' `* ___)( )(___* (((__) (__))) 高山仰止,景行行止.虽不能至,心向往之。* ** @Description 由PDF模板生成PDF文件工具类* @Author Bingyong.Wang* @Date 2020年10月21日上午9:23:19*/
public class Template2PDFTtil {/*** 使用指定数据填充PDF模板(通知书notice)* 参数:* 1、模板文件路径 templatePath* 2、生成的新文件路径 newPDFPath* 3、获取的数据(这里是通知书相关数据)*/public static void fillNoticeTemplate(String templatePath, String newPDFPath) {// 模板路径//String templatePath = "C:\\Users\\asus\\Desktop\\受理通知书和不动产证明.pdf";System.out.println("通知书模板路径 tempaltePath = " + templatePath);// 新的文件名/*String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + (int)(new Random().nextDouble() * 100000);System.out.println("生成文件的名称 newName = " + newName);*/// 生成的新文件路径/*String newPDFPath = "D:\\upload\\notice\\notice_"+newName+".pdf";System.out.println("生成文件的路径 newPDFPath = " + newPDFPath);*/PdfReader reader;FileOutputStream out;ByteArrayOutputStream bos;PdfStamper stamper;try {// 文件输出流 即写入的文件out = new FileOutputStream(newPDFPath);// PDF读入 即PDF模板reader = new PdfReader(templatePath);bos = new ByteArrayOutputStream();stamper = new PdfStamper(reader, bos);AcroFields form = stamper.getAcroFields();Map<String, String> map = new HashMap<>();// 获取缴费单的数据。 以下为测试数据// 业务类型map.put("businessType", "土地及房屋抵押权首次登记");// 业务编号map.put("businessCode", "202011270006");// 申请人(权利人)map.put("RightHolder", "中国建设银行股份有限公司云南省分行");// 申请人(义务人)map.put("Obligor", "张万奎");// 坐落map.put("address", "云南省昆明市官渡区小板桥街道北门街58号4-5幢1层520号云南省昆明市官渡区小板桥街道北门街58号4-5幢1层520号");// 权属证书(已登记证明)号map.put("OCNumber", "云(2020)五华区不动产权第0293218号");// 不动产登记申请书 页数map.put("page1", "2");// 不动产权证书 页数map.put("page2", "4");// 主债权合同及抵押合同表 页数map.put("page3", "11");// 不动产登记按规定要求提供的其他材料 页数map.put("page4", "1");Iterator<String> it = form.getFields().keySet().iterator();while (it.hasNext()) {String name = it.next();// 替换模板中对应字段的值form.setField(name, map.get(name));}// true代表生成的PDF文件不可编辑stamper.setFormFlattening(true);stamper.close();Document doc = new Document();PdfCopy copy = new PdfCopy(doc, out);doc.open();PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);copy.addPage(importPage);doc.close();} catch (IOException e) {e.printStackTrace();} catch (DocumentException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception{System.out.println("===================== 以下是获取模板文件的路径 ========================");File directory = new File("src/main/resources/pdf");// 获取通知书模板String noticeTemplatePath = directory.getCanonicalPath() + "\\template\\受理通知书和不动产证明.pdf";System.out.println("========== noticeTemplatePath ====> " + noticeTemplatePath + "============");String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + (int)(new Random().nextDouble() * 100000);// 生成新的文件String newPDFPath = directory.getCanonicalPath() + "\\create\\notice_" + newName + ".pdf";System.out.println("========== notice newPDFPath =====> " + newPDFPath);fillNoticeTemplate(noticeTemplatePath, newPDFPath);}
}
注意:
1 首先安装Adobe Acrobat DC。下载地址:https://pan.baidu.com/s/1BxjHtK5zAWBBsrOGZbEtdw
2 pdf模板编辑注意事项 详见 https://my.oschina.net/aijiaoer0624/blog/1921113?tdsourcetag=s_pcqq_aiomsg
自动生成PDF文件(Java通过PDF模板自动生成PDF)相关推荐
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
- java 生成pdf文件_Java 中HTTP响应数据生成PDF,PDF文件的读取
将HTTP响应数据生成PDF,这一步的话,就比较坑,浪费了好多时间,查了很多资料,也是我想把它记录下来的主要原因, 废话少说,先说踩的坑 1.区分字符流.字节流 这里可以百度一下,但是简言之就是: j ...
- Java实现pdf转tex_使用Free Spire.PDF在Java程序中创建和转换PDF文件
在这篇文章中,我将举例说明如何创建一个包含标题,段落,图像,编号列表和表格的简单的PDF文件,以及如何使用Free Spire.PDF将PDF转换为其他文件格式. 概述 Free Spire.PDF ...
- Aspose.PDF for Java系列8-转化HTML为PDF
Aspose.PDF for Java系列8-转化HTML为PDF 转化HTML为PDF 主要分为以下步骤: 创建一个HtmlLoadOptions类. 实例化Document对象. 调用Docume ...
- php html转为pdf文件,php使用wkhtmltopdf实现html转pdf
项目中有需求将html页面实时转为pdf并提供下载.经过各种查找比对,最终使用了wkhtmltopdf工具来实现. wkhtmltopdf,可以很方便的将输入的url渲染并打印成pdf文件.当然也有一 ...
- 电脑上怎么做pdf文件_怎么编辑pdf文件内容?什么工具可以编辑pdf?
怎么编辑pdf文件内容?临近毕业时候,我有了报考教师资格证的想法,打算之后当老师.期间,我在网上找了很多报考教资的参考资料,不过它们大多是以pdf格式文件形式存在.有时候要往里加入.修改些内容,但我不 ...
- python修改pdf文件大小,python读pdf文件字体大小_用Python读取pdf文件
#首先需要在cmd用 pip 安装pdfminer3k 如: #pip list 可以看用pip 安装的所有东西 import sys import importlib importlib.reloa ...
- PDF文件能编辑吗,怎么删除PDF文档中的空白页
有时候我们接触的文件是PDF格式,到遇到文件中夹杂的有空白页面需要进行删除的时候,这个时候我们应该怎么操作呢,有些小伙伴不知道PDF文件能不能编辑,小编来告诉你,PDF文件是可以编辑的,但PDF文件的 ...
- 计算机加密解除,pdf文件加密怎么解除?解除加密pdf文件的教程
原标题:pdf文件加密怎么解除?解除加密pdf文件的教程 pdf文件被加密了之后怎么解除呢?很多人为了让文件更加安全,都会给一些重要的文件加密.但是,文件如果是带有密码的话,进行转换.合并或编辑等操作 ...
- PDF文件有编辑权限,怎么编辑PDF文件?
PDF文件的编辑权限,其实是PDF文件设置了限制编辑,会导致不能在打开PDF文件之后能够直接编辑PDF文件.不能粘贴复制.不能打印PDF文件等限制. 遇到这种情况,我们只需要将限制编辑取消就可以了,在 ...
最新文章
- 微信小程序使用阿里巴巴iconfont字体图标
- 图像旋转的MATLAB和OpenCV源码
- StackOverflow 每月5.6亿PV,但只用25台服务器
- 文件对比工具Beyond Compare的使用(入门)
- java 文件监听器_java7 文件监听器
- Eclipse 各种小图标的含义
- centos网络隔一段时间就断_潮汕青年说 | 瞎吃小哥:隔着屏幕也要把你看馋的顶配版吃货...
- 你与顶级架构师的差距,可能就在这个数据中台解决方案
- 面试4轮字节Java研发岗,最终拿下Offer(原题复盘)
- js清空浏览器cokie缓存_JS设置cookie,删除cookie
- 简单的了解下前端路由 hash 与 history 差异
- 深度 | 蚂蚁金服DASFAA论文带你深入了解GBDT模型
- unity android 不锁屏,Unity 实现Android不锁屏
- 【性能工具】Windows性能监控工具Perfmon使用指南
- 【Day_09】走方格的方案数
- 目标检测(四):SSD之Pytorch源码解读
- 双软企业两免三减半政策
- 超融合架构与容器超融合
- CentOS 7 多硬盘合并 mergerfs 磁盘合并 + Duf 磁盘容量查看
- 人工智能的编年史——从开始到现在
热门文章
- 夏季晚睡早起符合养生原则
- 拍照打卡签到活动到达地点拍照上传管理document.getElementById(“myP“).innerHTML=“拍照“;
- SQL 注释语句 (--与/*...*/)
- 基于 SpringBoot+Vue 的开源数据可视化分析工具
- SNP/单核苷酸多态性分析
- pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)
- 计算机网络之无线局域网
- 【测试工程师】关于软件测试的10条建议
- 凡科小程序服务器域名,小程序支付申请及配置教程
- tensorflow2.0 实现MTCNN、P_net数据生成,及训练-1