jFxKasse/src/main/java/com/jFxKasse/controller/PrinterController.java

142 lines
3.4 KiB
Java

/**
* some parts are from http://www.mets-blog.com/java-pos-thermal-printer-example/
*/
package com.jFxKasse.controller;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.nio.charset.StandardCharsets;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
public class PrinterController implements Printable
{
// All available Printers on this system
private PrintService[] printService;
// selected printer
private PrintService selectedPrinter;
private DocFlavor flavor;
public PrinterController()
{
flavor = DocFlavor.BYTE_ARRAY.AUTOSENSE;
}
/**
* @return A String array with all available printers
*/
public String[] getAvailablePrinters()
{
int printerSize = PrinterJob.lookupPrintServices().length;
String printers[] = new String[printerSize];
for (int i = 0; i < printers.length; i++) {
printers[i] = this.printService[i].getName();
}
return printers;
}
/**
* searchs connected printers on the system
*/
public void searchPrinters()
{
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
this.printService = PrintServiceLookup.lookupPrintServices(flavor, pras);
String printers[] = getAvailablePrinters();
System.out.println("Printers found:");
System.out.println("++++++++++++++++++++");
for (int i = 0; i < printers.length; i++) {
System.out.println(printers[i]);
}
System.out.println("++++++++++++++++++++");
}
/**
* Selects the printer via its name
* @param printerName
*/
public void selectPrinter(String printerName)
{
String printers[] = getAvailablePrinters();
for (int i = 0; i < printers.length; i++) {
if (printerName.equals(printers[i])) {
selectedPrinter = printService[i];
System.out.println("Printer: " + printers[i] + " selected");
return;
}
}
}
/**
*
* @param input data as String
*/
public void printString(String text)
{
PrintService service = selectedPrinter;
DocPrintJob job = service.createPrintJob();
try {
byte[] bytes;
bytes = text.getBytes(StandardCharsets.UTF_8);
Doc doc = new SimpleDoc(bytes, flavor, null);
job.print(doc, null);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int print(Graphics g, PageFormat pf, int page) throws PrinterException
{
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_SUCH_PAGE;
}
/*
* User (0,0) is typically outside the imageable area, so we must
* translate by the X and Y values in the PageFormat to avoid clipping
*/
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
/* Now we perform our rendering */
return PAGE_EXISTS;
}
public void printBytes(byte[] bytes)
{
PrintService service = selectedPrinter;
DocPrintJob job = service.createPrintJob();
try {
Doc doc = new SimpleDoc(bytes, flavor, null);
job.print(doc, null);
} catch (Exception e) {
e.printStackTrace();
}
}
public void cutPaper()
{
byte[] cutP = new byte[] { 0x1d, 'V', 1 };
printBytes(cutP);
}
}