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

Flutter安卓端发票PDF打印功能实现咨询

安卓端Flutter实现PDF发票打印(纯Dart方案)

嘿,作为Flutter新手碰到这个需求真的很正常!我专门给你整理了一套纯Dart、仅针对安卓的实现方案,完全避开热敏打印机的那套逻辑,直接搞定APP内PDF发票打印~

第一步:添加必要依赖

首先在你的pubspec.yaml里加入两个核心包:

  • pdf:用来生成符合标准的PDF发票文档
  • printing:用来调用安卓系统的打印服务,实现APP内打印
dependencies:
  flutter:
    sdk: flutter
  pdf: ^3.10.0  # 可以替换为最新版本
  printing: ^5.12.0

执行flutter pub get完成依赖安装即可。

第二步:编写PDF发票生成逻辑

我给你写了一个贴近真实发票的生成函数,你可以直接改内容适配自己的业务:

import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;

Future<pw.Document> generateInvoice() async {
  final pdf = pw.Document();

  // 添加发票页面
  pdf.addPage(
    pw.Page(
      build: (pw.Context context) {
        return pw.Column(
          crossAxisAlignment: pw.CrossAxisAlignment.start,
          children: [
            // 发票标题
            pw.Text('XX科技有限公司电子发票', style: pw.TextStyle(fontSize: 24, fontWeight: pw.FontWeight.bold)),
            pw.SizedBox(height: 20),
            
            // 基础信息
            pw.Text('客户名称: 张三', style: pw.TextStyle(fontSize: 16)),
            pw.Text('开票日期: 2024-05-20', style: pw.TextStyle(fontSize: 16)),
            pw.Text('发票编号: INV20240520001', style: pw.TextStyle(fontSize: 16)),
            pw.SizedBox(height: 20),
            
            // 商品明细表格
            pw.Table.fromTextArray(
              headers: ['商品名称', '数量', '单价(元)', '小计(元)'],
              data: [
                ['旗舰版会员', '1', '199', '199'],
                ['专属技术服务', '1', '99', '99'],
              ],
              border: pw.TableBorder.all(),
              headerStyle: pw.TextStyle(fontWeight: pw.FontWeight.bold),
              cellAlignment: pw.Alignment.center,
            ),
            pw.SizedBox(height: 20),
            
            // 总金额
            pw.Align(
              alignment: pw.Alignment.centerRight,
              child: pw.Text('应付总金额: ¥298', style: pw.TextStyle(fontSize: 18, fontWeight: pw.FontWeight.bold)),
            ),
          ],
        );
      },
    ),
  );

  return pdf;
}

pdf包的组件用法和Flutter原生Widget非常像,你可以轻松调整字体、间距、表格样式来匹配你的发票设计。

第三步:实现APP内打印按钮

把打印功能和按钮绑定,点击后自动生成PDF并调用安卓打印服务:

import 'package:flutter/material.dart';
import 'package:printing/printing.dart';

class InvoicePrintPage extends StatelessWidget {
  const InvoicePrintPage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('发票打印')),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 先生成PDF文档
            final invoicePdf = await generateInvoice();
            
            // 调用安卓系统打印功能
            await Printing.layoutPdf(
              onLayout: (PdfPageFormat format) async => invoicePdf.save(),
              name: '电子发票.pdf', // 打印时显示的文档名称
            );
          },
          child: const Text('打印发票'),
        ),
      ),
    );
  }
}

关键说明&注意事项

  • 这套方案完全用Dart实现,不需要写任何安卓原生代码,对新手友好
  • printing包会自动调用安卓系统的打印框架,支持本地打印机、云打印等所有安卓兼容的打印服务
  • 测试时请确保你的安卓设备已经在系统设置中添加了可用的打印机
  • 如果需要添加Logo、二维码等元素,pdf包都支持,你可以直接在代码里扩展

这样点击按钮就能直接把生成的PDF发票打印出来啦,完全符合你的需求~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 21:17:47