You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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转义(比如"换成&quot;,<换成&lt;)。

示例代码

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里的特殊字符,比如把所有双引号转成&quot;,确保解析器不会把JSON当成HTML结构。

为啥你之前用htmltopdf converter会报错?

大概率是JSON里的{}、"这些字符被解析器误判成了HTML的语法元素,导致解析失败。你可以先检查你的HTML是否合法,或者把JSON单独提取出来处理后再放回HTML里。

内容的提问来源于stack exchange,提问作者Sumit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:17:48