当前位置: 代码迷 >> J2SE >> 怎么将用g2d绘制的BufferedImage实例精确打印,求教
  详细解决方案

怎么将用g2d绘制的BufferedImage实例精确打印,求教

热度:89   发布时间:2016-04-24 00:52:13.0
如何将用g2d绘制的BufferedImage实例精确打印,求教
比如:

Java code
    BufferedImage img = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);    Graphics g = img.createGraphics();    g.setColor(Color.BLACK);    g.fillRect(0, 0, 300, 300);


然后,我希望能在打印机上输出1英寸的方块

Java code
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.JPEG;    ByteArrayOutputStream outstream = new ByteArrayOutputStream();    try {        ImageIO.write(img, "jpg", outstream);    }    catch (IOException e) {        e.printStackTrace();    }    byte[] buf = outstream.toByteArray();    InputStream stream = new ByteArrayInputStream(buf);    Doc myDoc = new SimpleDoc(psStream, psInFormat, null);    PrinterResolution printerResolution = new PrinterResolution(300, 300, PrinterResolution.DPI);    PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();    attr.add(printerResolution);    attr.add(PrintQuality.HIGH);    PrintService services = PrintServiceLookup.lookupDefaultPrintService();    DocPrintJob job = services.createPrintJob();    try {        job.print(myDoc, aset);    }    catch (PrintException pe) {        pe.printStackTrace();    }


这段代码打印的结果是占据A4纸中央的一个大约2英寸的方块

这种结果是因为图片转换造成的?还是图片的ppi设置的不对?还是打印参数有问题?

------解决方案--------------------
根据API说明上看 
你这样设应该就是
1英寸300像素了
------解决方案--------------------
这方面的不懂,帮顶吧。祝你好运....
------解决方案--------------------
PrinterResolution printerResolution = new PrinterResolution(300, 300, PrinterResolution.DPI);
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
attr.add(printerResolution);

这个属性是用来搜索打印机用,即找出分辨率为300点的打印机。分辨率是打印机的固有属性,不能在打印时设置。

属性有几种类型,一种是可以设置的打印方式,另一种是可以取得的固有属性。

大概是这样。



------解决方案--------------------
楼主敬业!
------解决方案--------------------
楼主敬业