簡體   English   中英

使用iTextSharp在多個pdf頁面上構造標題

[英]Using iTextSharp to construct header on multiple pdf pages

我正在根據在datagridview中選擇的記錄生成PDF文件。 它將包括3-5頁。 我創建了一個包含2列的表格來代表我的標題。 第一個單元格左對齊,第二個單元格右對齊。 我想在所有頁面上顯示相同的信息。

進行一些谷歌搜索后,我看到了header.WriteSelectedRows()屬性,該屬性應該對此有所幫助? 一個例子是:

header.WriteSelectedRows(0, -1, doc.PageSize.GetLeft(5), doc.PageSize.GetTop(5), wri.DirectContent);

第二個是:

 header.WriteSelectedRows(0, -1, doc.LeftMargin, doc.PageSize.Height - 36, wri.DirectContent);

但是,兩者都導致僅第一頁具有表/標題。 關於我需要解決的任何想法? 謝謝!

碼:

 PdfPTable header = new PdfPTable(2);
 header.HorizontalAlignment = Element.ALIGN_LEFT;
 header.TotalWidth = doc.PageSize.Width - 20f;
 header.LockedWidth = true;
 Phrase cell1 = new Phrase(signal.ProformaType);
 Phrase cell2 = new Phrase("text" + Environment.NewLine + "text"
     + Environment.NewLine + signal.Signal);

 PdfPCell c1 = new PdfPCell(cell1);
 c1.Border = iTextSharp.text.Rectangle.NO_BORDER;
 c1.VerticalAlignment = iTextSharp.text.Element.ALIGN_TOP;
 c1.HorizontalAlignment = iTextSharp.text.Element.ALIGN_LEFT;
 header.AddCell(c1);

 PdfPCell c2 = new PdfPCell(cell2);
 c2.Border = iTextSharp.text.Rectangle.NO_BORDER;
 c2.VerticalAlignment = iTextSharp.text.Element.ALIGN_TOP;
 c2.HorizontalAlignment = iTextSharp.text.Element.ALIGN_RIGHT;             
 header.AddCell(c2);
 header.WriteSelectedRows(0, -1, doc.LeftMargin, doc.PageSize.Height - 36, wri.DirectContent);

僅將PdfPTable添加到首頁,是因為將其添加到首頁。 如果要將其添加到iText創建的每個頁面中,則不應在現在添加PdfPTable位置添加它。

相反,您應該將其添加到頁面事件的OnEndPage()方法中。 在回答以下問題時對此進行了解釋:

換句話說,您需要創建自己的PdfPageEvent接口實現。 最好的方法是擴展PdfPageEventHelper類:

public class MyPageHeader : PdfPageEventHelper
{

    PdfPTable header = ... // define header table here        

    public override void OnEndPage(PdfWriter writer, Document document)
    {
        header.WriteSelectedRows(0, -1, document.Left, document.Top, writer.DirectContent);
    }
}

為此,您需要在打開Document之前聲明此page事件:

PdfWriter pdfWriter = PdfWriter.GetInstance(document, pdfFileStream);
pdfWriter.PageEvent = new MyPageHeader();
document.Open();  

現在,每次創建新頁面時,標題都會自動添加。

您可能想要調整上面代碼中的document.Leftdocument.Top ,因為現在,它將在每個頁面的右上角添加表格,因此您可能想使用document.Left + 36document.Top - 5或類似的東西。

另外:確保標題有足夠的空間,否則標題將與您使用document.Add()直接添加到Document的內容重疊。 您可以在Document類的構造函數中更改邊距。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM