Hal*_*yon 4 pdf-generation itext itext7
在 iText 5 中,有一个名为的方法getVerticalPosition(),它给出下一个写入的对象在页面上的位置。作为回答这个问题如何找出页面上当前光标的位置?并记录在此处
iText 7 获取页面上当前垂直位置以编写文档的等效项是什么?
更新日期:2018 年 8 月 11 日:根据评论中的回复,我已经更新了添加页面 preak 或新页面的逻辑,但两者仍在同一页面上打印
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为向文档渲染器询问其当前布局区域的顶部是获取此信息的更简单的方法。
Paragraph p = new Paragraph("Hello World");
doc.add(p);
float position = doc.getRenderer().getCurrentArea().getBBox().getTop();
Run Code Online (Sandbox Code Playgroud)
我对 API 知之甚少,无法意识到这种方法的缺点。看起来它正在发挥作用,对我来说这已经足够了。