美文网首页JAVA收藏
业务场景实战(五)PDF生成

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

作者: 后来丶_a24d | 来源:发表于2022-02-10 10:16 被阅读0次

    思维导图

    思维导图.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生成

        本文链接:https://www.haomeiwen.com/subject/ecrnkrtx.html