在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,其中页眉和页脚单元格具有不同的颜色。