[英]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.Left
和document.Top
,因為現在,它將在每個頁面的右上角添加表格,因此您可能想使用document.Left + 36
和document.Top - 5
或類似的東西。
另外:確保標題有足夠的空間,否則標題將與您使用document.Add()
直接添加到Document
的內容重疊。 您可以在Document
類的構造函數中更改邊距。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.