在几年中没有碰到Java,但我被要求做一些Java代码打印图片和一些文本多次。 它可以在Mac上正常工作,但从Windows机器打印出的打印输出被裁剪。 图像是他的资源,在300DPI约8×10。
public class printClass implements Printable { BufferedImage image; private URL url; printClass(URL url1) { url = url1; } public int print(Graphics g, PageFormat pf, int page) throws PrinterException { Graphics2D g2d = (Graphics2D) g; g2d.translate(pf.getImageableX(), pf.getImageableY()); AffineTransform theAT = g2d.getTransform(); double theScaleFactor = (72d / 300d); Font font = new Font("Arial", Font.PLAIN, 10); Font font2 = new Font("Arial", Font.PLAIN, 5); g2d.setFont(font); if (page < 10) { g2d.scale(theScaleFactor, theScaleFactor); g2d.drawRenderedImage(image, null); g2d.setTransform(theAT); return PAGE_EXISTS; } else { return NO_SUCH_PAGE; } }public void init() { try { img = ImageIO.read(url); image = (BufferedImage) img; } catch (IOException e) { System.out.println("Error: " + e); } PrinterJob job = PrinterJob.getPrinterJob(); PrinterResolution pr = new PrinterResolution(300, 300, PrinterResolution.DPI); PrintRequestAttributeSet attrib = new HashPrintRequestAttributeSet(); PageFormat pFormat = job.getPageFormat(attrib); Paper paper = pFormat.getPaper(); paper.setImageableArea(0.0,0.0,pFormat.getPaper().getWidth(), pFormat.getPaper().getHeight()); pFormat.setPaper(paper); attrib.add(pr); attrib.add(PrintQuality.HIGH); job.setPrintable(this); boolean ok = job.printDialog(); if (ok) { try { job.print(attrib); } catch (PrinterException ex) { } } } }
该URL是正在打印的图像。 这是Java小程序的一部分。 此代码中缺less文本添加部分,但它如下所示:
g.drawString(markUpText, x, y);
一如既往的感谢你。
好吧,我解决了我自己的问题。 我没有将打印格式包含在打印中。
job.setPrintable(this,pFormat);
这会导致一些其他有趣的问题,包括Windows中的打印质量和位置以及Mac中的位置。
我通过从属性中删除DPI和PrintQuality.HIGH来解决质量问题。
我在打印功能中用下面的代码解决了位置问题:
g2d.translate(pf.getImageableX() + 30, pf.getImageableY()+30);
我也切换到新的副本属性,以便我可以轻松地控制他们想要打印的副本数量。
仍然不知道这是否是最好的方式去这个,但它的作品!