2012-05-09 9 views
1

同上私のコンポーネントは、「法案であるPDFに私のJComponent(テキストや線の多くを描画するカスタムpaintcomponent方法、小さな画像の小さなワードアプリケーションの(種類))をエクスポートする輸出JComponentの

が好き

 com.itextpdf.text.Rectangle r = new com.itextpdf.text.Rectangle(0,0,bill.getWidth(),bill.getHeight()); 

     Document document = new Document(r); 

     try { 
      PdfWriter writer; 
      writer = PdfWriter.getInstance(document, new FileOutputStream(f)); 
      document.open(); 
      PdfContentByte cb = writer.getDirectContent(); 
      PdfTemplate tp = cb.createTemplate(bill.getWidth(), bill.getHeight()); 
      Graphics2D g2d = tp.createGraphics(bill.getWidth(), bill.getHeight(), new DefaultFontMapper()); 

      bill.addNotify(); 
      bill.validate(); 

      bill.paint(g2d); 
      g2d.dispose(); 

      cb.addTemplate(tp, 0, 0); 
     } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 

     document.close(); 

は、それは非常によく動作しますが、二つの大きな問題があります:「

私は(これは動作しますが、いくつかの方法が推奨されていません)このために使用する方法はあるメソッドのtp.createGraphicsが廃止されました(だから、より良い解決策があるかもしれない)とスイングコンポーネントがvの場合それはPDFの1ページだけに印刷されます。

私が必要とするのは、印刷用にA4サイズのページを作成するのに役立つ「ページ分割」です。もちろん、jcomponentが非常に大きいときにバッファオーバーフローがなくても...

誰でも助けてくれますか?

答えて

2

これを行うための「公式Java」の方法は、JComponentがPageableおよび/またはPrintableを実装して、ページの一部(Graphicsで表される)に描画する方法を知るためです。通常、in the Printable.print(Graphics graphics, PageFormat pageFormat, int pageIndex)メソッドを使用すると、グラフィックスをある一定のY因子倍、pageIndex、ヘッダー、スペーサーなどを考慮して変換します。

このようにしても紙に印刷できます。

PDFコードはご自分のものに非常に近いですが、ページごとに1回だけ行います。 earlier work by Gert-Jan Schouten here

に基づいて code on my blog hereを見つけることができます