gpt4 book ai didi

c# - 将页眉、页脚和背景颜色添加到 iTextSharp 中的 pdf 单元格

转载 作者:行者123 更新时间:2023-11-30 20:48:58 24 4
gpt4 key购买 nike

我正在使用 iTextSharp 作为 PDF 文档创建器。我想添加标题,它是一个文本和它下面的一行,然后要显示的表格。页脚应在右下角包含页码。我可以创建表格,但页眉和页脚似乎是个问题。有人可以给出示例代码来解决这个问题。我还想为表中的标题列着色,即只有第一行的标题列具有背景色。我对此很陌生,所以请帮助我。提前致谢。

最佳答案

请检查keywords list列出与 iText 相关的主题。现在选择关键字 headers / footers .您会发现页眉和页脚是使用页面事件添加的。

它是这样工作的:当您创建文档时,您将对象添加到文档中,而不必担心这些对象在不同页面上的分布。例如:PdfPTable放不下一页就拆分,放不下的部分转到下一页。

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

让我们从 Chapter 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;

为表格中的单元格背景着色是轻而易举的事。这在 chapter 4 中有解释。 .

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

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

关于c# - 将页眉、页脚和背景颜色添加到 iTextSharp 中的 pdf 单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24053963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com