These Flutter printer libraries will help make an app allowing document or receipt printing easier.
Table of Contents
esc_pos_printer
ecs_pos_printer allows printing documents using an ESC/POS thermal WiFi/Ethernet printer.
import 'package:esc_pos_printer/esc_pos_printer.dart'; const PaperSize paper = PaperSize.mm80; final profile = await CapabilityProfile.load(); final printer = NetworkPrinter(paper, profile); final PosPrintResult res = await printer.connect('192.168.0.123', port: 9100); if (res == PosPrintResult.success) { testReceipt(printer); printer.disconnect(); }
printing
printing can generate and print documents to Android or iOS compatible printers.

import 'package:pdf/widgets.dart' as pw; final doc = pw.Document(); doc.addPage(pw.Page( pageFormat: PdfPageFormat.a4, build: (pw.Context context) { return pw.Center( child: pw.Text("My first printed text"), ); // Center })); // Page //print with a TrueType font from a flutter bundle: final font = await rootBundle.load("assets/open-sans.ttf"); final ttf = pw.Font.ttf(font); doc.addPage(pw.Page( build: (pw.Context context) { return pw.Center( child: pw.Text('Dart is awesome', style: pw.TextStyle(font: ttf, fontSize: 40)), ); // Center })); // Page
flutter_sunmi_printer
This library allows printing thermal receipts using the Sunmi device’s built-in printer. The developer tested and confirmed that it worked on Sunmi V2.
It supports printing text with styles (bold, underline, align, font size), rows containing up to 12 columns, images with alignment, separator, empty lines, bold, and underlines.
import 'package:flutter_sunmi_printer/flutter_sunmi_printer.dart'; // Test regular text SunmiPrinter.hr(); // prints a full width separator SunmiPrinter.text( 'Test Sunmi Printer', styles: SunmiStyles(align: SunmiAlign.center), ); SunmiPrinter.hr(); // Test align SunmiPrinter.text( 'left', styles: SunmiStyles(bold: true, underline: true), ); SunmiPrinter.text( 'center', styles: SunmiStyles(bold: true, underline: true, align: SunmiAlign.center), ); SunmiPrinter.text( 'right', styles: SunmiStyles(bold: true, underline: true, align: SunmiAlign.right), ); // Test text size SunmiPrinter.text('Extra small text', styles: SunmiStyles(size: SunmiSize.xs)); SunmiPrinter.text('Medium text', styles: SunmiStyles(size: SunmiSize.md)); SunmiPrinter.text('Large text', styles: SunmiStyles(size: SunmiSize.lg)); SunmiPrinter.text('Extra large text', styles: SunmiStyles(size: SunmiSize.xl)); // Test row SunmiPrinter.row( cols: [ SunmiCol(text: 'col1', width: 4), SunmiCol(text: 'col2', width: 4, align: SunmiAlign.center), SunmiCol(text: 'col3', width: 4, align: SunmiAlign.right), ], ); // Test image ByteData bytes = await rootBundle.load('assets/rabbit_black.jpg'); final buffer = bytes.buffer; final imgData = base64.encode(Uint8List.view(buffer)); SunmiPrinter.image(imgData); SunmiPrinter.emptyLines(3);