当前位置: 首页 > 知识库问答 >
问题:

如何在iText7中插入一个元素到特定页面的底部?

韦阳晖
2023-03-14

我正在探索. NET PDF库的不同选项。我的要求之一是在第一页的底部放置一个框,如果任何内容到达框,它应该溢出到下一页。

如上所示,第7段通常会占用“保留”区域占用的部分空间。相反,本应占据该空间的部分被转移到下一页。

这张照片是用Gembox拍摄的。通过将框添加为页脚元素(仅在第一页呈现)来创建文档。然而,在iText7中,我看到的添加页脚的示例(比如这一个)将内容作为浮动元素,呈现在现有内容之上,并且不会影响文档其余部分的布局/流程。

我还尝试在PageEnd事件处理程序中添加一个段落,但没有添加画布(下面的代码片段),而是添加到整个文档的末尾,而不是添加到指定的页面。

public void HandleEvent(Event evt)
{
    var docEvent = (PdfDocumentEvent)evt;
    var page = docEvent.GetPage();
    int pageNum = docEvent.GetDocument().GetPageNumber(page);

    if (pageNum == 1)
    {
        doc.Add(new Paragraph("Testing a thing"));
    }
}

我想要的是那种可以用iText7复制的效果吗?

共有2个答案

慕宪
2023-03-14

如你所说,你正在探索不同的。NET PDF库。所以我建议PDFFlow库,它完全满足你的需要。如果你有页脚,主文档流将占据页面区域的其余部分,并将在下一页自动继续,而不会覆盖页脚。

DocumentBuilder.New()
    .AddSection()
        .AddParagraph("long text")
    .ToSection()
        .AddFooterToBothPages(40)
            .AddParagraph("this a footer set for each page of this section")
.ToDocument()
    .Build("result.pdf");

下面是一个教程,包含使用页眉、页脚、左/右重复区域的代码示例:AddingRepeatingArea教程。

希望,这将帮助你:)

白禄
2023-03-14

我相信你可以把https://github.com/itext/i7ns-samples/blob/develop/itext/itext.samples/itext/samples/sandbox/acroforms/AddExtraTable.cs和https://github.com/itext/i7ns-samples/blob/develop/itext/itext.samples/itext/samples/sandbox/events/TextFooter.cs实现你所需要的。

想法如下:

  • 通过使iText给文档的渲染器减少第一页的空间来为您的框保留位置
  • 使用iText的结束页面事件来填充此框

另一个选项是如何在iText7中的特定页面底部插入元素您可以临时调用Document#setBottomMargin,因为通过Document#add添加的元素不会放在页边距上。然后,一旦第一页被布局,您就可以再次设置初始页边距。但是,此选项需要了解布局流程,因为只有在布局第一页的内容后才应设置页边距。

还有一个建议:尽管事件功能相当灵活和有用,但它似乎像是在用大锤敲开螺母。您需要调用Canvas#ShowTextAligned,这可以在没有任何事件处理的情况下完成。因此,理想情况下,我更愿意做以下工作:

  • 通过扩展DocumentRenderer
 类似资料:
  • 问题内容: 在我的HTML页面上,我希望能够“转到” /“滚动到” /“关注”页面上的元素。 通常,我会使用带有的锚标记,但是我已经在使用hashchange事件和BBQ插件来加载此页面。 那么,是否还有其他方法可以通过JavaScript使页面转到页面上的给定元素? 这是我要执行的操作的基本概述: 问题答案: 插件形式的标准技术如下所示: 然后,您可以说滚动到。选件处理和可配置性留给读者练习。

  • 在端口20436上启动ChromeDriver(V2.9.248315)线程“main”org.openqa.selenium.noSuchelementException异常:没有这样的元素 (会话信息:chrome=53.0.2785.143)(驱动程序信息:ChromeDriver=2.9.248315,platform=Windows NT 6.1 SP1 x86_64)(警告:服务器没有

  • 我试图跳过文件的第一行和最后一行,并将其余信息插入ArrayList。下面是我所做的,可以将文件中的所有元素插入ArrayList。

  • 问题内容: 假设我们有两个数组: 现在,我想在每个数组的第三个元素之后插入。我该怎么做? 问题答案: 可以用来提取数组的部分,联合数组运算符()可以重新组合部分。 这个例子: 给出:

  • 我遇到了这种奇怪的情况。 > 我首先在第1页,它有一个id为“abc”的元素,我使用“abc”查找webElement并获得它的文本值 我点击了第1页的一个链接,它把我带到了第2页 值得注意的是,如果在页面切换之间插入硬编码延迟(线程Hibernate等),就不会出现过时的问题。 谢谢,