5

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

我可以获得 ColumnText.YLine 值,但只有使用该方法将其应用于 ColumnText 对象之后Go()

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

4

1 回答 1

6

正如我之前发布的评论所示,您的问题的答案是肯定的。MovieColumns3向您展示了如何做到这一点:

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

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

了解该go()方法(部分)使用对象的内容很重要ColumnText。一旦您决定在当前页面或下一页上添加真实的内容(即:不在模拟模式下),您需要丢弃ColumnText对象中所有剩余的内容并重新添加。

你会在我的书中找到更详细的解释,如果你不认识示例中的方法,因为它是用 Java 编写的,请与示例的C# 端口进行比较。

于 2013-09-11T08:40:36.370 回答