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
相关产品推荐
相关产品推荐

