我試圖使用以下代碼打印圖像,但文檔僅保留在打印作業隊列中,並拒絕打印。在(窗口)打印作業隊列,我得到:Java - 無法打印圖像(至紙張/打印機)
DocumentName:打印圖像狀態: [沒什麼] 頁:1,尺寸: 2.1MB。
使用相同打印機(字等)的其他應用程序不會發生這種情況。
任何人都可以好心地告訴我我的錯誤在哪裏?謝謝。
public static void main(String[] args) {
//new Painter();
MediaTracker tracker = new MediaTracker(new JPanel());
try {
Image img = ImageIO.read(new File(
"C:\\Users\\David\\Desktop\\print.jpg"));
tracker.addImage(img, 1);
tracker.waitForAll();
print(img);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static void print(final Image img) {
PrinterJob printjob = PrinterJob.getPrinterJob();
printjob.setJobName("Print");
ImgPrinter printable = new ImgPrinter(img);
try {
System.out.println("Printing.");
printable.printPage();
} catch (PrinterException ex) {
System.out.println("NO PAGE FOUND." + ex);
}
}
private static class ImgPrinter implements Printable {
Image img;
public ImgPrinter(Image img) {
this.img = img;
}
public int print(Graphics pg, PageFormat pf, int pageNum) {
if (pageNum != 0) {
return Printable.NO_SUCH_PAGE;
}
//BufferedImage bufferedImage = new BufferedImage(img.getWidth(null),
//img.getHeight(null), BufferedImage.TYPE_INT_RGB);
//bufferedImage.getGraphics().drawImage(img, 0, 0, null);
Graphics2D g2 = (Graphics2D) pg;
g2.translate(pf.getImageableX(), pf.getImageableY());
g2.drawImage(img, 0, 0, img.getWidth(null), img.getHeight(null), null);
return Printable.PAGE_EXISTS;
}
public void printPage() throws PrinterException {
PrinterJob job = PrinterJob.getPrinterJob();
boolean ok = job.printDialog();
if (ok) {
job.setJobName("TEST JOB");
job.setPrintable(this);
job.print();
}
}
}
截圖的問題:
這種情況與硬件和軟件的打印機(XPS作家,CutePDF,佳能打印機)。硬件永遠在屏幕上顯示「準備......」,我認爲它浪費了所有的墨水,我不確定。如果是這樣,這段代碼的測試費用很高......
這些打印機在從Word文檔或其他文檔打印時都沒有問題。
編輯:有人可以推薦他或她已經成功使用的軟件打印機嗎?
Click here for the Image I am trying to print。
Click here to see the print queue。
現在要嘗試的另一件事。如果你嘗試一個大的圖像會發生什麼? – David
@David我在編輯我的答案。我意識到,大的圖像會從頁面中消失。直接打印圖像。在代碼中你已經調用了兩次「drawImage」。將drawImage直接應用到您傳遞給方法 –
的圖像仍然不起作用:(我修改了我的問題 – David