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

Flutter/Dart中XSL转换工具选型:替代已弃用的dart:html XsltProcessor

在Flutter/Dart中替代dart:html的XsltProcessor实现XSL转换方案

由于dart:html的XsltProcessor仅适用于浏览器环境且已被弃用,在Flutter/Dart跨平台项目中,可通过以下库组合实现XML→XSL转换为HTML/PDF的需求:

一、实现XSLT转换生成HTML

使用纯Dart实现的xslt库,支持XSLT 1.0标准,跨平台兼容iOS、Android及桌面端。

使用步骤:

  1. 在pubspec.yaml中添加依赖:
    dependencies:
      xslt: ^0.2.0
    
  2. 读取XML与XSL文件内容并执行转换:
    import 'package:xslt/xslt.dart';
    import 'dart:io';
    
    Future<void> transformXmlToHtml() async {
      // 读取输入文件
      final xmlContent = await File('assets/input.xml').readAsString();
      final xslContent = await File('assets/stylesheet.xsl').readAsString();
      
      // 执行XSLT转换
      final htmlResult = await Xslt.transform(xmlContent, xslContent);
      
      // 保存转换后的HTML
      await File('output.html').writeAsString(htmlResult);
    }
    

二、将转换后的HTML生成PDF

可通过以下两种常用方案实现HTML到PDF的转换:

方案1:使用pdf + html库手动解析构建

适合需要自定义PDF布局的场景:

  1. 添加依赖:
    dependencies:
      pdf: ^3.10.0
      html: ^0.15.4
    
  2. 示例代码:
    import 'package:pdf/pdf.dart';
    import 'package:pdf/widgets.dart' as pw;
    import 'package:html/parser.dart' show parse;
    import 'dart:io';
    
    Future<void> generatePdfFromHtml(String htmlContent) async {
      final pdfDoc = pw.Document();
      final htmlDoc = parse(htmlContent);
    
      pdfDoc.addPage(
        pw.Page(
          build: (pw.Context context) {
            return pw.Container(
              padding: pw.EdgeInsets.all(16),
              child: pw.Text(
                htmlDoc.body?.text ?? '',
                style: pw.TextStyle(fontSize: 14),
              ),
            );
          },
        ),
      );
    
      // 保存PDF文件
      await File('output.pdf').writeAsBytes(await pdfDoc.save());
    }
    

方案2:使用flutter_html_to_pdf库快速转换

封装了HTML转PDF的逻辑,适合快速实现需求:

  1. 添加依赖:
    dependencies:
      flutter_html_to_pdf: ^0.1.1
    
  2. 示例代码:
    import 'package:flutter_html_to_pdf/flutter_html_to_pdf.dart';
    import 'dart:io';
    
    Future<void> convertHtmlToPdf(String htmlContent) async {
      final pdfFilePath = await FlutterHtmlToPdf.convertFromHtmlContent(
        htmlContent,
        Directory.systemTemp.path,
        'output_file',
      );
      // pdfFilePath为生成的PDF文件路径
    }
    

注意事项

  • xslt库目前仅支持XSLT 1.0标准,若你的样式表基于2.0/3.0,可考虑调用原生平台的XSLT工具(如Android的javax.xml.transform、iOS的XSLTProcessor)实现跨平台兼容。
  • HTML转PDF时,复杂CSS样式的支持有限,建议简化样式或针对PDF生成调整样式表,确保输出效果符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:01:47