【问题标题】:How can I insert an element to the bottom of a specific page in iText7?如何在 iText7 的特定页面底部插入元素?
【发布时间】:2022-01-13 20:12:45
【问题描述】:

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

例如:

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

该图像是使用 Gembox.Document 通过将框添加为仅在第一页上呈现的页脚元素来实现的。但是,在 iText7 中,我看到的添加页脚 (such as this one) 的示例将内容放置为呈现在现有内容之上的浮动元素,并且不会影响文档其余部分的布局/流程。

我还尝试在没有画布的情况下在 PageEnd 事件处理程序上添加一个段落(下面的 sn-p),但不是将它添加到指定页面,而是将它添加到整个文档的末尾。

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 复制的效果类型吗?

【问题讨论】:

  • 在 itext 中,您必须设置页边距,以便为您的附加内容(页眉、页脚、边注)提供足够的空间。

标签: c# pdf itext7


【解决方案1】:

我相信你可以结合https://github.com/itext/i7ns-samples/blob/develop/itext/itext.samples/itext/samples/sandbox/acroforms/AddExtraTable.cshttps://github.com/itext/i7ns-samples/blob/develop/itext/itext.samples/itext/samples/sandbox/events/TextFooter.cs的概念来实现你所需要的。

思路如下:

  • 通过使 iText 为文档的渲染器提供更少的第一页空间来为您的框保留位置
  • 借助 iText 的结束页面事件填写此框

How can I insert an element to the bottom of a specific page in iText7? 中建议了另一个选项:您可以临时调用 Document#setBottomMargin ,因为通过 Document#add 添加的元素不会放置在边距上。然后,一旦第一页布局,您可以再次设置初始边距。但是,此选项需要您了解布局流程,因为只有在第一页的内容被布局后才应设置边距。

再提一个建议:虽然事件功能还是比较灵活有用的,感觉就像是用大锤敲了敲坚果。您需要致电Canvas#ShowTextAligned,无需任何事件处理即可完成。因此,理想情况下,我更愿意执行以下操作:

  • 通过DocumentRenderer的扩展处理页面的布局区域
  • 致电Canvas#ShowTextAligned 填写预留框。

【讨论】:

  • 感谢您的提示!我们最终选择了 GemBox,但我已经为可能正在寻找这个的其他人接受了这个答案。
【解决方案2】:

正如您所说,您正在探索不同的 .NET PDF 库。所以我建议PDFFlow library,这正是你所需要的。 如果您有页脚,则主文档流将占用页面区域的其余部分,并在下一页自动继续,而不覆盖页脚。

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 tutorial

希望对你有帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2022-10-17
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多