Skip to main content

EscPosGenerator: API per Sviluppatori

EscPosGenerator e la classe statica in pos_core che converte una lista di PrintBlock in byte ESC/POS pronti per l'invio a stampanti termiche. Si trova nel package pos_core/lib/logic/print/escpos_generator.dart e utilizza la libreria esc_pos_utils_plus.

Metodo Principale: generateBytes

static Future<List<int>> generateBytes({
required List<PrintBlock> blocks,
required PaperSize paperSize,
required CapabilityProfile profile,
Map<String, dynamic> data = const {},
}) async

Parametri:

  • blocks: lista di PrintBlock che compongono il template
  • paperSize: dimensione carta (PaperSize.mm58 o PaperSize.mm80)
  • profile: profilo capacita della stampante (ottenuto via CapabilityProfile.load())
  • data: mappa chiave-valore per l'interpolazione di variabili nel template

Ritorna: List<int> con i byte ESC/POS da inviare via socket alla stampante.

Interpolazione Variabili

I blocchi di testo supportano variabili con sintassi {{nomeVariabile}}. L'interpolazione avviene prima della generazione dei byte.

final bytes = await EscPosGenerator.generateBytes(
blocks: [
TextBlock(text: 'Ordine: {{orderId}}', bold: true, align: 'center'),
TextBlock(text: 'Cliente: {{customerName}}'),
DividerBlock(),
TextBlock(text: 'Totale: {{total}}', size: 'large', align: 'right'),
],
paperSize: PaperSize.mm80,
profile: await CapabilityProfile.load(),
data: {
'orderId': '12345',
'customerName': 'Mario Rossi',
'total': '25.50',
},
);

Tipi di PrintBlock Supportati

TextBlock

TextBlock(
text: 'Testo da stampare',
align: 'center', // 'left', 'center', 'right'
bold: true,
underline: false,
size: 'large', // 'small', 'medium', 'large'
)

Il size: 'large' raddoppia altezza e larghezza del carattere (equivalente a PosTextSize.size2).

ColumnsBlock

ColumnsBlock(columns: [
ColumnDef(text: 'Prodotto', width: 8, align: 'left'),
ColumnDef(text: '25.00', width: 4, align: 'right'),
])

Le colonne usano un sistema a 12 slot di larghezza totale. La somma dei width deve essere 12.

BarcodeBlock e QRCodeBlock

BarcodeBlock(
data: '8001234567890',
format: 'ean13', // 'ean13', 'ean8', 'code128', 'code39', 'upc_a'
height: 50,
textPosition: 'below',
)

QRCodeBlock(
data: 'https://example.com/order/123',
size: 4, // 1-8
errorCorrection: 'M', // 'L', 'M', 'Q', 'H'
)

Il metodo isValid() di BarcodeBlock verifica la lunghezza dei dati in base al formato (es. EAN-13 richiede esattamente 13 cifre numeriche).

Serializzazione JSON

Tutti i PrintBlock supportano fromJson e toJson per la persistenza nei template PrintLayout:

// Da JSON (utile per caricare template dal server)
final block = PrintBlock.fromJson({'type': 'text', 'text': 'Hello', 'bold': true});

// A JSON (utile per salvare template)
final json = block.toJson();

Il campo type nel JSON determina il tipo di blocco: text, columns, image, divider, barcode, qrcode, feed, cut.

FAQ

Come ottengo il CapabilityProfile? Usare CapabilityProfile.load() per il profilo di default, oppure CapabilityProfile.load(name: 'XP-N160I') per un modello specifico.

Posso stampare immagini? ImageBlock e definito nel modello ma la generazione ESC/POS per le immagini e ancora in fase di implementazione (richiede il package image per la conversione).

Come gestisco carta da 58mm vs 80mm? Passare PaperSize.mm58 o PaperSize.mm80 a generateBytes(). Il numero di caratteri per riga cambia di conseguenza (32 vs 48 per font standard).

Vedi Anche

Questa pagina ti è stata utile?