2012-06-21 131 views
3

我一直在使用ITextSharp並使用它來生成PDF - 但是最近我遇到了一個問題,其中第一頁之外的所有頁面的頂部頁邊似乎被忽略,並且作爲結果寫在我的標題上。ITextSharp - 在第一頁以外的頁面上書寫PDF頁面

當前邊距:

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

應當注意的是,左,右頁邊距的工作完全超出了第一頁 - 但它似乎忽略上邊距和的頂部開始的文本頁面(出現標題的地方)。

有沒有人有任何見解,爲什麼會出現這種情況?或者是否有某個區域或事件可以用來加強每個頁面的文檔邊距? (也許OnStartPage事件?)

我會很高興提供任何額外的代碼,如果需要的話 - 因爲我知道ITextSharp可以變得非常複雜的代碼明智的。

+1

一個小的,獨立的例子就是很好的說明你的問題:基本上,該方法用來生成2有價值的內容頁面,以及捕獲OnStartPage事件的事件監聽器。作爲旁註,通常優選在「OnEndPage」事件偵聽器中添加頁眉和頁腳。 –

+0

我將用一個PDF示例來演示發生了什麼。目前,我在OnStartPage中添加了Header,並在OnEndPage中添加了頁腳;這看起來正確嗎? –

+1

正如我所說的,一旦所有的內容已經包含在頁面中,通常首選在'OnEndPage'中添加頁眉和頁腳。 –

回答

2

根據Alexis Pigeon將頁眉和頁腳添加到OnEndPage事件中的指示解決了該問題,而不是每個人都在單獨的事件中。我還調整了邊距(增加底部邊距)以防止覆蓋。

3

如果你想要不同的邊距,我掛鉤了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();