?最近在工作中遇到了java生成PDF的需求,當(dāng)時腦子靈光一閃itext啊菌赖。然后從github搜索了一下開源項(xiàng)目開始實(shí)現(xiàn)聂示。我是用itext+freemarker結(jié)合實(shí)現(xiàn)的它掂,但是到了測試階段發(fā)現(xiàn)這種方式對一些樣式不支持,無奈轉(zhuǎn)用另一種方式:wkhtmltopdf帆啃。
wkhtmltopdf簡介:工具全名叫 "wkhtmltopdf" ; 是一個使用 Qt WebKit 引擎做渲染的瞬女,能夠把html 文檔轉(zhuǎn)換成 pdf?文檔 或 圖片(image) 的命令行工具。(強(qiáng)調(diào)一下:是?“命令行工具”?)支持多個平臺努潘,可在win诽偷,linux坤学,os x 等系統(tǒng)下運(yùn)行。
使用wk實(shí)現(xiàn)生成pdf大體思路:構(gòu)建一個html模板(建議使用spring thymeleaf)报慕;構(gòu)建調(diào)用wk生成命令(具體命令大家可以從官網(wǎng)看下)深浮,命令中有兩個重要參數(shù):1).請求html模板地址,2).生成的pdf文件存儲位置眠冈;3.通過java調(diào)用wkhtmltopdf命令生成飞苇;
這里我為了大家好理解單獨(dú)寫了一個項(xiàng)目講解:https://gitee.com/rain_zhx/pdf-contract-demo.git,現(xiàn)在通過項(xiàng)目開始講解整個生成過程蜗顽。
項(xiàng)目使用技術(shù)棧:spring cloud + spring boot + thymeleaf +?阿里oss +redis布卡。
項(xiàng)目結(jié)構(gòu):整個項(xiàng)目使用maven聚合。pdf-server是eureka-server可以理解為注冊中心;pdf-client是調(diào)用端可以理解為eureka的客戶端诫舅;pdf-manager是提供者提供pdf生成的接口羽利;
項(xiàng)目配置修改以及啟動順序:修改pdf-manage的config下dev配置文件,包括redis和properties中oss配置(項(xiàng)目是使用了生產(chǎn)棧測試棧分離配置文件方式)刊懈;修改完成后首先啟動pdf-server这弧;啟動pdf-client;啟動pdf-manage虚汛;注意全程只修改pdf-manage項(xiàng)目中的配置文件即可匾浪,其他兩個服務(wù)不需要動哦。
項(xiàng)目思路分析:pdf-manage作為pdf生成服務(wù)中心設(shè)計卷哩,公司所有和pdf相關(guān)的業(yè)務(wù)都可以寫在此服務(wù)中蛋辈。pdf-client和pdf-server只是我為了大家測試方便所以繼承到項(xiàng)目中。我把生成pdf公共的操作抽象出來将谊,需要通過業(yè)務(wù)自定義的業(yè)務(wù)抽象到AbstractPDFDataProcessor抽象類中冷溶,然后使用了模板設(shè)計模式,不同的業(yè)務(wù)有不同的實(shí)現(xiàn)類但是都繼承上述抽象類尊浓。嗯逞频,說再多也沒有用這種設(shè)計之美還是需要大家通過代碼去體會哦,多閱讀代碼栋齿。
大家在閱讀代碼有哪里不解的或者啟動項(xiàng)目有問題的歡迎加群978219630