Flutter桌面应用如何通过打印机打印图片?
Flutter桌面应用实现图片打印功能
1. 依赖配置
在项目的pubspec.yaml中添加printing和pdf依赖(printing依赖pdf生成可打印文档):
dependencies: flutter: sdk: flutter printing: ^5.12.0 pdf: ^3.10.0
执行flutter pub get完成依赖安装。
2. 核心实现步骤
加载图片
支持从Asset、本地文件或网络加载图片,以下是Asset图片的加载示例:
final imageBytes = await rootBundle.load('assets/your_image.png'); final pdfImage = PdfImage.file( pdf.document, bytes: imageBytes.buffer.asUint8List(), );
生成含图片的PDF文档
用pdf包创建包含目标图片的打印页面:
final pdf = Document(); pdf.addPage( Page( pageFormat: PdfPageFormat.a4, build: (context) => Center( child: Image(pdfImage, fit: BoxFit.contain), ), ), );
触发打印
提供两种打印方式:
// 方式1:带预览界面的打印 PdfPreview( build: (context) => pdf, ); // 方式2:直接触发打印(无预览) await Printing.layoutPdf( onLayout: (format) async => pdf.save(), );
3. 完整示例代码
import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; import 'package:printing/printing.dart'; class ImagePrinter extends StatefulWidget { const ImagePrinter({super.key}); @override State<ImagePrinter> createState() => _ImagePrinterState(); } class _ImagePrinterState extends State<ImagePrinter> { Future<void> printTargetImage() async { // 加载Asset图片 final imageData = await rootBundle.load('assets/test_print_image.png'); final pdf = pw.Document(); // 构建打印页面 pdf.addPage( pw.Page( pageFormat: PdfPageFormat.a4, build: (pw.Context context) { return pw.Center( child: pw.Image( pw.PdfImage.file( pdf.document, bytes: imageData.buffer.asUint8List(), ), fit: pw.BoxFit.contain, ), ); }, ), ); // 启动打印 await Printing.layoutPdf( onLayout: (PdfPageFormat format) async => pdf.save(), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('图片打印')), body: Center( child: ElevatedButton( onPressed: printTargetImage, child: const Text('开始打印'), ), ), ); } }
4. 注意事项
- 图片权限与路径:本地文件图片需确保应用可读取对应路径,桌面平台一般无需额外权限,但要确认路径拼写正确。
- 网络图片处理:需先将网络图片下载为字节数据,再转换为
PdfImage使用。 - 平台适配:不同桌面打印机可能需要调整图片缩放比例,可通过
BoxFit或固定尺寸优化打印效果。 - 版本兼容:确保
printing和pdf版本匹配,避免因版本冲突导致异常。
内容的提问来源于stack exchange,提问作者sandesh shrestha
相关产品推荐
相关产品推荐

