使用iText将jcomponent导出为PDF

时间:2012-05-09 12:57:38

标签: java swing pdf itext jcomponent

我想导出我的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();

它工作得很好,但有两个大问题:方法tp.createGraphics已弃用(因此可能有更好的解决方案)如果swing组件非常大,它只打印在PDF的一个页面上

所以我需要的是一个“分页器”来帮助我创建A4大小的页面以便于打印。当jcomponent非常大时,没有缓冲区溢出...

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

官方Java"这样做的方法是让你的JComponent实现Pageable和/或Printable,这样它就知道如何将自己的部分绘制到页面上(由Graphics表示)。通常,in the Printable.print(Graphics graphics, PageFormat pageFormat, int pageIndex)方法,您可以将图形转换为某个常数Y因子乘以pageIndex,占标题,间隔符等...

这样它也可以打印成纸张。

PDF代码非常接近你所拥有的,你每页只做一次。您可以找到基于code on my blog here

earlier work by Gert-Jan Schouten here