如何在itext7中创建一个具有可变列数的表?

时间:2017-03-29 17:36:46

标签: itext7

我尝试创建一个可能有一到六列的表,具体取决于数据。如果列中没有任何行中的任何条目,则不应显示该列。因此,一个文档可能会显示名称,构建和电子邮件列,下一个文档可能会显示名称,电子邮件,电话和办公室列。例如,不应显示粉红色轮廓的空列:

enter image description here

我发现创建表的唯一方法是在构造函数中定义列。我尝试将列宽设置为零,但是没有达到预期的结果。创建表对象后可以添加/删除列吗?

C#

    Table table = new Table( new UnitValue[]
    {
        new UnitValue( UnitValue.PERCENT, 20F ),
        new UnitValue( UnitValue.PERCENT, columns.ContainsKey("Building") ? 20F : 0F ),     
        new UnitValue( UnitValue.PERCENT, columns.ContainsKey("Email") ? 15F : 0F ),
        new UnitValue( UnitValue.PERCENT, columns.ContainsKey("Telephone") ? 10F : 0F ),
        new UnitValue( UnitValue.PERCENT, columns.ContainsKey("Office") ? 10F : 0F ),
        new UnitValue( UnitValue.PERCENT, columns.ContainsKey("Note") ? 25F : 0F )
    }, true );

1 个答案:

答案 0 :(得分:0)

iText团队正在慢慢地,有条不紊地弃用在表格中设置列的所有流行方式!我怀疑是阴谋,但不能证明它; - )

更严重的是,了解最近这些决定背后的理念会很好。是否有计划提供一套完整的新API来处理这个问题?我们应该等待一些好消息,还是现在开始抱怨?

关于吉姆的问题,他被困在一块岩石和一块坚硬的地方之间。 Alexey是正确的,在创建表之前应该设置UnitValues,但是这段代码仍然假设扩展列以填充可用空间。这是旧的基于float的Table构造函数的工作方式,并且刚刚被弃用。这引出了如何处理列宽度百分比的问题,并且在未来的版本中既没有记录也没有保证保持不变。如果我创建一个包含两列的表,每列25%,也许我希望一半表是空白的。我不认为iText的工作是重新解释我的价值观,或者如果我犯了错误就试着“修理”它们。

这是一个众所周知的计算问题,处理它的常用方法是允许列宽列表中的标记值,这意味着“无论剩下什么”。然后像{10%, - 1,10%}这样的百分比数组意味着两个窄列,一个80%的一侧。在Jim的情况下,他知道他的一些列需要有多宽,但不知道整体宽度,所以他会说,名字为20%,Number为10%,其他为-1,所以他们会获得平等的份额剩下的一切。