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文件相关推荐

  1. POI根据模板导出word文件,以及word转PDF,PDF转图片再插入PDF中(防止PDF被修改)

    POI操作word和PDF POI根据模板导出word文件 word转PDF PDF转图片再插入PDF中(防止PDF被修改) POI根据模板导出word文件 一.制作word模版,${xxxx}是一会 ...

  2. Java 根据模板导出PDF

    文章目录 前言 思路一:直接导出pdf 使用itext模板导出pdf 思路二:先导出word再转成pdf 1)导出word 2)word转pdf 最终方案 ~~docx4j~~ spire.doc.f ...

  3. java按照模板导出pdf或者word

    一.java按照模板导出pdf (一)制作模板 1.在word里制作模板 因为PDF常用的软件不支持编辑,所以先用Word工具,如WPS或者Office新建一个空白Word文档,里面制作出自己想要的样 ...

  4. java使用poi-tl导出word及转换PDF后的合并导出pdf

    1.背景 为某单位开发的一款项目申报审批系统,用户需求在申报阶段填写的信息资料能够导出PDF.且项目申报的报告正文为用户上传,所以需要合并导出. 2.问题 在项目初期阶段使用的是PDF的预设模板导出, ...

  5. echarts 图表导出PDF(带滚动条)/图片导出PDF

    echarts 图表导出PDF[带滚动条]/图片导出PDF 效果展示 提出问题 思考问题 解决问题 导出PDF 里面的页头中文乱码问题 参数说明 效果展示 提出问题 在开发过程中,有需求是将展示出来的 ...

  6. 【Apache POI】Java Web根据模板导出word文件

    最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...

  7. java poi导出excel模板_POI通过模板导出EXCEL文件的实例

    一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中 ...

  8. Springboot--使用POI,根据word模板导出word文件

    需求:根据一个word模板,在程序中替换模板中的参数,然后根据这个模板导出word文件. 引入POI对word操作的依赖: <dependency><groupId>org.a ...

  9. java根据模板导出PDF详细教程(无bug版)

    题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word成功了:但是导出pdf相对麻烦了一点.两天的研究测试java导出PDF,终于成功了,期间走了不少弯路,今分享出来,欢迎大家有 ...

  10. java根据模板导出pdf,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

最新文章

  1. Tungsten Fabric SDN — 与 OpenStack 的集成部署
  2. 汇编语言 在存储单元中显示字符串
  3. 《javascript高级程序设计》笔记:原型图解
  4. fast_recovery_area无剩余空间(ORA-19815)
  5. Zeroc Ice 发布订阅者之demo Icestorm之clock
  6. 洛谷 P3750 [六省联考2017]分手是祝愿
  7. 手机连接投影机的步骤_投影机安装过程详解
  8. deepinu盘制作工具_U盘引导盘制作工具Rufus 3.11.1678 正式版
  9. 【MySQL】浅谈一致性读
  10. 启用多CPU多线程,加快加速OpenJDK的编译办法
  11. HP LaserJet P1008打印机安装
  12. 信号与系统_严国志_第一章_绪论
  13. 电脑打开内存占用过高问题(开机85%【16G运存】)
  14. 串口助手使用16进制发送数据
  15. 请设计输出实数的格式,包括:(1)一行输出一个实数;(2)一行输出两个实数;(3)一行输出三个实数。实数用%6.2f格式输出。
  16. 毕业设计 - 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]
  17. 【OPENCV】运行opencv时找不到Qt库
  18. 2020年年度关于前端学习与工作的心得体会
  19. IEEE TGRS2019|【论文笔记】R2-CNN: Fast Tiny Object Detection in Large-Scale Remote Sensing Images
  20. Swift游戏实战-跑酷熊猫 07 平台的移动

热门文章

  1. php比较asc,php小技巧之过滤ascii控制字符
  2. 火狐浏览器设置无图模式
  3. 服务器上网页怎么压缩文件,如何在服务器端实现文件自动压缩和解压
  4. 被称为史上最高效学习方法——费曼学习法
  5. Linux应用程序目录规范——XDG
  6. 流媒体:浅谈传统媒体—流媒体—加P2P的流媒体的演变之路
  7. 面试经验--Lowe Profero
  8. 3.cesium雨、雪、雾天气场景效果
  9. 证件照修改宽高和体积的工具
  10. 干货 | 收藏贴!一文看懂静态资源服务沉浮及其在携程的演进