gpt4 book ai didi

java - iText Java 到 PDF : how to output a JPanel without having to add it to the Container

转载 作者:行者123 更新时间:2023-11-30 11:35:08 25 4
gpt4 key购买 nike

我有一个 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 的方法是什么,而不必将其添加到容器中,或者至少不必使其可见?

非常感谢。

干杯!

最佳答案

  • 使用setSize 为组件提供绘制其内容的空间。如果您想获得推荐的尺寸,可以使用 getPreferredSize
  • 使用printAll 而不是paintprintAll 不是双缓冲的,也不会出现 NullPointerException(根据经验,在 Windows 下可能会发生)

关于java - iText Java 到 PDF : how to output a JPanel without having to add it to the Container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15269154/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com