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

在Node.js中使用XSLT将XML文件转换为PDF

在Node.js中用XSLT将XML转换为PDF的实现方案

Node.js中实现XML→XSLT→PDF主要有两种可行路径,以下是具体实现方式:

方法一:先转HTML再生成PDF

这种方式兼容性强,利用成熟的HTML转PDF工具,适合大多数场景。

步骤说明

  1. 使用XSLT工具将XML转换为HTML;
  2. 用HTML转PDF库将生成的HTML导出为PDF。

代码示例

依赖安装:

npm install xslt4node puppeteer

实现代码:

const xslt4node = require('xslt4node');
const fs = require('fs');
const puppeteer = require('puppeteer');

// 读取XML和XSLT模板文件
const xmlContent = fs.readFileSync('./report.xml', 'utf8');
const xsltTemplate = fs.readFileSync('./html-transform.xsl', 'utf8');

// 执行XSLT转换生成HTML
const xsltOptions = {
    xslt: xsltTemplate,
    source: xmlContent,
    result: './temp-output.html'
};

xslt4node.transform(xsltOptions, async (err) => {
    if (err) throw new Error(`XSLT转换失败:${err.message}`);
    
    // 用Puppeteer将HTML转为PDF
    const browser = await puppeteer.launch({ headless: 'new' });
    const page = await browser.newPage();
    await page.goto(`file://${__dirname}/temp-output.html`, { waitUntil: 'networkidle0' });
    await page.pdf({ 
        path: './final-report.pdf', 
        format: 'A4',
        printBackground: true // 保留背景样式
    });
    
    await browser.close();
    console.log('PDF生成完成');
});

补充说明

  • Puppeteer基于Chrome内核,渲染HTML的效果最接近浏览器,适合复杂样式的场景;
  • 若需轻量方案,可替换为html-pdf库,但该库基于PhantomJS,维护性较弱。

方法二:使用XSL-FO直接生成PDF

XSL-FO是专门用于PDF排版的XSL分支,适合需要复杂PDF格式(如页眉页脚、分页规则、表格跨页)的场景。

步骤说明

  1. 编写XSL-FO模板,将XML转换为FO格式;
  2. 使用Apache FOP的Node.js封装工具将FO文件转为PDF。

代码示例

依赖安装:

npm install fop-node

实现代码:

const fop = require('fop-node');
const fs = require('fs');

// 读取XML和XSL-FO模板
const xmlContent = fs.readFileSync('./report.xml', 'utf8');
const foTemplate = fs.readFileSync('./fo-transform.xsl', 'utf8');

// 配置FOP转换参数
const fopConfig = {
    xml: xmlContent,
    xsl: foTemplate,
    pdf: './final-report.pdf',
    fopPath: '/usr/local/bin/fop' // 替换为你的Apache FOP路径,全局安装可省略
};

fop.convert(fopConfig, (err) => {
    if (err) throw new Error(`PDF生成失败:${err.message}`);
    console.log('PDF生成完成');
});

补充说明

  • 需要提前安装Apache FOP(依赖Java环境);
  • XSL-FO的学习成本高于HTML,但对PDF的排版控制更精细。

内容的提问来源于stack exchange,提问作者wissem maalel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:01:04