Drucken in Java zum Etikettendrucker

Ich habe Probleme beim Drucken auf einem Etikettendrucker. Der folgende Code druckt 4 “Etiketten” auf einem (Bild von Label Attached).

Der folgende Code wird an einen Bruder QL-500-Etikettendrucker gedruckt. Es druckt auf 3,5 “von 1,1” Etiketten.

Es wäre auch toll, wenn mir jemand helfen könnte, den Code besser zu verstehen.

import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Paper; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import javax.print.PrintService; public class DYMOLabelPrintConnector implements Printable { public static final String PRINTERNAME = "DYMO LabelWriter 400"; public static final boolean PRINTMENU = false; public static void main(String[] args) { PrinterJob printerJob = PrinterJob.getPrinterJob(); PageFormat pageFormat = printerJob.defaultPage(); Paper paper = new Paper(); final double widthPaper = (1.2 * 72); final double heightPaper = (1.5 * 72); paper.setSize(widthPaper, heightPaper); paper.setImageableArea(0, 0, widthPaper, heightPaper); pageFormat.setPaper(paper); pageFormat.setOrientation(PageFormat.LANDSCAPE); if (PRINTMENU) { if (printerJob.printDialog()) { printerJob.setPrintable(new DYMOLabelPrintConnector(), pageFormat); try { printerJob.print(); } catch (PrinterException e) { e.printStackTrace(); } } } else { PrintService[] printService = PrinterJob.lookupPrintServices(); for (int i = 0; i < printService.length; i++) { System.out.println(printService[i].getName()); if (printService[i].getName().compareTo(PRINTERNAME) == 0) { try { printerJob.setPrintService(printService[i]); printerJob.setPrintable(new DYMOLabelPrintConnector(), pageFormat); printerJob.print(); } catch (PrinterException e) { e.printStackTrace(); } } } } System.exit(0); } public String getValue(final int elementOnLabel, final int labelCounter) { String value = ""; switch (elementOnLabel) { case 0: // what ever you want to have in this line value = "SetupX"; break; case 1: // what ever you want to have in this line value = "fiehnlab.ucd"; break; case 2: // what ever you want to have in this line value = "id: " + labelCounter; break; case 3: // what ever you want to have in this line // TODO - add DB connection value = "label:" + elementOnLabel; break; case 4: // what ever you want to have in this line value = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US).format(new Date()); break; default: break; } return value; } public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { System.out.println("printing page: " + pageIndex); if (pageIndex < getPageNumbers()) { Graphics2D g = (Graphics2D) graphics; // g.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); g.translate(20, 10); String value = ""; pageIndex = pageIndex + 1; // specific for four circular labels per page for (int x = 0; x < 80; x = x + 50) { for (int y = 0; y  0) { posOnPage = posOnPage - 2; } if (y > 0) { posOnPage = posOnPage - 1; } // current counter for the label. int id = (posOnPage - 1) + ((pageIndex - 1) * 4); // setupx g.setFont(new Font(g.getFont().getFontName(), g.getFont().getStyle(), 3)); value = this.getValue(0, id); g.drawString(" " + value, x, y); // fiehnlab g.setFont(new Font(g.getFont().getFontName(), g.getFont().getStyle(), 3)); value = this.getValue(1, id); g.drawString(" " + value, x, y + 4); // ID g.setFont(new Font(g.getFont().getFontName(), Font.BOLD, 7)); value = this.getValue(2, id); g.drawString("" + value, x, y + 10); // label g.setFont(new Font(g.getFont().getFontName(), g.getFont().getStyle(), 5)); value = this.getValue(3, id); g.drawString(" " + value, x, y + 16); // date g.setFont(new Font(g.getFont().getFontName(), Font.PLAIN, 3)); value = this.getValue(4, id); g.drawString(" " + value, x, y + 20); } } return PAGE_EXISTS; } else { return NO_SUCH_PAGE; } } public int getPageNumbers() { return 5; } } enter code here 

Hier ist, was es druckt:

Wow, ich kann dir nicht sagen, wie sehr ich es liebe, in Java zu drucken, wenn es funktioniert, es ist großartig …

.

 public class PrinterTest { public static void main(String[] args) { PrinterJob pj = PrinterJob.getPrinterJob(); if (pj.printDialog()) { PageFormat pf = pj.defaultPage(); Paper paper = pf.getPaper(); double width = fromCMToPPI(3.5); double height = fromCMToPPI(8.8); paper.setSize(width, height); paper.setImageableArea( fromCMToPPI(0.25), fromCMToPPI(0.5), width - fromCMToPPI(0.35), height - fromCMToPPI(1)); System.out.println("Before- " + dump(paper)); pf.setOrientation(PageFormat.PORTRAIT); pf.setPaper(paper); System.out.println("After- " + dump(paper)); System.out.println("After- " + dump(pf)); dump(pf); PageFormat validatePage = pj.validatePage(pf); System.out.println("Valid- " + dump(validatePage)); //Book book = new Book(); //book.append(new MyPrintable(), pf); //pj.setPageable(book); pj.setPrintable(new MyPrintable(), pf); try { pj.print(); } catch (PrinterException ex) { ex.printStackTrace(); } } } protected static double fromCMToPPI(double cm) { return toPPI(cm * 0.393700787); } protected static double toPPI(double inch) { return inch * 72d; } protected static String dump(Paper paper) { StringBuilder sb = new StringBuilder(64); sb.append(paper.getWidth()).append("x").append(paper.getHeight()) .append("/").append(paper.getImageableX()).append("x"). append(paper.getImageableY()).append(" - ").append(paper .getImageableWidth()).append("x").append(paper.getImageableHeight()); return sb.toString(); } protected static String dump(PageFormat pf) { Paper paper = pf.getPaper(); return dump(paper); } public static class MyPrintable implements Printable { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { System.out.println(pageIndex); int result = NO_SUCH_PAGE; if (pageIndex < 2) { Graphics2D g2d = (Graphics2D) graphics; System.out.println("[Print] " + dump(pageFormat)); double width = pageFormat.getImageableWidth(); double height = pageFormat.getImageableHeight(); g2d.translate((int) pageFormat.getImageableX(), (int) pageFormat.getImageableY()); g2d.draw(new Rectangle2D.Double(1, 1, width - 1, height - 1)); FontMetrics fm = g2d.getFontMetrics(); g2d.drawString("0x0", 0, fm.getAscent()); result = PAGE_EXISTS; } return result; } } } 

Ich bin mir einiger Inkonsistenzen mit dem PrintDialog bewusst, der tut, und wunderbaren Dingen, wenn Sie versuchen, Papiergrößen und Ränder zu spezifizieren, aber ehrlich gesagt, das ist eine Frage für einen anderen Tag.

Der Code, den ich gepostet habe, war in der Lage, zwei Etiketten nacheinander ohne Probleme auf meinem Dymo LabelWriter 400 Turbo zu drucken

AKTUALISIERT Sollte auch erwähnt werden, ich glaube, Sie haben PageFormat.setPaper im Wesentlichen vermisst

AKTUALISIERT mit Barbaque BarCode

Aus Dateibeispiel drucken ...

 Barcode b = BarcodeFactory.createCode128("Hello"); b.setResolution(72); File f = new File("mybarcode.png"); // Let the barcode image handler do the hard work BarcodeImageHandler.savePNG(b, f); . . . public static class PrintFromFile implements Printable { @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { int result = NO_SUCH_PAGE; if (pageIndex == 0) { graphics.translate((int)pageFormat.getImageableX(), (int)pageFormat.getImageableY()); result = PAGE_EXISTS; try { // You may want to rescale the image to better fit the label?? BufferedImage read = ImageIO.read(new File("mybarcode.png")); graphics.drawImage(read, 0, 0, null); } catch (IOException ex) { ex.printStackTrace(); } } return result; } } 

Direkt in den Grafikkontext drucken

 Barcode b = BarcodeFactory.createCode128("Hello"); b.setResolution(72); . . . public static class PrintToGraphics implements Printable { private Barcode b; private PrintToGraphics(Barcode b) { this.b = b; } @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { int result = NO_SUCH_PAGE; if (pageIndex == 0) { result = PAGE_EXISTS; int x = (int)pageFormat.getImageableX(); int y = (int)pageFormat.getImageableY(); int width = (int)pageFormat.getImageableWidth(); int height = (int)pageFormat.getImageableHeight(); graphics.translate(x, y); try { b.draw((Graphics2D)graphics, 0, 0); } catch (OutputException ex) { ex.printStackTrace(); } } return result; } } 

Last but not least, direkt aus dem Verzeichnis "examples" des Downloads

 public class PrintingExample { public static void main(String[] args) { try { Barcode b = BarcodeFactory.createCode128("Hello"); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(b); if (job.printDialog()) { job.print(); } } catch (Exception e) { e.printStackTrace(); } } }