2011-09-23 88 views
3

我試圖使用以下代碼打印圖像,但文檔僅保留在打印作業隊列中,並拒絕打印。在(窗口)打印作業隊列,我得到: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

回答

2

我剛跑過一個快速測試,它對我來說工作正常。我能夠打印一個PNG圖像。

您的打印機可能有問題。

是否嘗試使用Word的打印選項打印Word文檔?

是否有多臺打印機分配給您的機器? 你可以嘗試重新啓動打印機嗎? 重新啓動你的機器?

您可以實現一個打印對話框打開。這樣你可以選擇打印機。 看到這裏的鏈接。該代碼展示瞭如何在擺動中打開打印對話框。

public void printPage() throws PrinterException 
     { 
      PrinterJob job = PrinterJob.getPrinterJob(); 
      boolean ok = job.printDialog(); 
      if (ok) { 
       job.setJobName("TEST JOB"); 
       job.setPrintable(this); 
       job.print(); 
      } 
     } 

這樣您可以確保打印機已被正確選擇。

,你可以用它來確保圖像不會被扭曲 代替此行

g2.drawImage(bufferedImage, 0, 0, (int) pf.getWidth(), (int) pf.getHeight(), null); 

使用下面的行中的內部類

g2.drawImage(img, 0, 0, img.getWidth(null), img.getHeight(null), null); 
+0

現在要嘗試的另一件事。如果你嘗試一個大的圖像會發生什麼? – David

+0

@David我在編輯我的答案。我意識到,大的圖像會從頁面中消失。直接打印圖像。在代碼中你已經調用了兩次「drawImage」。將drawImage直接應用到您傳遞給方法 –

+0

的圖像仍然不起作用:(我修改了我的問題 – David