2013-06-09 1 views
1

자바를 사용하여 설문 조사를하고 있으며 인쇄용 버전도 갖고 싶습니다. 그러나 일부 질문은 볼 수있는 영역 밖에 있습니다 (JScrollPane에 있음). 아래는 인쇄용 코드이지만 JFrame의 가시 부분 만 인쇄합니다. 제발 누군가 도와 줄 수 있니? 사전에JFrame의 PDF를 만드는 방법은 무엇입니까 (표시되지 않은 JScrollPane 부품 포함)?

private void printFrame(){ 
    PrinterJob printerJob = PrinterJob.getPrinterJob(); 

    printerJob.setPrintable(this); 

    // pop up a dialog box for the end user to fine tune the options. 
    if (printerJob.printDialog()) 
     { 
     try 
      { 
      // render the component onto the printer or print queue. 
      printerJob.print(); 
      } 
     catch (PrinterException e) 
      { 
      System.out.println("Error printing: " + e); 
      } 
     } 
    } 

public int print(Graphics gr, PageFormat pageFormat, int pageIndex){ 
     if (pageIndex > 0) 
      { 
      return Printable.NO_SUCH_PAGE; 
      } 

     Graphics2D g2d = (Graphics2D)gr;  
     g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

     double xScale = 0.33; 
     double yScale = 0.33; 

     g2d.scale(xScale, yScale); 

     paint(g2d); 

     return Printable.PAGE_EXISTS; 
    } 

감사합니다, D

+0

JScrollPane의 스크롤 기능을 제공하거나 스크롤하지 않고 두 번째보기를 만들 필요가 없도록 UI를 재구성해야합니다. – MadProgrammer

답변

1

감사합니다. Arthur. 사람이 위의 대한 최적화가있는 경우

public void PrintFrameToPDF(File file) { 
    try { 
     Document d = new Document(); 
     PdfWriter writer = PdfWriter.getInstance(d, new FileOutputStream(file)); 
     d.open(); 

     PdfContentByte cb = writer.getDirectContent(); 
     PdfTemplate template = cb.createTemplate(PageSize.A4.getWidth(),PageSize.A4.getHeight()); 
     cb.addTemplate(template, 0, 0); 

     Graphics2D g2d = template.createGraphics(PageSize.A4.getWidth(),PageSize.A4.getHeight()); 
     g2d.scale(0.4, 0.4); 

     for(int i=0; i< this.getContentPane().getComponents().length; i++){ 
      Component c = this.getContentPane().getComponent(i); 
      if(c instanceof JLabel || c instanceof JScrollPane){ 
       g2d.translate(c.getBounds().x,c.getBounds().y); 
       if(c instanceof JScrollPane){c.setBounds(0,0,(int)PageSize.A4.getWidth()*2,(int)PageSize.A4.getHeight()*2);} 
       c.paintAll(g2d); 
       c.addNotify(); 
      } 
     } 


     g2d.dispose(); 

     d.close(); 
    } catch (Exception e) { 
     System.out.println("ERROR: " + e.toString()); 
    } 
} 

, 나는 당신에게서 듣고 싶어요 : 나는 지금 함께 일하고 있습니다. 도와 주셔서 감사합니다! D

관련 문제