在iTextSharp中为pdf单元格添加页眉,页脚和背景颜色

我正在使用iTextSharp for PDF Doc creater。 我想添加标题,它是一个文本和它下面的一行,然后是要出现的表格。 页脚应包含右下角的页码。 我能够创建表,但页眉和页脚似乎是一个问题。 有人可以给出一个示例代码来解决这个问题。 我也希望为表格中的标题列着色,即仅第一行的标题列具有背景颜色。 我是新来的,所以请帮帮我。 提前致谢。

请查看列出与iText相关的主题的关键字列表 。 现在选择关键字页眉/页脚 。 您将发现使用页面事件添加页眉和页脚。

这就是它的工作原理:当您创建文档时,您可以将对象添加到文档中,而无需担心这些对象在不同页面上的分布。 例如: PdfPTable在不适合页面时被拆分,而不适合的部分被转发到下一页。

每次发生这种情况时,iText都会调用一个事件。 如文档所述,在OnStartPage()方法中添加内容是危险的,因此如果要添加页眉和页脚,则需要在OnEndPage()事件中执行此操作。

让我们从我的书的第5章中选择一个C#示例。 在MovieHistory2中 ,我们创建一个这样的页面事件:

 class HeaderFooter : PdfPageEventHelper { /** Alternating phrase for the header. */ Phrase[] header = new Phrase[2]; /** Current page number (will be reset for every chapter). */ int pagenumber; /** * Initialize one of the headers. * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument( * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document) */ public override void OnOpenDocument(PdfWriter writer, Document document) { header[0] = new Phrase("Movie history"); } /** * Initialize one of the headers, based on the chapter title; * reset the page number. * @see com.itextpdf.text.pdf.PdfPageEventHelper#onChapter( * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document, float, * com.itextpdf.text.Paragraph) */ public override void OnChapter( PdfWriter writer, Document document, float paragraphPosition, Paragraph title) { header[1] = new Phrase(title.Content); pagenumber = 1; } /** * Increase the page number. * @see com.itextpdf.text.pdf.PdfPageEventHelper#onStartPage( * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document) */ public override void OnStartPage(PdfWriter writer, Document document) { pagenumber++; } /** * Adds the header and the footer. * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage( * com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document) */ public override void OnEndPage(PdfWriter writer, Document document) { Rectangle rect = writer.GetBoxSize("art"); switch(writer.PageNumber % 2) { case 0: ColumnText.ShowTextAligned(writer.DirectContent, Element.ALIGN_RIGHT, header[0], rect.Right, rect.Top, 0 ); break; case 1: ColumnText.ShowTextAligned( writer.DirectContent, Element.ALIGN_LEFT, header[1], rect.Left, rect.Top, 0 ); break; } ColumnText.ShowTextAligned( writer.DirectContent, Element.ALIGN_CENTER, new Phrase(String.Format("page {0}", pagenumber)), (rect.Left + rect.Right) / 2, rect.Bottom - 18, 0 ); } } 

请注意, OnChapter()方法可能与您无关:它在事件中存储章节的标题,并将该标题用于标题。 您可能感兴趣的部分可以在OnEndPage()方法中找到。 每次页面结束时,我们都会在绝对位置添加内容。

你想要内容是一个表? 没问题,这正是MovieCountries1示例中所做的。

一旦创建了页面事件,实现OnEndPage()方法,您所要做的就是将事件声明为PdfWriter

 TableHeader tevent = new TableHeader(); writer.PageEvent = tevent; 

在表格中着色细胞的背景是不费脑子的。 这将在第4章中解释。

 PdfPCell cell = new PdfPCell(new Phrase("red cell")); cell.BackgroundColor = BaseColor.RED; 

我假设您刚刚为我们的信息添加了这条评论,并且这不是一个实际的问题,但无论如何,如果设置单元格的背景颜色对您来说并非无足轻重,我还是会回答它。 当然,您可以轻松找到创建PDF的示例,这些PDF是具有重复页眉和页脚行的PDF,其中页眉和页脚单元格具有不同的颜色。