日期:2014-05-20  浏览次数:20945 次

如何将用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点的打印机。分辨率是打印机的固有属性,不能在打印时设置。

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

大概是这样。



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