iText 7 列宽为什么不适合?

iText 7 column widths why do these not fit?

我是 iText 的新手,直接进入了 iText 7,但发现在我的 table 上设置列宽非常具有挑战性。显然有一些基本的东西我没有得到。

在网上寻找答案时,我发现一些基于 itext 5 的答案似乎与 itext 7 无关(硬编码固定宽度)。 iText 7 的东西似乎假设了我没有的知识! "relative column widths" -- 这是什么意思?这些数字加起来应该是 100 吗?具有 2 列或 4 列的简单示例很有意义,但我很难将其转换为 7 列 table.

我有一个有 7 列的 table。第 1、3、5 列应该比较窄,它们只是标签。第 7 列可以占用 space 可用的任何内容。例如:

Col1  Col2         Col3  Col4         Col5      Col6        Col7 
CMS#: C34827284    Date: 12/5/16      End Date: 12/6/16     approved

我以为我已经成功了,但我最近的尝试产生了 "Element does not fit current area" 个错误。这是我的定义

Table htable = new Table(new float[] {3, 8, 5, 10, 5, 10, 30});

这些数字加起来是 71,为什么不合适?他们需要恰好加到 100 还是我的 "adds up to 100" 想法完全走错了路?

您是否为 table 整体定义了宽度?

这是我试过的:

public void createPdf(String dest) throws IOException {
    //Initialize PDF writer
    PdfWriter writer = new PdfWriter(dest);

    //Initialize PDF document
    PdfDocument pdf = new PdfDocument(writer);

    // Initialize document
    Document document = new Document(pdf, PageSize.A4);

    // Create table
    Table htable = new Table(new float[] {3, 8, 5, 10, 5, 10, 30});
    htable.setFontSize(8);
    htable.setWidthPercent(100);
    htable.addHeaderCell(new Cell().add("Col1"));
    htable.addHeaderCell(new Cell().add("Col2"));
    htable.addHeaderCell(new Cell().add("Col3"));
    htable.addHeaderCell(new Cell().add("Col4"));
    htable.addHeaderCell(new Cell().add("Col5"));
    htable.addHeaderCell(new Cell().add("Col6"));
    htable.addHeaderCell(new Cell().add("Col7"));
    htable.addCell(new Cell().add("CMS#"));
    htable.addCell(new Cell().add("C34827284"));
    htable.addCell(new Cell().add("Date:"));
    htable.addCell(new Cell().add("12/5/16"));
    htable.addCell(new Cell().add("EndDate:"));
    htable.addCell(new Cell().add("12/6/16"));
    htable.addCell(new Cell().add("Approved"));
    // Add the table
    document.add(htable);
    // Close the document
    document.close();
}

结果显示在这里:

请注意,我减小了字体大小以避免更多文本按照 CMS# 的拆分方式拆分。

尝试将 htable.setWidthPercent(100); 添加到您的代码中(如果您尚未这样做)。问题应该消失了。