我在使用默认打印机打印jpeg文件时卡住了。在我的程序中,当我从文件夹中选择图像时,我需要使用打印机默认设置(纸张尺寸,边距,方向)进行打印。
目前我得到了这个:
PrintService printService = PrintServiceLookup.lookupDefaultPrintService();
final BufferedImage image = ImageIO.read(new File("car.jpg"));
PrinterJob printJob = PrinterJob.getPrinterJob();
printJob.setPrintService(printService);
printJob.setPrintable(new Printable(){
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException{
if (pageIndex == 0) {
graphics.drawImage(image, 0, 0, (int)pageFormat.getWidth(), (int)pageFormat.getHeight(), null);
return PAGE_EXISTS;
else return NO_SUCH_PAGE;
}
}
printJob.print();
我的打印机现在的尺寸默认设置是:10 x 15厘米(4 x 6英寸) 但是当我设置程序打印给定图像时,它只显示纸张的一小部分。
请帮帮我。
修改
感谢大家的帮助,我设法找到另一位用户在Borderless printing
发布的答案答案 0 :(得分:4)
确保您首先翻译Graphics
上下文以适应可想象的区域......
g2d.translate((int) pageFormat.getImageableX(),
(int) pageFormat.getImageableY());
接下来,请确保您使用imageableWidth
的{{1}}和imageableHeight
PageFormat
而不是double width = pageFormat.getImageableWidth();
double height = pageFormat.getImageableHeight();
/ width
属性。其中许多事情都是从不同的背景下翻译出来的......
height
graphics.drawImage(image, 0, 0, (int)width, (int)height, null);
在页面方向的上下文中返回页面大小
打印几乎假设dpi为72(不要强调,打印API可以处理更高的分辨率,但核心API假设72dpi)
这意味着10x15cm的页面应转换为getImageableWidth/Height
像素。您可以使用283.46456664x425.19684996
验证此信息,并将System.out.println
的结果转储到控制台。
如果您获得不同的设置,Java可能会覆盖默认页面属性
例如......
你有两个选择......
显示getImageableWidth/Height
并确保选择了正确的页面设置
PrintDialog
只需手动设置纸张/页面值...
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new PrinterResolution(300, 300, PrinterResolution.DPI));
aset.add(new MediaPrintableArea(0, 0, 150, 100, MediaPrintableArea.MM));
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(new PrintTask()); // You Printable here
if (pj.printDialog(aset)) {
try {
pj.print(aset);
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
答案 1 :(得分:0)
看起来您正在使用基于PageFormat的尺寸打印图像,而不是实际图像的尺寸,您的drawImage()方法应该看起来像这样
graphics.drawImage(image, 0, 0, image.getWidth(), image.getHeight(), null)