Quick Print 是一个功能强大的 Flutter 包,专为在 Android、iOS、macOS、Windows 和 Linux 等多个平台上实现无缝 PDF 打印而设计。它支持多种打印机,包括 ESC/POS、Sunmi、蓝牙、USB 和系统打印机,使开发者能够高效地生成和发送打印任务。该包通过一致的 API 和强大的设备兼容性,简化了跨平台打印。非常适合需要可靠打印功能的零售、POS 和文档管理应用。
适合场景
零售收据打印
POS系统集成
文档批量打印
移动应用报告
跨平台打印
主要特点
多平台支持
ESC/POS 和蓝牙打印机兼容性
PDF生成和打印
USB 和系统打印机集成
跨设备打印作业处理
适合对象
POS应用开发者
零售软件团队
需要打印的移动应用开发者
文档自动化项目
跨平台打印解决方案
使用建议
需要平台特定的设置
高级功能的文档有限
蓝牙配对可能需要用户干预
目标操作系统上的打印机驱动程序可用性
建议在多个设备上进行测试
原始 README
以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。
Quick Print
A comprehensive Flutter package for handling PDF printing across different platforms and devices. This package provides a unified interface for printing PDFs using various printer types, including ESC/POS, Sunmi, Bluetooth, USB, and system printers.
Features
🖨️ Multi-printer Support
Sunmi printer support for Android devices
Bluetooth printer integration (including BLE)
USB printer compatibility
Desktop system printer support
Mobile device printing
🖼️ Image Printing Support
Print images (Uint8List) directly to any supported printer
📄 Paper Size Options
80mm paper width (POS printers)
58mm paper width (Thermal printers)
A4 paper size
🎯 Platform Support
Android
iOS
Windows
Linux
macOS
🔍 Printer Discovery
Discover Bluetooth, BLE, USB, and desktop printers
Unified API for managing discovered printers
🛠️ Error Handling
Custom exceptions for invalid files, unconnected devices, and unsupported operations
Getting Started
Add this to your package's pubspec.yaml file:
dependencies:quick_print:<LASTEST_VERSION>
Then run:
flutter pub get
Usage
Basic Usage
import'package:quick_print/quick_print.dart';
// Create a printer instancefinal printer = QuickPrint(PrinterDeviceType.mobile);
// Print a PDF fileawait printer.instance.print(
path: 'assets/document.pdf',
paperSize: PaperSize.a4,
);
// Print an image (as Uint8List)final imageBytes = awaitFile('assets/image.png').readAsBytes();
await printer.instance.printImage(
bytes: imageBytes,
paperSize: PaperSize.a4,
);
Printer Discovery
The PrinterDiscoveryService class allows you to discover printers on various platforms.
import'package:quick_print/quick_print.dart';
final discoveryService = PrinterDiscoveryService();
// Initialize the service (required for BLE on Windows)await discoveryService.initialize();
// Discover printersawait discoveryService.discoverDevices();
// List discovered printersfinal printers = discoveryService.printerDevicesList;
printers.forEach((printer) {
print('Discovered printer: ${printer.name}');
});
// Dispose of the service when done
discoveryService.dispose();
Bluetooth Printer
import'package:quick_print/quick_print.dart';
// Create a Bluetooth printer modelfinal bluetoothModel = BluetoothPrinterModel(
name: 'Thermal Printer',
address: '00:11:22:33:44:55',
isBle: false,
);
// Create a printer instancefinal printer = QuickPrint(PrinterDeviceType.bluetooth);
// Print with the Bluetooth printerawait printer.instance.print(
path: 'assets/receipt.pdf',
paperSize: PaperSize.mm80,
model: bluetoothModel,
);
USB Printer
import'package:quick_print/quick_print.dart';
// Create a USB printer modelfinal usbModel = UsbPrinterModel(
name: 'POS-58',
productId: '0x0483',
vendorId: '0x5740',
);
// Create a printer instancefinal printer = QuickPrint(PrinterDeviceType.usb);
// Print with the USB printerawait printer.instance.print(
path: 'assets/receipt.pdf',
paperSize: PaperSize.mm58,
model: usbModel,
);
Platform-specific Setup
Android
Add the following permissions to your AndroidManifest.xml:
<!-- For Bluetooth printers --><uses-permissionandroid:name="android.permission.BLUETOOTH"/><uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN"/><uses-permissionandroid:name="android.permission.BLUETOOTH_CONNECT"/><uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"/><!-- For USB printers --><uses-featureandroid:name="android.hardware.usb.host"/>
iOS
Add the following to your Info.plist:
<key>UISupportedExternalAccessoryProtocols</key><array><string>com.printer.protocol</string></array><!-- For Bluetooth printers --><key>NSBluetoothAlwaysUsageDescription</key><string>Need BT access for printing</string><key>NSBluetoothPeripheralUsageDescription</key><string>Need BT access for printing</string>