PDF生成的另一种方式

​最近在工作中遇到了java生成PDF的需求,当时脑子灵光一闪itext啊。然后从github搜索了一下开源项目开始实现。我是用itext+freemarker结合实现的,但是到了测试阶段发现这种方式对一些样式不支持,无奈转用另一种方式:wkhtmltopdf。

wkhtmltopdf简介:工具全名叫 "wkhtmltopdf" ; 是一个使用 Qt WebKit 引擎做渲染的,能够把html 文档转换成 pdf 文档 或 图片(image) 的命令行工具。(强调一下:是 “命令行工具” )支持多个平台,可在win,linux,os x 等系统下运行。

使用wk实现生成pdf大体思路:构建一个html模板(建议使用spring thymeleaf);构建调用wk生成命令(具体命令大家可以从官网看下),命令中有两个重要参数:1).请求html模板地址,2).生成的pdf文件存储位置;3.通过java调用wkhtmltopdf命令生成;

这里我为了大家好理解单独写了一个项目讲解:https://gitee.com/rain_zhx/pdf-contract-demo.git,现在通过项目开始讲解整个生成过程。

项目使用技术栈:spring cloud + spring boot + thymeleaf + 阿里oss +redis。

项目结构:整个项目使用maven聚合。pdf-server是eureka-server可以理解为注册中心;pdf-client是调用端可以理解为eureka的客户端;pdf-manager是提供者提供pdf生成的接口;

项目配置修改以及启动顺序:修改pdf-manage的config下dev配置文件,包括redis和properties中oss配置(项目是使用了生产栈测试栈分离配置文件方式);修改完成后首先启动pdf-server;启动pdf-client;启动pdf-manage;注意全程只修改pdf-manage项目中的配置文件即可,其他两个服务不需要动哦。

项目思路分析:pdf-manage作为pdf生成服务中心设计,公司所有和pdf相关的业务都可以写在此服务中。pdf-client和pdf-server只是我为了大家测试方便所以继承到项目中。我把生成pdf公共的操作抽象出来,需要通过业务自定义的业务抽象到AbstractPDFDataProcessor抽象类中,然后使用了模板设计模式,不同的业务有不同的实现类但是都继承上述抽象类。嗯,说再多也没有用这种设计之美还是需要大家通过代码去体会哦,多阅读代码。

大家在阅读代码有哪里不解的或者启动项目有问题的欢迎加群978219630

你可能感兴趣的:(PDF生成的另一种方式)