2

PDFに出力したい情報を含むJPanelを持つJavaアプリケーションがあります(iTextを使用)。唯一のひねりは、この JPanel に PDF で別の書式を設定する必要があることです。JPanel は GUI に表示されるため、表示される JPanel が変更されるため、PDF に表示したい方法に変更することはできません。そこで、PDF フォーマットで新しい JPanel を作成し、元の JPanel の情報を入力してから、この新しい JPanel を PDF に出力します。コンテナーに追加された場合にのみ、この JPanel を PDF に出力できることを除いて、これまでのところ問題はありません。この新しい JPanel を見せたくないからです。見えないように設定しようとしましたが、この方法でも出力されません。

新しい JPanel:

JPanel myFormattedPanel = new JPanel(); {
myFormattedPanel.setLayout(new GridLayout(2, 3, 0, 2));
myFormattedPanel.setBackground(Color.WHITE);

(...)

getContentPane().add(myFormattedPanel); //How to not need this??

PDFへの出力:

Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, out);
document.open();

PdfContentByte cb = writer.getDirectContent();

float width = PageSize.A4.getWidth();
float height = PageSize.A4.getHeight() / 2;

PdfTemplate resultsPanelPdfTemplate = cb.createTemplate(width, height);
Graphics2D g2d2 = new PdfGraphics2D(resultsPanelPdfTemplate, width, height);
myFormattedPanel.paint(g2d2);
g2d2.dispose();
cb.addTemplate(resultsPanelPdfTemplate, 0, 0);

document.close();

基本的に、iTextを使用してJPanelをコンテナに追加せずに、または少なくとも可視化することなくPDFに出力する方法は何ですか?

よろしくお願いします。

乾杯!

4

1 に答える 1

1
  • setSizeコンポーネントにそのコンテンツを描画するためのスペースを与えるために使用します。getPreferredSize推奨サイズを取得したい場合に使用できます
  • printAllの代わりに使用しpaintます。printAllダブルバッファリングされておらず、NullPointerException (経験から Windows で発生する可能性があります) の影響を受けません。
于 2013-03-07T11:03:21.723 に答える