业务场景实战(五)PDF生成

思维导图

思维导图.png

系列总目录

  • 业务场景实战汇总

背景

  • 随着公司的快速发展,业务需要沉淀出根据模板生成PDF的通用能力
  • 根据Word/PDF模板,填充对应信息,生成PDF

技术选型

  • PDF相关的各个框架
  1. text: 基于AGPL协议,商业版需要开源项目代码或者收费
  2. spire.doc: 商业版收费,免费版有水印
  3. PDFbox: 提供pdf操作,创建PDF,合并PDF功能,但是对中文支持不是很好
  4. OpenPDF: demo较少,功能较少
  5. poi: Apache下的完全开源,GitHub start 1.1k,社区活跃性高,提供根据Word模板填充Word数据, word的转pdf对表格图像处理不好
  6. docx4j: GitHub start 1.6k提供Word转PDF, 完全开源
  • PDF服务采用poi替换Word模板生成Word, 再使用docx4j 将Word生成PDF

高可用高性能保证

高可用

  1. 部署, 单点故障
  2. PDF采用异步处理,mq通知的形式,如果处理过程中断网导致没有发mq消息,### 高性能
  3. 异步处理
  4. 采用内部BlockingQueue形式,多线程拉取需要处理的任务
  5. 集群无状态可扩展提升处理能力

服务设计

  • 总览


    总览.png
  • 假设业务方是通过grpc调用,那业务方调用PDF服务的流程图


    业务方调用PDF服务.png
  • PDF服务异步处理


    PDF服务异步处理.png
  • 捡漏线程: 为保证可用性,在断网等异常情况下依然能发mq消息


    捡漏线程.png
  • 业务方监听MQ


    业务方监听MQ.png
  • PDF任务详细处理流程


    PDF任务详细处理流程.png
  • 存储过程清理数据: 理任务表中已完成的任务
  • 高度定制化: 后续考虑使用数据库映射能力代替代码中不同模板映射,以达到后续新增模板不需要改代码

jvm启动参数

  1. dev环境最多只给1G多一点的内存,dev环境启动参数默认设置的很简单,完全使用默认年轻代比较大,会造成年轻代来不及回收,内存就oom了,建议设置jvm参数:
 -Xms800m -Xmx800m -Xmn120M -XX:MaxPermSize=256m -XX:InitialTenuringThreshold=15 -XX:CMSInitiatingOccupancyFraction=50 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGC

参考文章

你可能感兴趣的:(业务场景实战(五)PDF生成)