2011-09-23 182 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