2

我有一个 Java 应用程序,它有一个 JPanel,其中包含我想要输出到 PDF 的信息(使用 iText)。唯一的转折是我需要在 PDF 上给这个 JPanel 一个不同的格式。由于 JPanel 显示在 GUI 上,因此我无法将其更改为我希望在 PDF 上显示的方式,因为这会更改显示的 JPanel。所以我要做的是用我的 PDF 格式创建一个新的 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 回答