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

如何使用XSL FO与XML文档生成PDF?附现有XSLT实现代码

用XSL FO + XML生成PDF的可行方案及技术建议

当然可以用XSL FO结合XML生成PDF,但要注意:浏览器原生的XSLTProcessor(也就是你现有代码里用的工具)只能把XML转成DOM片段(HTML/XML),没法直接把XSL FO渲染成PDF——因为XSL FO是专门的排版格式,需要专用的FO处理器来转成PDF。

一、优先推荐:后端处理(兼容性好、性能稳定)

后端有成熟的XSL FO处理工具,分两种场景操作:

  • 如果你的「XSL FO」是指能将XML转换为XSL FO文档的XSLT样式表:
    1. 把XML和XSLT样式表传到后端,先用XSLT处理器(比如Java的Saxon、Node.js的xslt3)将XML转换为标准的XSL FO文档。
    2. 再用FO处理器(比如Apache FOP、RenderX XEP)把XSL FO文档渲染成PDF。
  • 如果已经有现成的XSL FO文档:直接用FO处理器转成PDF即可。

二、前端处理(限制较多,仅适合轻量场景)

前端没有原生支持FO转PDF的API,只能依赖第三方WebAssembly库(比如fop-wasm,是Apache FOP的WebAssembly移植版),步骤如下:

  1. 用你现有代码的思路,先把XML通过XSLT转换成XSL FO文档(如果还没生成FO的话),代码示例:
var AppModule = function AppModule() {}; 
AppModule.prototype.transformXMLToFO = function (XML, XSLTForFO) {
    let xmlStr = b64DecodeUnicode(XML?.replaceAll("\r\n", ""));    
    let xsltStylesheet = b64DecodeUnicode(XSLTForFO?.replaceAll("\r\n", ""));

    const parser = new DOMParser();
    let xmlDoc = parser.parseFromString(xmlStr, "text/xml");
    let xsltDoc = parser.parseFromString(xsltStylesheet, "application/xml");

    let xsltProcessor = new XSLTProcessor();
    xsltProcessor.importStylesheet(xsltDoc);
    // 生成XSL FO片段(XML格式)
    let foFragment = xsltProcessor.transformToFragment(xmlDoc, document); 
    let foStr = new XMLSerializer().serializeToString(foFragment);
    return foStr; 
};
  1. 把生成的FO字符串传入fop-wasm这类库,在前端直接生成PDF。

关键注意事项

  • 浏览器的XSLTProcessor仅支持XSLT 1.0,如果你的XSL FO样式表是XSLT 2.0/3.0版本,前端无法处理,必须用后端的XSLT处理器(比如Saxon)。
  • 前端FO转PDF的库体积通常较大(比如fop-wasm包大小超10MB),会影响页面加载速度,所以非必要不建议用前端方案。

内容的提问来源于stack exchange,提问作者Lakshmi Reddy Kishtipati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:43:28