2011-03-31 4 views
5

스윙 UI에 인쇄 기능을 추가하려고합니다.스윙 창을 인쇄하여 한 페이지에 멋지게 인쇄하는 방법

protected void print() { 
    PrinterJob job = PrinterJob.getPrinterJob(); 
    if(job.printDialog()){ 
     try { 
     job.setPrintable(new Printable() { 

      @Override 
      public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException { 
      if(pageIndex == 0){ 
       Graphics2D g2d = (Graphics2D)graphics; 
       g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

//    BufferedImage snapshot = AnimUtilities.createSnapshotOfFrame(ApplicationFrame.this, Transparency.TRANSLUCENT); 
//    double scaleX = pageFormat.getWidth()/snapshot.getWidth(); 
//    double scaleY = pageFormat.getHeight()/snapshot.getHeight(); 
//    
//    double scaleValue = Math.min(scaleX, scaleY); 
//    g2d.scale(scaleValue, scaleValue); 
//    g2d.drawImage(snapshot, 0, 0, snapshot.getWidth(), snapshot.getHeight(), ApplicationFrame.this); 
//    ApplicationFrame.this.print(g2d); 
       ApplicationFrame.this.printAll(g2d); 
       return PAGE_EXISTS; 
      } 
      return NO_SUCH_PAGE; 
      } 
     }); 
     job.print(); 
     } catch (PrinterException e) { 
     e.printStackTrace(); 
     } 
    } else { 
     System.err.println("Error printing"); 
    } 
    } 

무엇을 인쇄하는 종이에 아주 좋은 보인다는 점에서 정말 잘 작동 주석되지 않은 코드 : 나는 다음 시도했다. 그러나 JFrame은 용지보다 크기 때문에 그냥 잘라냅니다. 나는 또한 JFrame의 이미지를 생성하고 이미지를 적절하게 스케일링하여 페이지에 맞추고 같은 종횡비를 유지하는 주석 처리 된 코드를 시도했지만 스케일링으로 인해 화면상의 텍스트가 끔찍하게 보입니다. 이 advanced tutorial from Oracle을 찾았지만 화면을 여러 페이지로 나누는 방법을 알려줍니다. JFrame의 멋진 스크린 샷을 인쇄하고 싶습니다. JFrame을 자르지 않거나 스케일링으로 인해 아티팩트가 발생하지 않으면 어떻게 인쇄 할 수 있습니까?

답변

4

RenderingHints의 혜택을받을 수 있습니다. 나는 특히 KEY_ANTIALIASING, KEY_TEXT_ANTIALIASINGKEY_FRACTIONALMETRICS을 보았습니다.

편집 :

RenderingHints.KEY_INTERPOLATION도 돕고, AffineTransformOp.TYPE_BICUBIC는 또 다른 대안이다.

+0

g2d.setRenderingHint (RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC)를 추가하고 앤티 앨리어싱을 켜고 크기 조정 문제를 수정했습니다. 감사. 나는 여전히 다른 문제를 가지고있다. 그러나 그것을 이해할 수 없다면 다른 문제를 위해 그것을 구제 할 것이다. –

+0

우수! ['AffineTransformOp'] (http://download.oracle.com/javase/6/docs/api/java/awt/image/AffineTransformOp.html)도 바이 큐빅 보간법을 얻는 또 다른 방법입니다. – trashgod

관련 문제