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

Flutter中如何一次性打印多份HTML字符串内容?

实现多份HTML内容打印的解决方案

你可以通过以下两种方式实现一次性打印多份HTML内容,无需保存文件:

方式一:重复生成PDF页面

在onLayout回调中,先将HTML转换为单页PDF字节流,再将这份内容重复添加到新PDF文档中,生成包含多份内容的完整文档:

await Printing.layoutPdf(
  onLayout: (PdfPageFormat format) async {
    // 转换单份HTML为PDF字节流
    final singlePagePdf = await Printing.convertHtml(
      format: format,
      html: '<html><body><p>Hello!</p></body></html>',
    );
    // 设置打印份数
    final copyCount = 3;
    // 创建新的PDF文档实例
    final pdf = pw.Document();
    // 读取单页PDF的页面数据
    final pages = await pw.PdfMerger().importPages(singlePagePdf);
    // 循环添加多份页面
    for (var i = 0; i < copyCount; i++) {
      pdf.addPage(pw.MultiPage(
        pages: pages,
        // 可选:添加页码或份数标识
        footer: (context) => pw.Align(
          alignment: pw.Alignment.center,
          child: pw.Text('第${i+1}份'),
        ),
      ));
    }
    // 生成最终PDF字节流并返回
    return await pdf.save();
  },
);

方式二:修改HTML内容重复渲染

直接在HTML字符串中重复内容,并添加分页符,让Printing包一次性渲染出多页内容:

await Printing.layoutPdf(
  onLayout: (PdfPageFormat format) async {
    final copyCount = 3;
    String repeatedHtml = '';
    // 循环拼接HTML内容,每份后加分页符
    for (var i = 0; i < copyCount; i++) {
      repeatedHtml += '<html><body><p>Hello!</p></body></html>';
      if (i != copyCount - 1) {
        repeatedHtml += '<div style="page-break-after: always;"></div>';
      }
    }
    // 转换拼接后的HTML为PDF
    return await Printing.convertHtml(
      format: format,
      html: repeatedHtml,
    );
  },
);

两种方式的适用场景

  • 方式一更适合复杂HTML内容,避免重复渲染带来的性能损耗;
  • 方式二更简洁,适合简单内容,但大HTML重复拼接会增加内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:07:45