【问题标题】:iText: Table(com.​lowagie.​text) created only occupies 80% of the entire page , How to make it utilise the entire pageiText:创建的表格(com.​lowagie.​text)只占整个页面的80%,如何让它利用整个页面
【发布时间】:2011-03-11 19:42:52
【问题描述】:

我正在编写以下代码以创建一个包含表格的 PDF 文件。

        Document document = new Document(PageSize.A4, 20, 20, 20, 80);
        Font myfont = new Font(FontFactory.getFont(FontFactory.COURIER_BOLD, 13, Font.NORMAL));
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(request.getRealPath("/") + "SAMPLE.pdf"));

        document.open();
        Table table = new Table(2);
        Cell c2 = new Cell();

        int[] widths = {8, 150}; //Tried different values, but no change
        table.setBorder(Rectangle.BOX);
        table.setAlignment(Element.ALIGN_LEFT);
        table.setSpacing(0);
        table.setPadding(0);
        table.setTableFitsPage(true); //Tried with 'false', even removed it, but no change
        table.setWidths(widths);

        c2 = new Cell(new Paragraph("1.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        c2 = new Cell(new Paragraph("2.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        c2 = new Cell(new Paragraph("3.     ", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);
        c2 = new Cell(new Paragraph("TEST DATA", myfont));
        c2.setBorder(Rectangle.NO_BORDER);
        table.addCell(c2);

        document.add(table);
        document.close();

但创建的文件包含一个占页面约 80-85% 的表格。我希望它利用整个页面。

我尝试对代码进行一些调整,例如将 table.setTableFitsPage(true); 更改为 table.setTableFitsPage(false);,甚至尝试将其删除。 也随着分配的宽度而改变。但徒劳无功,因为在所有情况下,它只给了我一个表格仅占页面 80-85% 的文件。

我是否缺少要添加到代码中的内容,或者是否存在阻止表格占用 100% 页面的属性。

当内容很大时,它会产生问题,因为我最终会得到很长的表格,页面上的空间仍然未被占用。

附上此处生成的实际 PDF 文件的屏幕截图!

Screen-shot of the PDF generated

【问题讨论】:

  • 您使用的是哪个版本的 iText?
  • 我正在使用 itext-2.1.5.jar
  • 在这种情况下,我首先建议升级到最新版本(目前为 5.0.6)。前往itextpdf.com/download.php 进行下载。与您使用的版本相比,最新版本将包含许多改进和错误修复,此外,您更有可能从此类网站获得支持(因为使用最新版本的人比使用非常旧版本的人更多)图书馆)。
  • 嗯,支持表格的最后一个版本是 2.17,之后 itext 直接跳转到 5.0.x 版本。 5.0.0 版本删除表格和其他与表格相关的功能...在itext (History) of 5.0.0 处查看它,您会发现它在最后几行中提到....这就是我工作的原因在 2.1.5 版本中......

标签: java pdf itext


【解决方案1】:

您应该改写表格代码以使用PdfPTable。你可以找到一些examples of its use online。 iText in Action 2nd ed 的整个第 4 章都是关于表格,准确地说是 PdfPTables。

大量示例代码。享受吧。

【讨论】:

  • 好吧,我在发布这个问题之前尝试过使用 PdfPTable,但即使这样也没有帮助,后来我随便看看 PdfPTable 的一个例子@ 987654323@,我看到当我们将属性 table.setWidthPercentage(100f); 添加到代码中时,表格使用 100% 的页面,之后只是尝试使用“表格”并将其添加到我的代码 table.setWidth(100f) 中,并将宽度设为相对于 100(即所有值的总和为 100),这就成功了。
  • 由于您一直与 iText api 密切相关,我想问一下,为什么从 iText 5.x.x 版本中删除了表格及其其他功能? 我想表格结构是 iText 的重要组成部分,并且在创建 PDf 时经常使用表格。
  • CLASS Table 已被删除。 PdfPTable 更加灵活/强大。改用它。并且不需要通用的“表格”,因为这些天我们只输出到 PDF。不,我们不需要通用的很多其他东西,但是大多数实体在 .pdf 包中的某个地方没有更好的替代品。表做到了。
  • PS:我认为我们应该弃用它而不是完全取消它,但这不是我的使命。
【解决方案2】:

改用 PdfPTable 类,您可以设置整个表格的列宽。让它跨越整个页面可以通过构造一个

float delta = document.getPageSize().getWidth() / numberOfColumns;
// add delta numberOfColumn times
PdfPTable table = new PdfPTable(new float[] {delta, delta, delta, delta });
table.setWidthPercentage(100f);

在构造函数中传递的宽度决定了给定列相对于整个表格宽度的空间大小。

【讨论】:

  • 谢谢……但我认为这也是马克的建议,没有必要重复……无论如何……我已经检查过了,我也通过使用解决了这个问题简单的 Table 本身....在上面的评论中添加了我是如何做到的....请检查...
猜你喜欢
  • 2017-04-03
  • 2022-10-01
  • 2020-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
相关资源
最近更新 更多