1

jcomponent (大量のテキストや線、小さな画像 (小さな単語アプリケーションのようなもの) を描画するカスタム paintcomponent メソッド) を PDF にエクスポートしたいと考えています。

私のコンポーネントは「法案」です

これに使用する方法(これは機能しますが、一部の方法は非推奨です)は次のとおりです。

       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();

これは非常にうまく機能しますが、2 つの大きな問題があります。メソッド tp.createGraphics は推奨されていません (したがって、より良い解決策があるかもしれません)。そして、swing コンポーネントが非常に大きい場合、PDF の 1 ページだけに印刷されます。

だから私が必要としているのは、A4サイズのページを印刷しやすいように作成するのに役立つ「ページスプリッター」です。もちろん、jcomponentが非常に大きい場合、バッファオーバーフローはありません...

誰でも助けることができますか?

4

1 に答える 1

2

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

そうすれば、紙に出力することもできます。

PDFコードはあなたが持っているものに非常に近く、ページごとに1回行うだけです. Gert-Jan Schouten による以前の作業に基づいたコードは、こちらの私のブログで見つけることができます。

于 2012-05-09T16:58:43.540 に答える