我有麻烦打印到标签打印机,代码在一个打印4“标签”,任何帮助(附加标签的图片)
Code Bellow打印给兄弟QL-500标签打印机.它打印到3.5“by 1.1”标签
如果有人可以帮助我更好地了解代码,这也是很棒的
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,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 < 80; y = y + 36) { int posOnPage = 4; // BottomRight,TopRight,BottomLeft,TopLeft if (x > 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(),3)); value = this.getValue(1,id); g.drawString(" " + value,y + 4); // ID g.setFont(new Font(g.getFont().getFontName(),Font.BOLD,7)); value = this.getValue(2,id); g.drawString("" + value,y + 10); // label g.setFont(new Font(g.getFont().getFontName(),5)); value = this.getValue(3,id); g.drawString(" " + value,y + 16); // date g.setFont(new Font(g.getFont().getFontName(),Font.PLAIN,3)); value = this.getValue(4,y + 20); } } return PAGE_EXISTS; } else { return NO_SUCH_PAGE; } } public int getPageNumbers() { return 5; } } enter code here
这是什么打印 –
解决方法
哇,我不能告诉你我喜欢用Java打印多少东西,当它的工作,这是伟大的…
.
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,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",fm.getAscent()); result = PAGE_EXISTS; } return result; } } }
如果您尝试并指定纸张尺寸和页边距,我知道PrintDialog有一些不一致的情况,而且老实说这是另一天的问题.
我发布的代码能够在Dymo LabelWriter 400 Turbo上相继打印两个标签,而不会出现问题
更新
还应该提到,我认为你基本上缺少PageFormat.setPaper
更新与Barbaque BarCode
从文件示例中打印…
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,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,null); } catch (IOException ex) { ex.printStackTrace(); } } return result; } }
直接打印到图形上下文
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,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); } catch (OutputException ex) { ex.printStackTrace(); } } return result; } }
最后但并非最不重要的是,直接从“examples”目录下载
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(); } } }