【问题标题】:ITextSharp - PDF writing over Header Area beyond first pageITextSharp - 在第一页之外的标题区域上写入 PDF
【发布时间】:2012-06-23 19:07:59
【问题描述】:

我一直在使用 ITextSharp 并使用它来生成 PDF - 但是我最近遇到了一个问题,即第一个页面之外的所有页面的上边距似乎都被忽略了,因此我的页眉上出现了书写。

当前边距:

document.SetMargins(72,72, 36, 36);

应该注意,左边距和右边距在第一页之外完美地工作 - 但是它似乎忽略了顶部边距并从页面顶部(出现标题的位置)开始文本。

有人对为什么会发生这种情况有任何见解吗?或者是否有一个区域或事件可以用来加强每一页的文档页边距? (也许是OnStartPage 事件?)

如果需要,我很乐意提供任何其他代码 - 因为我知道 ITextSharp 在代码方面可能会变得非常复杂。

【问题讨论】:

  • 一个小的独立示例可以很好地说明您的问题:基本上,您用于生成 2 页内容的方法,以及捕获 OnStartPage 事件的事件侦听器。作为旁注,通常最好在 OnEndPage 事件监听器中添加页眉和页脚。
  • 我将有一个示例 PDF 来尝试演示发生了什么。目前我在 OnStartPage 中添加了页眉,在 OnEndPage 中添加了页脚;看起来对吗?
  • 正如我所说,一旦所有内容都已包含在页面上,通常最好在 OnEndPage 中添加页眉和页脚。
  • 我也会尝试切换它们。谢谢亚历克西斯。

标签: c# .net formatting pdf-generation itextsharp


【解决方案1】:

根据 Alexis Pigeon 将页眉和页脚包含在 OnEndPage 事件中的说明解决了该问题,而不是将它们中的每一个都放在单独的事件中。我还调整了边距(增加底部边距)以防止覆盖。

【讨论】:

    【解决方案2】:

    如果你想要不同的页边距,我钩住了 OnPageStart 事件并根据页码设置页边距。

    internal class DocumentEvents : PdfPageEventHelper
    {
        /// <summary>
        /// Called when [start page].
        /// </summary>
        /// <param name="writer">The writer.</param>
        /// <param name="document">The document.</param>
        public override void OnStartPage(PdfWriter writer, Document document)
        {
            if (document.PageNumber == 1)
            {
                document.SetMargins(40f, 40f, 130f, 20f);
            }
            else
            {
                document.SetMargins(40f, 40f, 30f, 30f);
            }
    
            document.NewPage();
        }
    }
    

    不要忘记将您的活动与文档编写器联系起来:

    this.writer.PageEvent = new DocumentEvents();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      相关资源
      最近更新 更多