我正在创建具有不同数量的项目和备注的PDF工作单。我使用ColumnText.SetSimpleColumn(phrase, x, y, x2, y2, height, alignment)
将文本添加到单个列。
我可以获取ColumnText.YLine值,但只有 后才能使用Go()
方法将其应用于ColumnText对象。
我想要做的是预先计算最终的YLine值,或者如果YLine超过mjy底部阈值则撤消添加短语,这样我就可以手动添加另一个页面并继续。这可能吗?
答案 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>