Itext 如何找出当前光标在页面上的位置?

Itext 如何找出当前光标在页面上的位置?,itext,Itext,我向页面添加了一堆内容,例如document.addp;,然后,我添加一个表,该表使用文档填充两列。在这个过程中,我使用: column.setSimpleColumn( x[count][0], document.bottom(), x[count][1], document.top() - height - 10); 其中“高度”设置为0。这会将表放置在从文档顶部开始的列中。当然,我想做的是将该列直接添加到文档中最后写入的内容下方,例如document.addp;。如果我知道到

我向页面添加了一堆内容,例如document.addp;,然后,我添加一个表,该表使用文档填充两列。在这个过程中,我使用:

column.setSimpleColumn(
   x[count][0], document.bottom(),
   x[count][1], document.top() - height - 10);
其中“高度”设置为0。这会将表放置在从文档顶部开始的列中。当然,我想做的是将该列直接添加到文档中最后写入的内容下方,例如document.addp;。如果我知道到目前为止在页面上消耗的高度,我可以手动输入正确的高度值,一切正常


问题是,文档中写入的内容取决于许多条件,因此我只想执行一个命令,告诉我当前页面的文档中到目前为止已消耗了多少高度,以便我可以适当地设置高度。在iText中有没有一种方法可以做到这一点,这样我就不需要跟踪添加到页面中的每个元素的高度?

有三种方法可以向PDF添加内容:

使用document.add

在这种情况下,iText将根据页面大小和定义的页边距来决定内容的添加位置

有一个非常古老的方法叫做getVerticalPosition,它将布尔值作为参数。我并不为这个方法感到自豪,因为它是一个getter方法,它不仅可以在使用一系列document.add操作后为您提供页面上的Y位置,还可以更改当前的Y位置,而这不是getter方法应该做的

如果将false作为参数传递,它将为您提供当前Y,这可能是您添加的最后一个块的基线位置

如果将true作为参数传递,该方法将首先添加一个换行符,并为您提供要添加的下一行文本的基线位置

使用ColumnText

ColumnText是可以向其添加元素的对象。然后可以使用绝对坐标定义列并调用go方法。go方法将呈现内容,您可以使用返回值查看内容是否适合矩形。您可以使用getYLine方法查找添加的最后一段内容的Y坐标

使用writeSelectedRows

此方法仅在使用PdfPTable对象时有效。 writeSelectedRows方法可以将行和列的选择添加到从特定x和y坐标开始的页面中。 它返回一个浮点值,该值给出添加的最后一行的下边框的Y位置。 如果要在添加具有writeSelectedRows的表之前了解表垂直方向需要多少空间,
您需要先计算要添加的行的高度。

谢谢@BrunoLowagie,这很好,回答了这个问题。但是,有趣的是,如果我在第一个两列表的下面添加第二个两列表,它总是将第二个表放在页面顶部第一个表的顶部。我认为这是因为第一个表是绝对定位的,因此无法相对地放置后续项。有什么已知的方法来解决这个问题吗?例如,我是否可以计算第一个表格的高度,而只计算最后一页的部分?或者其他技术?如果使用writeSelectedRows,那么这些表将被添加到彼此的顶部。如果两个表都使用document.addtable,则它们将相互跟随。请注意,如果设置了总高度,则可以计算表格的高度。这很有用,因为一旦开始在绝对位置添加内容,就必须继续这样做。我可以使用column.getYLine来对齐第一个表下面的第二个表,以获取第一个表的末尾,并使用它设置第二个表的位置;插入第一个表。不确定这是否会影响您在上面评论中的建议。使用getYLine完全可以!增加表格有三种方式:document.addtable;让我来决定;table.writeSelectedRows。。。;允许您以绝对坐标渲染表格;column.addElementtable允许您将表格放入定义的矩形中。我关于getVerticalPosition的回答只有在使用document.add时才有效。我将对其进行更新,以包含有关ColumnText的内容。