比如:
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英寸的方块
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设置的不对?还是打印参数有问题?
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英寸的方块
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设置的不对?还是打印参数有问题?
这里是设定打印机为300dpi分辨率的,我的意思是,是不是300x300像素的方块用300dpi打印也是1inch x 1inch的
你这样设应该就是
1英寸300像素了
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();
}但是楼主这里上面定义的属性集是attr
下面用的是aset
不知道这里是发帖时的笔误还是程序原来就是这样呢?
这个好像有点问题吧?
PrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
attr.add(printerResolution);这个属性是用来搜索打印机用,即找出分辨率为300点的打印机。分辨率是打印机的固有属性,不能在打印时设置。属性有几种类型,一种是可以设置的打印方式,另一种是可以取得的固有属性。大概是这样。
PrinterResolution printerResolution = new PrinterResolution(300, 300, PrinterResolution.DPI);
这一行,改成600会使打印面积增加一倍,用尺量过之后发现约为105.8mm~4.167inch,也就是300x300像素在72dpi下应该打印的大小,可能该打印机默认为600dpi导致……很奇怪,应该说分辨率越大打印应该越小才对,为啥分辨率越高打印越大……搞不懂
java print api最终打印结果是只有72dpi的,需要精确打印的可以用graphic2D.Double对bufferedimage重新计算后输出……这个PrintResolution最终被我扔到一边……