network_printer_plugin

Plugin Flutter untuk mencetak ke printer jaringan (network printer) seperti thermal printer via TCP/IP.

Fitur

  • 🖨️ Koneksi ke printer jaringan via TCP/IP
  • 📝 Mengirim data ESC/POS ke printer
  • 🔌 Manajemen koneksi (connect, write, disconnect)
  • ⚡ Simple dan mudah digunakan

Instalasi

Tambahkan dependensi ke file pubspec.yaml:

dependencies:
  network_printer_plugin: ^0.0.1
  esc_pos_utils: ^1.1.0  # Untuk generate ESC/POS commands

Kemudian jalankan:

flutter pub get

Penggunaan

Import Package

import 'package:network_printer_plugin/network_printer_plugin.dart';
import 'package:esc_pos_utils/esc_pos_utils.dart';

Contoh Dasar

// 1. Buat instance NetworkPrinter
var printer = NetworkPrinter();

// 2. Koneksi ke printer (gunakan IP address dan port printer Anda)
await printer.connect("192.168.0.101", 9100);

// 3. Kirim data ke printer
await printer.write(bytes);

// 4. Tutup koneksi
await printer.disconnect();

Contoh Lengkap

Berikut contoh lengkap untuk mencetak berbagai format text dan barcode:

import 'package:esc_pos_utils/esc_pos_utils.dart';
import 'package:flutter/material.dart';
import 'package:network_printer_plugin/network_printer_plugin.dart';

void main() {
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Network Printer Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // Load capability profile untuk printer
              final profile = await CapabilityProfile.load();
              
              // Buat generator untuk paper size 80mm
              var generator = Generator(PaperSize.mm80, profile);
              List<int> bytes = [];

              // Print text biasa
              bytes += generator.text('Regular text: Hello World!');
              
              // Print text dengan karakter spesial
              bytes += generator.text('Special chars: àÀ èÈ éÉ ûÛ',
                  styles: PosStyles(codeTable: 'CP1252'));

              // Print text dengan style
              bytes += generator.text('Bold text', 
                  styles: PosStyles(bold: true));
              bytes += generator.text('Reverse text', 
                  styles: PosStyles(reverse: true));
              bytes += generator.text('Underlined text',
                  styles: PosStyles(underline: true), linesAfter: 1);

              // Print text dengan alignment
              bytes += generator.text('Align left', 
                  styles: PosStyles(align: PosAlign.left));
              bytes += generator.text('Align center', 
                  styles: PosStyles(align: PosAlign.center));
              bytes += generator.text('Align right',
                  styles: PosStyles(align: PosAlign.right), linesAfter: 1);

              // Print dalam kolom
              bytes += generator.row([
                PosColumn(
                  text: 'Item',
                  width: 6,
                  styles: PosStyles(align: PosAlign.left),
                ),
                PosColumn(
                  text: 'Qty',
                  width: 3,
                  styles: PosStyles(align: PosAlign.center),
                ),
                PosColumn(
                  text: 'Price',
                  width: 3,
                  styles: PosStyles(align: PosAlign.right),
                ),
              ]);

              // Print text dengan ukuran besar
              bytes += generator.text('LARGE TEXT',
                  styles: PosStyles(
                    height: PosTextSize.size2,
                    width: PosTextSize.size2,
                  ));

              // Print barcode
              final List<int> barData = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 4];
              bytes += generator.barcode(Barcode.upcA(barData));

              // Feed paper dan cut
              bytes += generator.feed(2);
              bytes += generator.cut();

              // Kirim ke printer
              var printer = NetworkPrinter();
              try {
                await printer.connect("192.168.0.101", 9100);
                await printer.write(bytes);
                await printer.disconnect();
                print('Print berhasil!');
              } catch (e) {
                print('Print gagal: $e');
              }
            },
            child: const Text('Test Print'),
          ),
        ),
      ),
    );
  }
}

API Reference

NetworkPrinter Class

Methods

connect(String host, int port)

Membuat koneksi ke printer jaringan.

Parameters:

  • host (String): IP address printer (contoh: "192.168.0.101")
  • port (int): Port printer (umumnya 9100 untuk thermal printer)

Returns: Future<void>

Throws: Exception jika koneksi gagal

Example:

await printer.connect("192.168.0.101", 9100);
write(List<int> data)

Mengirim data byte ke printer.

Parameters:

  • data (List

Returns: Future<void>

Throws: Exception jika pengiriman data gagal

Example:

await printer.write(bytes);
disconnect()

Menutup koneksi ke printer.

Returns: Future<void>

Throws: Exception jika pemutusan koneksi gagal

Example:

await printer.disconnect();

Tips & Troubleshooting

Menemukan IP Address Printer

  1. Print configuration page dari printer Anda
  2. Atau gunakan network scanner tools
  3. Pastikan perangkat Anda dan printer dalam satu jaringan

Port yang Umum Digunakan

  • 9100: Port standar untuk RAW printing (paling umum)
  • 9101, 9102: Port alternatif pada beberapa printer

Error Handling

Selalu gunakan try-catch untuk menangani error:

try {
  var printer = NetworkPrinter();
  await printer.connect("192.168.0.101", 9100);
  await printer.write(bytes);
  await printer.disconnect();
} catch (e) {
  print('Error: $e');
  // Handle error sesuai kebutuhan
}

Timeout Connection

Koneksi memiliki timeout 5 detik. Jika printer tidak merespons dalam waktu tersebut, koneksi akan gagal.

Kompatibilitas

Plugin ini mendukung printer yang support ESC/POS commands, termasuk:

  • Thermal receipt printers
  • POS printers
  • Network-enabled printers dengan protokol TCP/IP

Lisensi

Lihat file LICENSE untuk informasi lebih lanjut.

Kontribusi

Kontribusi sangat diterima! Silakan buat issue atau pull request di repository ini.