嘗試一 (現用框架的基礎上改動,影響最小化)
最早使用的框架 Xhtmlrenderer,需要把HTML轉換成XHTML,引入第二個框架Tidy,Tidy與2010年停止更新,github上的項目也停留在2011年,它對SVG等HTML5標簽不在支持
找到源碼,做了修改,讓Tidy支持了SVG標簽,又遇到了兩一個問題,Xhtmlrenderer 不識別SVG標簽,終止。
嘗試二 (SVG轉PDF上入手)
從SVG轉PDF入手
apache的batik框架支持滿足需求,但是它並沒有提供HTML轉PDF,終止。
嘗試三 (Highchar-export-server)
前端的char框架為highchar,支持導出PDF、png、svg等格式。查源碼找到服務端項目Highchar-export-server,雖然是java支持,但底層調用的是phantomjs,僅支持SVG轉PDF,同上,終止。
嘗試四 (openhtmltopdf)
An HTML to PDF library for the JVM. Based on Flying Saucer and Apache PDF-BOX 2. With SVG image support.
看說明好像滿足了我們的需求
Open HTML to PDF is based on Flying-saucer. Credit goes to the contributors of that project. Code will also be used from neoFlyingSaucer
測試例子
Test cases, failing or working are welcome, please place them in /openhtmltopdf-examples/src/main/resources/testcases/
and run them from /openhtmltopdf-examples/src/main/java/com/openhtmltopdf/testcases/TestcaseRunner.java
.
可能會涉及到引入字體
builder.useFont(fontFile, fontFamily);
該框架對HTML標簽嚴謹度有點高(大小寫、閉合標簽等),兼容的話 改源碼可以搞定。
測試中對於某些特殊的SVG圖,轉換並不是很好。
https://github.com/danfickle/openhtmltopdf
別的不多說了,自己看吧,基本滿足了需求。