当前位置: 首页 > news >正文

Java+iTextPDF,实时生成与预览PDF文件的最佳实践!

Java+iTextPDF,实时生成与预览PDF文件的最佳实践!

背景

其实公司之前的项目里是用到了帆软报表的,然而最近接了一个新项目,这个项目独立部署在甲方的独立环境中,组长的意思是不用再单独部署一套帆软报表,成本太大,用其他方式实现一下。虽然我不太理解成本大在哪儿,不过身为助理工程师,别管那么多,照着干就完事了。

之前有其他哥们写过类似功能,通过解析数据动态生成pdf文件。但他用的那个技术jasper有点老了,资料不太好找,问过神奇的chatgpt后,了解到iTextPdf这个库,应该是比较好的选择。

解决方案

我们先观察下真实的开票预览的模板。

图片

发票信息由两部分组成:

  • 固定信息,例如购买方信息、销售方信息。
  • 商品信息,可能有多行,需动态填充

很明显的一个主子结构。

了解了一下iTextPdf的相关api。要实现这个功能,其实我们需要分别生成两部分的发票信息,也就是两个pdf,然后将两个pdf拼接成同一个。

  • 对于第一部分的固定信息,我们可以用Acrobat之类的pdf设计工具设计出一个模板,然后在java程序中读取并填充对应的模板值。
  • 对于第二部分的商品信息,就需要获取商品数据,动态生成表格,当然iTextPdf是支持这一功能的。

分别得到两部分的pdf之后,再将其合并为同一个pdf就可以了。

具体实现

1.引入iTextPdf库

在pom文件中添加iTextPdf的对应依赖。其中 itext-asian 这个也是需要的,不然生成的pdf中无法显示中文

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.2</version>
</dependency>

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>
2.编辑对应模板

下载Adobe Acrobat工具,这部分就不细说了 点击文件-创建-表单。如果你有现成的pdf文件,也可以在这步选择单一文件开始,没有的话就从头新建

图片

通过放置文字和文字域来设计好表单模板。注意,文字域“属性”里的名称就是最后使用iTextPdf填充时需要填充的对应字段。

图片

图片

3.编写java PDF生成程序

使用框架还是老一套的SpringBoo

相关文章:

  • 智慧农业中光谱相机对土壤成分的无损检测应用‌
  • python学习第三天
  • qt作业day2
  • 五分钟快速学习优秀网站的HTML骨架布局设计
  • 跨部门沟通与团队协作
  • 京东外卖上架菜品流程教学
  • LeetCode 解题思路 8(Hot 100)
  • Java Maven 项目问题:org.dom4j:dom4j:pom:2.1.3 failed to transfer from...
  • 分布式锁—2.Redisson的可重入锁一
  • 机器学习(五)
  • 线程相关八股
  • 【论文分析】语义驱动+迁移强化学习:无人机自主视觉导航的高效解决方案(语义驱动的无人机自主视觉导航)
  • 基于开源库编写MQTT通讯
  • Unity 内置渲染管线各个Shader的用途和性能分析,以及如何修改Shader(build in shader 源码下载)
  • Spring(二)容器
  • 2025年能源工作指导意见
  • 6.C#对接微信Native支付(退款申请、退款回调通知)
  • 分布式中间件:Redis介绍
  • Linux驱动开发之串口驱动移植
  • Android Studio 新版本Gradle发布本地Maven仓库示例
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿
  • 倒票“黄牛”屡禁不绝怎么破?业内:强化文旅市场票务公开制度
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 首映|《星际宝贝史迪奇》真人电影,不变的“欧哈纳”
  • 专访|《内沙》导演杨弋枢:挽留终将失去的美好
  • 特朗普公开“怼”库克:苹果不应在印度生产手机