在iText 7中编写文档时如何获得垂直光标位置?

宁静

在 iText 5 中有一个名为的方法getVerticalPosition(),它给出了下一个写入对象在页面上的位置。作为回答这个问题如何找出页面上的当前光标位置?并记录在此处

iText 7 在页面上获取当前垂直位置以编写文档的等效项是什么?

更新日期:2018 年 8 月 11 日:根据评论中的回复,我更新了添加页面预览或新页面的逻辑,但两者仍在同一页面上打印

foreach (var element in RenderHtmlAndCss(document, css, html))
{
AddElement(document, null, (IBlockElement)element);
IRenderer pRenderer = element.CreateRendererSubTree().SetParent(document.GetRenderer());
LayoutResult pLayoutResult = pRenderer.Layout(new LayoutContext(new LayoutArea(0, new Rectangle(pdf.GetDefaultPageSize().GetHeight() - 72, pdf.GetDefaultPageSize().GetWidth() - 72))));
// writer.GetCurrentPos();
float y = pLayoutResult.GetOccupiedArea().GetBBox().GetY();

//20 is height of the content.
if(y<20 && !string.IsNullOrEmpty(LastPageStaticContent))
{
AreaBreak newpage = new AreaBreak(AreaBreakType.NEXT_PAGE);
//pdf.AddNewPage();
}

}

// Add Preface
if (Preface != null && Preface.Count > 0)
{

foreach (ReportSection section in Preface)
{
for (int i = 1; i <= pdf.GetNumberOfPages(); i++)
{
if (i == pdf.GetPageNumber(pdf.GetLastPage()))
{
foreach (var element in RenderHtmlAndCss(document, css, LastPageStaticContent))
{

//float x = pLayoutResult.getOccupiedArea().getBBox().getX();
IBlockElement glueToBottom = new Paragraph().Add((IBlockElement)element)
.SetFontSize(12)
.SetWidth(UnitValue.CreatePercentValue(100))
// .SetBackgroundColor(ColorConstants.RED)
.SetTextAlignment(TextAlignment.JUSTIFIED);
glueToBottom.SetProperty(Property.POSITION, iText.Layout.Layout.LayoutPosition.ABSOLUTE);
glueToBottom.SetProperty(Property.BOTTOM, 0);
// glueToBottom.Add(element);
document.Add(glueToBottom);

}
}
}

// document.Close();
}
}
宁静

Jon Reilly 在评论中发布的链接(这里是 )对于解决这个问题非常有用:

您将需要对需要其垂直位置的元素的引用并添加它:

Paragraph p = new Paragraph("Hello World");
doc.add(p);

然后,您可以按如下方式获取元素的 IRenderer,这将允许您获取 LayoutResult,其中包含许多有关 PDFDocument 中元素渲染的有用信息,包括边界框,以及完整的坐标、宽度、高度等严格来说应该比旧的 iText5 更强大getVerticalPosition

IRenderer pRenderer = p.createRendererSubTree().setParent(doc.getRenderer());
LayoutResult pLayoutResult = pRenderer.layout(new LayoutContext(new LayoutArea(0, new Rectangle(595-72, 842-72))));

float y = pLayoutResult.getOccupiedArea().getBBox().getY();
float x = pLayoutResult.getOccupiedArea().getBBox().getX();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取并设置itext pdf文档的元数据

来自分类Dev

如何知道与itext中的字体兼容的cmap?

来自分类Dev

iText / List:如何从列表中删除符号?

来自分类Dev

iText将文档与Acrofields合并

来自分类Dev

合并文档以在iText(Java)中创建目录

来自分类Dev

如何激活Fabric js IText的光标?

来自分类Dev

itext:如何调整文本提取?

来自分类Dev

什么可以替代iText 7中的块?

来自分类Dev

风景中的iText渐变问题

来自分类Dev

如何使用iText返回PDF

来自分类Dev

iText 7如何在整个文档中设置字体

来自分类Dev

如何使用iText在(x,y)位置的文档中的HTML字符串中添加PdfPTable?

来自分类Dev

使用iText验证Pdf文档

来自分类Dev

IText Center pdf中的标题

来自分类Dev

如何使用itext 5.3.0在PDF文档中显示Java List <>?

来自分类Dev

如何知道与Itext中的字体兼容的cmap?

来自分类Dev

在itext中获取页码

来自分类Dev

在IText7中创建PdfFont

来自分类Dev

itext 7表边框问题

来自分类Dev

如何在LineSeparator itext中减小行距

来自分类Dev

在iText中操纵路径,颜色等

来自分类Dev

在itext中的扫描文档上设置文本

来自分类Dev

运行报告中的 itext 合并

来自分类Dev

IText 7 链接边框显示

来自分类Dev

iText7 - 如何设置 LoggerFactory?

来自分类Dev

iText7 目录

来自分类Dev

在 iText 中水平对齐段落

来自分类Dev

Android中7.1.3的iText方法

来自分类Dev

如何使用 iText 7 设置卢布符号?