Reporting to dot matrix ESC P - FedericoAlcantara/wubiq GitHub Wiki

Dot Matrix Printing Challenges

Understanding the Issues

Dot matrix printers often present unique challenges:

  • Many printer drivers cannot handle PDF documents
  • Poor interpretation of Pageable/Printable interfaces
  • These issues are particularly pronounced with Windows printer drivers

Technical Background

The core issue stems from how different printing methods handle character rendering:

ESCP/2 Commands (Traditional Method)

  • Uses printer's internal fonts
  • Prints characters in a single print head pass
  • Results in clean, crisp output

Java Print Services

  • Cannot send ESCP/2 commands directly
  • "Draws" each character on a canvas instead of using internal fonts
  • Many printer drivers apply antialiasing
  • In black and white printing, antialiasing often produces poor results

Solution with Wubiq

While direct printing in Windows environments is possible (but outside Wubiq's scope), Wubiq provides two specialized classes to handle these cases:

Available Classes

  • TextField: Handles individual text elements
  • TextPageable: Manages the overall page layout

Usage

The classes are available in the net.sf.wubiq.wrappers package, and their Javadoc documentation can be found in the wubiq-common project.

Basic example of usage:

// Create a TextPageable object
TextPageable textPage = new TextPageable();

// Create and add text fields (coordinates in twips - 1 inch = 1440 twips)
TextField field1 = new TextField(1, // page number
                               1440, // x position (1 inch from left)
                               1440, // y position (1 inch from top)
                               12, // font size
                               "Hello World");
textPage.getTextLines().add(field1);

// Print using standard Java Print API
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
DocPrintJob printJob = printService.createPrintJob();
Doc doc = new SimpleDoc(textPage, DocFlavor.SERVICE_FORMATTED.PAGEABLE, null);
printJob.print(doc, null);

Note: All measurements in TextField and TextPageable are in twips (1 inch = 1440 twips). This provides precise positioning for dot matrix printers.