在XSLT中通过FOP处理HTML Body是否为合法方案?
问题解答
直接说结论:用FOP处理输出HTML的XSLT来生成PDF或者打印HTML,根本不是正确的用法,理由如下:
- FOP是专门用来处理XSL-FO(XSL格式化对象)格式内容的工具,它的核心功能是把XSL-FO转换成PDF或打印文档,完全不具备解析、渲染HTML的能力。
- 你提供的XSLT设置了
<xsl:output method="html"/>,输出的是纯HTML结构内容,并非FOP能识别的XSL-FO格式。用fop -xml sample.xml -xsl sample.xslt -pdf sample.pdf这类命令执行时,要么直接报错,要么生成的PDF完全不符合预期。
如果要通过FOP生成PDF,正确的做法是:
- 修改XSLT,将输出方式调整为XSL-FO——把
<xsl:output method="html"/>替换为<xsl:output method="xml"/>,同时在模板中编写XSL-FO专属标签,比如<fo:root>、<fo:page-sequence>、<fo:block>等。 - 若你需要先生成HTML再转PDF,建议换用支持HTML转PDF的工具(比如wkhtmltopdf),而非FOP。
另外,你提到的fop -xml sample.xml -xsl sample.xslt -print sample.html命令也不合理,FOP的-print参数仅用于打印它生成的FO文档,无法直接处理HTML输出。
内容的提问来源于stack exchange,提问作者Rito Sarkar
相关产品推荐
相关产品推荐

