Java HTML to PDF 支持SVG

尝试一 (现用框架的基础上改动,影响最小化)

最早使用的框架 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

别的不多说了,自己看吧,基本满足了需求。