graphics_print_utils 0.0.8 copy "graphics_print_utils: ^0.0.8" to clipboard
graphics_print_utils: ^0.0.8 copied to clipboard

A Flutter plugin for generating and printing graphics, text, barcodes, and QR codes.

example/lib/main.dart

import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_esc_pos_utils/flutter_esc_pos_utils.dart' hide Barcode;
import 'package:graphics_print_utils/graphics_print.dart';
import 'package:image/image.dart' as img;

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  Uint8List pngImage = Uint8List.fromList([]);
  @override
  void initState() {
    initialize();
    super.initState();
  }

  initialize() async {
    pngImage = await drawEscImage();
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app', style: TextStyle()),
        ),
        body: Center(
          child: SingleChildScrollView(
            child: Builder(
              builder: (context) {
                if (pngImage.isEmpty) {
                  return SizedBox();
                } else {
                  return Image.memory(pngImage);
                }
              },
            ),
          ),
        ),
        bottomNavigationBar: SizedBox(
          height: 60,
          child: TextButton(
            onPressed: () async {
              final profile = await CapabilityProfile.load();
              final generator = Generator(PaperSize.mm80, profile);
              List<int> bytes = generator.image(img.decodeImage(pngImage)!);

              /// You can use the bytes to print using your printer
            },
            child: Text(
              'Generate Printing Bytes',
              style: TextStyle(fontSize: 20),
            ),
          ),
        ),
      ),
    );
  }

  drawEscImage() async {
    GraphicsPrintUtils escImageUtil = GraphicsPrintUtils(
      paperSize: PrintPaperSize.mm80,
      margin: PrintMargin(left: 10, right: 10),
    );
    // Add store name and header
    escImageUtil.feed(lines: 2);
    escImageUtil.text(
      "SuperMart",
      style: PrintTextStyle(
        fontSize: PrintFontSize.large,
        align: PrintAlign.center,
        bold: true,
      ),
    );
    escImageUtil.text(
      "123 Main Street, Suite 456, Building 7, Business District, City, State, ZIP, Country, Near Central Park, Opposite to ABC Mall, Landmark XYZ",
      style: PrintTextStyle(
        fontSize: PrintFontSize.small,
        align: PrintAlign.center,
      ),
    );
    escImageUtil.text(
      "City, State, ZIP",
      style: PrintTextStyle(
        fontSize: PrintFontSize.small,
        align: PrintAlign.center,
      ),
    );
    escImageUtil.text(
      "Tel: (123) 456-7890",
      style: PrintTextStyle(
        fontSize: PrintFontSize.small,
        align: PrintAlign.center,
      ),
    );
    escImageUtil.line();

    // Add itemized list
    escImageUtil.row(
      columns: [
        PrintColumn('Item', flex: 4),
        PrintColumn(
          'Qty',
          flex: 1,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
        PrintColumn(
          'Price',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.line();
    escImageUtil.row(
      columns: [
        PrintColumn('Apples', flex: 4),
        PrintColumn(
          '2',
          flex: 1,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
        PrintColumn(
          '\$3.00',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.dottedLine();
    escImageUtil.row(
      columns: [
        PrintColumn('قيمة', flex: 4),
        PrintColumn(
          '2',
          flex: 1,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
        PrintColumn(
          '\$3.00',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.dottedLine();
    escImageUtil.row(
      columns: [
        PrintColumn('Bananas  ', flex: 4),
        PrintColumn(
          '1',
          flex: 1,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
        PrintColumn(
          '\$1.50',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.dottedLine();
    escImageUtil.row(
      columns: [
        PrintColumn('Milk', flex: 4),
        PrintColumn(
          '1',
          flex: 1,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
        PrintColumn(
          '\$2.50',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.line();

    // Add totals
    escImageUtil.row(
      columns: [
        PrintColumn('Subtotal', flex: 6),
        PrintColumn(
          '\$7.00',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.row(
      columns: [
        PrintColumn('Tax', flex: 6),
        PrintColumn(
          '\$0.50',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right),
        ),
      ],
      spacing: 10,
    );
    escImageUtil.row(
      columns: [
        PrintColumn('Total', flex: 6, style: PrintTextStyle(bold: true)),
        PrintColumn(
          '\$7.50',
          flex: 2,
          style: PrintTextStyle(align: PrintAlign.right, bold: true),
        ),
      ],
      spacing: 10,
    );

    escImageUtil.line();

    // Add QR code for receipt verification
    escImageUtil.text(
      "Scan for Receipt",
      style: PrintTextStyle(align: PrintAlign.center),
    );
    escImageUtil.qr('https://example.com/receipt/12345');

    escImageUtil.text(
      "Scan for invoice",
      style: PrintTextStyle(align: PrintAlign.center),
    );
    escImageUtil.barcode('1259854', barcode: Barcode.code128());

    // Add footer
    escImageUtil.text(
      "Thank you for shopping!",
      style: PrintTextStyle(align: PrintAlign.center),
    );
    escImageUtil.text(
      "Visit us again!",
      style: PrintTextStyle(align: PrintAlign.center),
    );

    escImageUtil.text(
      "¡Gracias por comprar con nosotros!", // Spanish: Thank you for shopping with us!", // Spanish: Thank you for shopping with us!
      style: PrintTextStyle(align: PrintAlign.center),
    );

    // final fontZipCh = await rootBundle.load('assets/ch_24_ch.zip').then((byteData) => byteData.buffer.asUint8List());
    // final chFont = img.BitmapFont.fromZip(fontZipCh);
    // escImageUtil.textArabic(
    //   "感谢您的光临!", // Chinese: Thank you for shopping with us!
    //   chFont,
    //   style: PrintTextStyle(
    //     fontSize: PrintFontSize.small,
    //     align: PrintAlign.center,
    //   ),
    // );
    escImageUtil.text(
      "Merci pour vos achats !", // French: Thank you for shopping with us!
      style: PrintTextStyle(align: PrintAlign.center),
    );
    escImageUtil.text(
      "Bedankt voor uw aankoop!", // Dutch: Thank you for shopping with us!
      style: PrintTextStyle(align: PrintAlign.center),
    );

    // final fontZipFile2 = await rootBundle.load('assets/noto_serif_48.zip').then((byteData) => byteData.buffer.asUint8List());
    //    final arbicFont = img.BitmapFont.fromZip(fontZipFile2);

    // print(fontZipFile2);
    escImageUtil.text(
      "   السلام عليكم  ", // Arabic: Peace be upon you!//لسلام عليكم
      style: PrintTextStyle(align: PrintAlign.center),
    );
    escImageUtil.text(
      "مرحباً بالعالم", // Arabic: Peace be upon you!
      style: PrintTextStyle(align: PrintAlign.center),
    );

    escImageUtil.text(
      "قيمة", // Arabic: Peace be upon you!
      style: PrintTextStyle(align: PrintAlign.center),
    );

    escImageUtil.feed(lines: 5);
    var bytes = escImageUtil.build();
    return bytes;
  }
}
1
likes
140
points
15
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for generating and printing graphics, text, barcodes, and QR codes.

Topics

#esc-pos #printing #graphics #qr-codes #barcodes

Documentation

API reference

License

MIT (license)

Dependencies

barcode_image, flutter, flutter_web_plugins, image, qr

More

Packages that depend on graphics_print_utils