Java实现含JSON片段的HTML转PDF解决方案咨询
兄弟,我之前也踩过这个坑——HTML里嵌的JSON片段特别容易搞砸PDF转换,尤其是那些带未转义引号或者大括号的结构,很多解析器会把它们误当成HTML标签来处理。下面给你几个亲测有效的Java解决方案,应该能解决你的问题:
方案1:用iText 7的pdfHTML模块(推荐)
iText是Java生态里最靠谱的PDF处理库之一,它的pdfHTML模块专门优化了HTML到PDF的转换,对特殊内容的兼容性拉满。
核心思路
把HTML里的JSON片段用<pre>或<code>标签包裹,让解析器识别为纯文本;如果JSON里有尖括号、引号这类特殊字符,提前做HTML转义(比如"换成",<换成<)。
示例代码
import com.itextpdf.html2pdf.HtmlConverter; import java.io.FileInputStream; import java.io.FileOutputStream; public class HtmlToPdfConverter { public static void main(String[] args) throws Exception { // 读取包含JSON的HTML文件 try (FileInputStream htmlInput = new FileInputStream("source.html"); FileOutputStream pdfOutput = new FileOutputStream("result.pdf")) { // 直接转换,pdfHTML会自动处理大部分特殊内容 HtmlConverter.convertToPdf(htmlInput, pdfOutput); } } }
方案2:使用Flying Saucer(XHTMLRenderer)
Flying Saucer对XHTML的支持非常严谨,只要你的HTML是合法的XHTML格式,它能很好地处理内嵌的JSON内容。
核心思路
确保HTML是标准XHTML(标签闭合、属性带引号),并把JSON放在<pre>标签里,避免解析器误解析。
示例代码
import org.xhtmlrenderer.pdf.ITextRenderer; import java.io.FileOutputStream; import java.io.StringReader; public class FlyingSaucerDemo { public static void main(String[] args) throws Exception { // 假设这是你的HTML内容,JSON被包裹在<pre>里 String htmlContent = """ <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h1>页面标题</h1> <pre>{ "user": "Sumit Kumar", "data": [1, 2, 3] }</pre> </body> </html> """; ITextRenderer renderer = new ITextRenderer(); renderer.setDocumentFromString(htmlContent); renderer.layout(); try (FileOutputStream fos = new FileOutputStream("output.pdf")) { renderer.createPDF(fos); } } }
方案3:预处理HTML中的JSON片段
如果上面的库还是报错,那先对HTML做预处理,把JSON片段用CDATA包裹,让解析器跳过这段内容的解析:
//<![CDATA[ { "key": "value", "nested": {"inner": "data"} } //]]>
或者用正则表达式批量替换JSON里的特殊字符,比如把所有双引号转成",确保解析器不会把JSON当成HTML结构。
为啥你之前用htmltopdf converter会报错?
大概率是JSON里的{}、"这些字符被解析器误判成了HTML的语法元素,导致解析失败。你可以先检查你的HTML是否合法,或者把JSON单独提取出来处理后再放回HTML里。
内容的提问来源于stack exchange,提问作者Sumit Kumar
相关产品推荐
相关产品推荐

