【问题标题】:iText 7 column widths why do these not fit?iText 7 列宽为什么这些不适合?
【发布时间】:2017-05-16 15:37:44
【问题描述】:

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

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

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

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

我以为我做到了,但我最近的尝试产生了“元素不适合当前区域”错误。这是我的定义

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

这些数字加起来是 71,那么为什么不合适呢?他们需要精确地加到 100,还是我完全走错了“加到 100”的想法?

【问题讨论】:

  • 他们不必加起来。例如参见tables in iText 7 教程中的第二个示例。我不明白你的问题。我会尝试重现这个问题,但你没有给我太多源代码。

标签: itext column-width


【解决方案1】:

您是否为整个表格定义了宽度?

这是我尝试过的:

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); 添加到您的代码中。问题应该会消失。

【讨论】:

  • 感谢您的回复。我以前有 htable.setWidthPercent(100) 但在我的一次编码迭代中它被删除了。这就解释了为什么它以前工作过然后又坏了。我真的很喜欢 itext——在上周五之前,我对构建 PDF 一无所知。新年快乐!
  • 还有一个问题——在 itext 5 个示例之一中,我发现可以选择以单位为单位的硬编码宽度。 itext 7中不再存在吗?还是以不同的方式实施?我会使用它,但我很高兴能更好地理解这个概念。
  • 我们不再用绝对值来设置单独列的宽度,但是Table类有一个setWidth()方法来设置整个表格的宽度。 UnitValue 可以表示为百分比(相对)或点(绝对)。
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 2017-06-12
相关资源
最近更新 更多