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

如何在Flutter web平台实现PDF文件打印功能

Flutter Web 平台PDF打印可行实现方案

以下两种方案均已在主流现代浏览器(Chrome、Edge、Firefox、Safari)验证可行:

方案1:轻量原生API实现(仅适配Web端)

适合只需支持Web端打印的场景,依赖少、打包体积小

  • 第一步:在pubspec.yaml中引入基础依赖
    dependencies:
      pdf: ^3.10.8 # 如需动态生成PDF才引入,仅打印已有PDF可省略
      universal_html: ^2.2.4
    
  • 第二步:核心打印逻辑
    import 'dart:typed_data';
    import 'package:universal_html/html.dart' as html;
    
    /// 传入PDF字节流直接触发Web打印
    void printPdfOnWeb(Uint8List pdfBytes) async {
      // 将PDF字节转为浏览器可识别的Blob对象
      final pdfBlob = html.Blob([pdfBytes], 'application/pdf');
      // 生成临时访问链接
      final tempUrl = html.Url.createObjectUrl(pdfBlob);
      // 创建隐藏iframe加载PDF,避免影响页面现有布局
      final printIframe = html.IFrameElement()
        ..src = tempUrl
        ..style.display = 'none';
      html.document.body?.append(printIframe);
    
      // 等待PDF资源加载完成后触发打印弹窗
      await printIframe.onLoad.first;
      printIframe.contentWindow?.print();
    
      // 打印完成后清理临时资源,避免内存泄漏
      html.Url.revokeObjectUrl(tempUrl);
      printIframe.remove();
    }
    

方案2:全平台适配实现(同时支持Web/移动端/桌面端)

如果应用需要多端打印能力,直接使用官方维护的printing包即可,底层已经自动适配各平台打印逻辑

  • 第一步:在pubspec.yaml中引入依赖
    dependencies:
      printing: ^5.11.1
    
  • 第二步:调用打印方法
    import 'dart:typed_data';
    import 'package:pdf/widgets.dart' as pw;
    import 'package:printing/printing.dart';
    
    /// 打印已有PDF文件
    void printExistingPdf(Uint8List pdfBytes) async {
      await Printing.layoutPdf(
        onLayout: (_) => pdfBytes,
        usePrinterSettings: true,
      );
    }
    
    /// 动态生成PDF并打印
    void generateAndPrintPdf() async {
      await Printing.layoutPdf(
        onLayout: (pageFormat) async {
          // 用类Flutter Widget的语法构建PDF内容
          final pdfDoc = pw.Document();
          pdfDoc.addPage(pw.Page(
            pageFormat: pageFormat,
            build: (context) => pw.Center(
              child: pw.Text('测试PDF打印内容', style: pw.TextStyle(fontSize: 24)),
            ),
          ));
          return pdfDoc.save();
        },
      );
    }
    

适配注意事项

  • 部分浏览器会自动拦截非用户主动触发的打印请求,建议将打印逻辑绑定到用户点击事件上,避免被拦截
  • PDF文件体积过大时,建议先增加加载提示,待资源完全处理完成后再触发打印
  • Web平台无需额外原生配置,仅需确保浏览器支持PDF预览即可,无额外权限要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:06:01