iTextSharp - 在添加到列之前计算短语/段落高度

时间:2013-09-10 16:31:30

标签: c# pdf-generation itextsharp

我正在创建具有不同数量的项目和备注的PDF工作单。我使用ColumnText.SetSimpleColumn(phrase, x, y, x2, y2, height, alignment)将文本添加到单个列。

我可以获取ColumnText.YLine值,但只有 后才能使用Go()方法将其应用于ColumnText对象。

我想要做的是预先计算最终的YLine值,或者如果YLine超过mjy底部阈值则撤消添加短语,这样我就可以手动添加另一个页面并继续。这可能吗?

1 个答案:

答案 0 :(得分:5)

正如我之前发表的评论所示,您的问题的答案是肯定的。 MovieColumns3告诉您如何操作:

您需要创建一个ColumnText对象并在该对象上使用ColumnText方法,而不是使用静态setSimpleColumn()方法。您可以使用Phrase方法在文本模式中添加addText()个对象,或者在复合模式中添加任何类型的Element addElement()方法。

通常,你会调用go()方法来渲染这些元素,但这就是你问题的重点:在渲染任何元素之前,你想知道元素拟合。可以在模拟模式下使用go()方法:go(true)。这将假装添加内容,但不会呈现任何内容。您可以使用getYLine()方法获取Y位置,并使用hasMoreText()方法检查是否添加了所有内容。

了解go()方法(部分)消耗 ColumnText对象的内容非常重要。一旦您决定添加真实内容(即:不在模拟模式下),无论是在当前页面还是下一页,您需要丢弃ColumnText对象中的所有剩余内容并重新添加。< / p>

您可以在我的book中找到更详细的解释,如果您不认识示例中的方法,因为它是用Java编写的,请与示例中的C# port进行比较。 / p>