使用itext到处PDF,使用PDF模板导出PDF文件
1.使用工具编辑好PDF模板
本人使用的是(Adobe Acrobat DC),添加域,生成如下模板:
2.实现PDF导出
2.1导itex相关包
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.1</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>
2.1导出PDF
// pdf模板String fileName = "D:/表1进度付款申请单.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.addSubstitutionFont(bf);//对表单数据进行赋值fields.setField("GCMC", "XXX工程市政工程");fields.setField("BDMC", "XXX标段");fields.setField("BH", "HT-0010");fields.setField("XMJLJG", "XXX建设监理有限公司");fields.setField("startData", "2021年09月16日");fields.setField("endData", "2021年09月16日");fields.setField("work", "2021年09月16日");fields.setField("U_ALL_MONEY", "贰仟壹佰捌拾贰万贰仟壹佰肆拾圆伍角壹分");fields.setField("L_ALL_MONEY", "21822140.51");fields.setField("JDK", "21822140.51");fields.setField("AQSGF", "21822140.51");fields.setField("YFK", "21822140.51");fields.setField("YKK", "0.51");fields.setField("ZFK", "0");fields.setField("Data", "2021年09月16日");//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new1.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();
3.导出结果
4.其他
以上模板只用到文本,如有需要插入图片,以下代码可供参考
String imgpath =“图片路径”;
int pageNo = fields.getFieldPositions(key).get(0).page;
Rectangle signRect = fields.getFieldPositions(key).get(0).position;
float x = signRect.getLeft();
float y = signRect.getBottom();
// 读图片
Image image = Image.getInstance(imgpath);
// 获取操作的页面
PdfContentByte under = ps.getOverContent(pageNo);
// 根据域的大小缩放图片
image.scaleToFit(signRect.getWidth(), signRect.getHeight());
// 添加图片
image.setAbsolutePosition(x, y);
under.addImage(image);
示例
package util;import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;public class PDFUtil {public static void main(String[] args) throws Exception {test();System.out.println("success");}public static void test() throws IOException, DocumentException {// pdf模板String fileName = "D:/表1进度付款申请单.pdf";//读取pdfPdfReader reader = new PdfReader(fileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();//将要生成的目标PDF文件名称PdfStamper ps = new PdfStamper(reader, bos);//PdfContentByte under = ps.getUnderContent(1);//设置中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);//取出报表模板中的所有字段AcroFields fields = ps.getAcroFields();fields.addSubstitutionFont(bf);//对表单数据进行赋值//设置图片String imgpath = "D:/aa.png";int pageNo = fields.getFieldPositions("image").get(0).page;Rectangle signRect = fields.getFieldPositions("image").get(0).position;float x = signRect.getLeft();float y = signRect.getBottom();// 读图片Image image = Image.getInstance(imgpath);// 获取操作的页面PdfContentByte under = ps.getOverContent(pageNo);// 根据域的大小缩放图片image.scaleToFit(signRect.getWidth(), signRect.getHeight());// 添加图片image.setAbsolutePosition(x, y);under.addImage(image);//添加文本fields.setField("GCMC", "XXX工程市政工程");fields.setField("BDMC", "XXX标段");fields.setField("BH", "HT-0010");fields.setField("XMJLJG", "XXX建设监理有限公司");fields.setField("startData", "2021年09月16日");fields.setField("endData", "2021年09月16日");fields.setField("work", "2021年09月16日");fields.setField("U_ALL_MONEY", "贰仟壹佰捌拾贰万贰仟壹佰肆拾圆伍角壹分");fields.setField("L_ALL_MONEY", "21822140.51");fields.setField("JDK", "21822140.51");fields.setField("AQSGF", "21822140.51");fields.setField("YFK", "21822140.51");fields.setField("YKK", "0.51");fields.setField("ZFK", "0");fields.setField("Data", "2021年09月16日");//必须要调用这个,否则文档不会生成的ps.setFormFlattening(true);ps.close();OutputStream fos = new FileOutputStream("E:/new1.pdf");fos.write(bos.toByteArray());fos.flush();fos.close();bos.close();}
}
使用itext到处PDF,使用PDF模板导出PDF文件相关推荐
- POI根据模板导出word文件,以及word转PDF,PDF转图片再插入PDF中(防止PDF被修改)
POI操作word和PDF POI根据模板导出word文件 word转PDF PDF转图片再插入PDF中(防止PDF被修改) POI根据模板导出word文件 一.制作word模版,${xxxx}是一会 ...
- Java 根据模板导出PDF
文章目录 前言 思路一:直接导出pdf 使用itext模板导出pdf 思路二:先导出word再转成pdf 1)导出word 2)word转pdf 最终方案 ~~docx4j~~ spire.doc.f ...
- java按照模板导出pdf或者word
一.java按照模板导出pdf (一)制作模板 1.在word里制作模板 因为PDF常用的软件不支持编辑,所以先用Word工具,如WPS或者Office新建一个空白Word文档,里面制作出自己想要的样 ...
- java使用poi-tl导出word及转换PDF后的合并导出pdf
1.背景 为某单位开发的一款项目申报审批系统,用户需求在申报阶段填写的信息资料能够导出PDF.且项目申报的报告正文为用户上传,所以需要合并导出. 2.问题 在项目初期阶段使用的是PDF的预设模板导出, ...
- echarts 图表导出PDF(带滚动条)/图片导出PDF
echarts 图表导出PDF[带滚动条]/图片导出PDF 效果展示 提出问题 思考问题 解决问题 导出PDF 里面的页头中文乱码问题 参数说明 效果展示 提出问题 在开发过程中,有需求是将展示出来的 ...
- 【Apache POI】Java Web根据模板导出word文件
最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...
- java poi导出excel模板_POI通过模板导出EXCEL文件的实例
一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...
- Springboot--使用POI,根据word模板导出word文件
需求:根据一个word模板,在程序中替换模板中的参数,然后根据这个模板导出word文件. 引入POI对word操作的依赖: <dependency><groupId>org.a ...
- java根据模板导出PDF详细教程(无bug版)
题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word成功了:但是导出pdf相对麻烦了一点.两天的研究测试java导出PDF,终于成功了,期间走了不少弯路,今分享出来,欢迎大家有 ...
- java根据模板导出pdf,java开发面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
最新文章
- Tungsten Fabric SDN — 与 OpenStack 的集成部署
- 汇编语言 在存储单元中显示字符串
- 《javascript高级程序设计》笔记:原型图解
- fast_recovery_area无剩余空间(ORA-19815)
- Zeroc Ice 发布订阅者之demo Icestorm之clock
- 洛谷 P3750 [六省联考2017]分手是祝愿
- 手机连接投影机的步骤_投影机安装过程详解
- deepinu盘制作工具_U盘引导盘制作工具Rufus 3.11.1678 正式版
- 【MySQL】浅谈一致性读
- 启用多CPU多线程,加快加速OpenJDK的编译办法
- HP LaserJet P1008打印机安装
- 信号与系统_严国志_第一章_绪论
- 电脑打开内存占用过高问题(开机85%【16G运存】)
- 串口助手使用16进制发送数据
- 请设计输出实数的格式,包括:(1)一行输出一个实数;(2)一行输出两个实数;(3)一行输出三个实数。实数用%6.2f格式输出。
- 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
- 【OPENCV】运行opencv时找不到Qt库
- 2020年年度关于前端学习与工作的心得体会
- IEEE TGRS2019|【论文笔记】R2-CNN: Fast Tiny Object Detection in Large-Scale Remote Sensing Images
- Swift游戏实战-跑酷熊猫 07 平台的移动