gpt4 book ai didi

java - 使用 iText 将 jcomponent 导出为 PDF

转载 作者:行者123 更新时间:2023-11-30 04:48:00 24 4
gpt4 key购买 nike

我想将我的 jComponent(自定义 PaintComponent 方法,绘制大量文本和线条、小图像(一种小文字应用程序))导出为 PDF

我的组件是“bill”

我为此使用的方法(有效,但某些方法已弃用)是:

       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 已被弃用(因此可能有更好的解决方案)和如果 swing 组件非常大,则它仅打印在 PDF 的一页上.

所以我需要一个“页面分割器”来帮助我创建 A4 大小的页面以便打印。当然,当 jcomponent 很大时,不会出现缓冲区溢出...

有人可以帮忙吗?

最佳答案

执行此操作的“官方 Java”方法是让您的 JComponent 实现 Pageable 和/或 Printable,以便它知道如何将自身的一部分绘制到页面上(由 Graphics 表示)。通常,在 Printable.print(Graphicsgraphics, PageFormat pageFormat, int pageIndex) 方法中,您可以通过某个常数 Y 因子乘以 pageIndex 来转换图形,并考虑标题、间隔符等...

这样它也可以打印到纸上。

PDF 代码与您所拥有的非常接近,您只需每页执行一次即可。您可以找到code on my blog here ,基于 earlier work by Gert-Jan Schouten here

关于java - 使用 iText 将 jcomponent 导出为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516633/

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