2011-09-23 6 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, 캐논 프린터)와 함께 발생합니다. 하드웨어는 화면에 "준비 중"이라는 메시지를 영원히 보여 주며 모든 잉크를 낭비한다고 생각합니다. 확실하지 않습니다. 그렇다면이 코드는 테스트하는 데 비용이 많이 듭니다 ....

워드 문서 또는 다른 방법으로 인쇄 할 때 이러한 프린터가 문제가되지 않습니다.

편집 : 누군가가 소프트웨어 프린터를 제안 할 수 있습니까?

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"를 두 번 호출했습니다. –

+0

메서드로 전달 된 이미지에 직접 drawImage를 적용해도 문제가 해결되지 않습니다. (내 질문 수정. – David

관련 문제