使用IRONPDF 如何使用 C# 中的 iTextSharp 和 IronPDF 在 PDF 中添加页眉和页脚(附示例 Curtis Chau 已发布:十二月 3, 2025 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 法学硕士副本 法学硕士副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在双子座打开 向 Gemini 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 为 PDF 文档添加页眉和页脚 在 PDF 文档中添加页眉和页脚对于创建专业报告、发票和商业文档至关重要。 虽然许多开发人员使用 PdfPageEventHelper 和 OnEndPage 方法来搜索 iTextSharp 解决方案,但现代 .NET 库提供了简单得多的方法来实现相同的结果。 本教程演示了如何使用 C# 在 PDF 中添加页眉和页脚示例,比较了传统的 iText 7 方法和 IronPDF 的精简方法。 最后,您将了解这两种实现方式--从创建新文档到生成最终 PDF 文件--并能选择最适合您项目要求的方法。 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-1.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图片 1 - IronPDF 为什么 PDF 页眉和页脚在文档生成中很重要? 页眉和页脚在专业 PDF 文档中起着至关重要的作用。 他们通过图像徽标提供一致的品牌形象,通过页码实现页面导航,显示日期和文档标题等重要元数据,并通过时间戳和版本信息确定文档的真实性。 在企业环境中,页眉和页脚通常具有法律意义。 财务报告需要时间戳,以便进行审计跟踪。 合同需要页码以确保完整性。 内部文件可能要求在每一页上都有保密声明。 要在程序上满足这些要求,需要一个能可靠处理页面级内容注入的 PDF 库。 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-2.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图片 2 - 功能 在 C# 中添加页眉和页脚的最简单方法是什么? IronPDF 提供了在 .NET 应用程序中为 PDF 文档添加页眉和页脚的最直接方法。 使用 ChromePdfRenderer 类与 TextHeaderFooter 或 HtmlHeaderFooter 结合使用,开发人员只需使用最少的代码即可生成页眉和页脚,而无需创建单独的单元格或手动管理 contentbyte 对象。 在较早的 iTextSharp 模式中,开发人员通常会创建辅助方法(如 private static void AddContent() 或类似的例程(如 private static void addcontent )来手动注入页眉和页脚逻辑。 IronPDF 完全消除了这种模板化的需要。 下面是一个在 PDF 文件中添加页眉和页脚的完整示例: using IronPdf; // Initialize the PDF renderer var renderer = new ChromePdfRenderer(); // Configure the text header with header text renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Quarterly Sales Report", DrawDividerLine = true, FontSize = 14 }; // Configure the text footer with page number renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date}", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10 }; // Set margins to accommodate header and footer renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; // Generate PDF from HTML content var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Data</h1><p>Content goes here...</p>"); pdf.SaveAs("report-with-headers.pdf"); using IronPdf; // Initialize the PDF renderer var renderer = new ChromePdfRenderer(); // Configure the text header with header text renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Quarterly Sales Report", DrawDividerLine = true, FontSize = 14 }; // Configure the text footer with page number renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date}", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10 }; // Set margins to accommodate header and footer renderer.RenderingOptions.MarginTop = 25; renderer.RenderingOptions.MarginBottom = 25; // Generate PDF from HTML content var pdf = renderer.RenderHtmlAsPdf("<h1>Sales Data</h1><p>Content goes here...</p>"); pdf.SaveAs("report-with-headers.pdf"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 上面的源代码展示了几个关键概念。TextHeaderFooter 类提供了将文本定位在页眉/页脚区域左侧、中间或右侧的属性。 DrawDividerLine 属性可在页眉/页脚和主要文档内容之间添加一条专业分隔线。 在生成 PDF 时,{page}、{total-pages} 和 {date} 等可合并字段会自动填充动态值。 输出 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-4.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图像 4 - PDF 输出 IronPDF 可自动处理页边距计算,确保页眉和页脚不会与文档内容重叠。 TextHeaderFooter类支持IronSoftware.Drawing.FontTypes枚举的字体类型,让您无需依赖外部即可控制排版。 请注意整个实现是如何在一个代码块中完成的,其中的属性分配清晰易读。 无需创建单独的类文件、计算像素位置或管理画布对象。 该库抽象了这些复杂性,让开发人员专注于内容,而不是使用 iTextSharp 风格的模式生成 PDF 的机制。 如何创建 HTML 样式的页眉和页脚? 对于更复杂的设计,IronPDF 的HtmlHeaderFooter 类可实现完整的 HTML 和 CSS 风格。 当标题需要包含图像徽标、复杂布局或品牌特定样式时,这种方法尤为重要--无需手动创建 PdfPCell 对象或使用新的 Phrase 构造函数。 using IronPdf; using System; var renderer = new ChromePdfRenderer(); // Create an HTML header with logo and styling renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='width: 100%; font-family: Arial, sans-serif;'> <img src='logo.png' style='height: 30px; float: left;' /> <span style='float: right; font-size: 12px; color: #666;'> Confidential Document </span> </div>", MaxHeight = 25, DrawDividerLine = true, BaseUrl = new Uri(@"C:\assets\").AbsoluteUri }; // Create an HTML footer with page numbering renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align: center; font-size: 10px; color: #999;'> <span>Generated on {date} at {time}</span> <br/> <span>Page {page} of {total-pages}</span> </div>", MaxHeight = 20 }; renderer.RenderingOptions.MarginTop = 30; renderer.RenderingOptions.MarginBottom = 25; var pdf = renderer.RenderHtmlAsPdf("<h1>Project Proposal</h1><p>Document content...</p>"); pdf.SaveAs("styled-document.pdf"); using IronPdf; using System; var renderer = new ChromePdfRenderer(); // Create an HTML header with logo and styling renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='width: 100%; font-family: Arial, sans-serif;'> <img src='logo.png' style='height: 30px; float: left;' /> <span style='float: right; font-size: 12px; color: #666;'> Confidential Document </span> </div>", MaxHeight = 25, DrawDividerLine = true, BaseUrl = new Uri(@"C:\assets\").AbsoluteUri }; // Create an HTML footer with page numbering renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <div style='text-align: center; font-size: 10px; color: #999;'> <span>Generated on {date} at {time}</span> <br/> <span>Page {page} of {total-pages}</span> </div>", MaxHeight = 20 }; renderer.RenderingOptions.MarginTop = 30; renderer.RenderingOptions.MarginBottom = 25; var pdf = renderer.RenderHtmlAsPdf("<h1>Project Proposal</h1><p>Document content...</p>"); pdf.SaveAs("styled-document.pdf"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 该示例代码展示了 HTML 标题如何将图片与文本结合在一起。 BaseUrl 属性可为解析文件名字符串中指定的相对图像 URL 建立根路径,从而使包含公司徽标或其他图形变得简单。 MaxHeight 属性可确保页眉不超过指定尺寸,从而保持一致的文档布局。 可合并字段({page}、{total-pages}、{url}、{date}、{time}、{html-title}、{pdf-title})在 HTML 页眉和页脚中的工作方式相同,无需额外代码即可提供动态内容插入。 有关实施各种页眉样式的全面指导,请参阅页眉和页脚操作指南。 在创建品牌文件时,HTML 方法尤为突出。 营销团队可以提供 HTML 模板,开发人员可以直接将其集成,确保像素完美地再现已获批准的设计。 像 font-family, color, background-color 和 border 这样的 CSS 属性可以按照预期工作,实现复杂的可视化处理,而这需要在其他库中编写大量的底层代码。 如何为现有 PDF 文档添加页眉? 一个常见的要求是为已有的 PDF 文件添加页眉和页脚--无论是上传的文档、合并的文件还是其他系统生成的 PDF 文件。 IronPdf 通过 AddHtmlHeaders 和 AddHtmlFooters 方法优雅地处理了这种情况。 using IronPdf; // Load an existing PDF document var pdf = PdfDocument.FromFile("customer-profile.pdf"); // Define the header to add with header description var header = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: center;'>REVISED COPY - {date}</div>", MaxHeight = 20 }; // Define the footer to add var footer = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: right;'>Page {page}</div>", MaxHeight = 15 }; // Apply headers and footers to all pages pdf.AddHtmlHeaders(header); pdf.AddHtmlFooters(footer); pdf.SaveAs("document-with-new-headers.pdf"); using IronPdf; // Load an existing PDF document var pdf = PdfDocument.FromFile("customer-profile.pdf"); // Define the header to add with header description var header = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: center;'>REVISED COPY - {date}</div>", MaxHeight = 20 }; // Define the footer to add var footer = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: right;'>Page {page}</div>", MaxHeight = 15 }; // Apply headers and footers to all pages pdf.AddHtmlHeaders(header); pdf.AddHtmlFooters(footer); pdf.SaveAs("document-with-new-headers.pdf"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel PdfDocument 类表示加载或渲染的 PDF,并提供渲染后修改的方法。 渲染和修改之间的这种分离使 PDF 文档通过多个处理阶段的工作流程成为可能。 AddHtmlHeaders方法会自动将页眉应用到每个页面,不过您也可以通过传递页面索引集合,将特定页面作为目标。 输入 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-6.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图片 6 - 输入示例。 输出 。 这种能力在文档管理系统中证明是非常宝贵的,因为文档管理系统会从扫描文档、用户上传或第三方 API 响应等不同来源接收 PDF 文件。 IronPDF 在分发或存档前对品牌或页码进行标准化处理。 iText 7 方法是什么样的? 熟悉 iText 7(iTextSharp 的后续版本)的开发人员都知道,添加页眉和页脚需要执行事件处理程序。 该库使用页面事件系统,您可以创建一个类文件来响应文档生命周期事件,如 OnEndPage 和 OnCloseDocument 。 下面是 iText 7 使用公有类 ITextEvents 模式实现相同页眉/页脚的情况: using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element; using iText.Kernel.Events; using iText.Kernel.Geom; using iText.Layout.Properties; // Event handler class for headers and footers - similar to PdfPageEventHelper public class ITextEvents : IEventHandler { // Private string for header text private string _header; public string Header { get { return _header; } set { _header = value; } } public void HandleEvent(Event currentEvent) { PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent; PdfDocument pdfDoc = docEvent.GetDocument(); PdfPage page = docEvent.GetPage(); Rectangle pageSize = page.GetPageSize(); // Create new PdfCanvas for the contentbyte object PdfCanvas pdfCanvas = new PdfCanvas( page.NewContentStreamBefore(), page.GetResources(), pdfDoc); Canvas canvas = new Canvas(pdfCanvas, pageSize); // Add header text canvas.ShowTextAligned( new Paragraph("Quarterly Sales Report"), pageSize.GetWidth() / 2, pageSize.GetTop() - 20, TextAlignment.CENTER); // Add footer with page number int pageNumber = pdfDoc.GetPageNumber(page); canvas.ShowTextAligned( new Paragraph($"Page {pageNumber}"), pageSize.GetWidth() / 2, pageSize.GetBottom() + 20, TextAlignment.CENTER); canvas.Close(); } } // Usage in main code - private void CreatePdf pattern public static void Main(string[] args) { PdfWriter writer = new PdfWriter("report.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); // Register the event handler for END_PAGE pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new ITextEvents()); document.Add(new Paragraph("Sales Data")); document.Add(new Paragraph("Content goes here...")); document.Close(); } using iText.Kernel.Pdf; using iText.Layout; using iText.Layout.Element; using iText.Kernel.Events; using iText.Kernel.Geom; using iText.Layout.Properties; // Event handler class for headers and footers - similar to PdfPageEventHelper public class ITextEvents : IEventHandler { // Private string for header text private string _header; public string Header { get { return _header; } set { _header = value; } } public void HandleEvent(Event currentEvent) { PdfDocumentEvent docEvent = (PdfDocumentEvent)currentEvent; PdfDocument pdfDoc = docEvent.GetDocument(); PdfPage page = docEvent.GetPage(); Rectangle pageSize = page.GetPageSize(); // Create new PdfCanvas for the contentbyte object PdfCanvas pdfCanvas = new PdfCanvas( page.NewContentStreamBefore(), page.GetResources(), pdfDoc); Canvas canvas = new Canvas(pdfCanvas, pageSize); // Add header text canvas.ShowTextAligned( new Paragraph("Quarterly Sales Report"), pageSize.GetWidth() / 2, pageSize.GetTop() - 20, TextAlignment.CENTER); // Add footer with page number int pageNumber = pdfDoc.GetPageNumber(page); canvas.ShowTextAligned( new Paragraph($"Page {pageNumber}"), pageSize.GetWidth() / 2, pageSize.GetBottom() + 20, TextAlignment.CENTER); canvas.Close(); } } // Usage in main code - private void CreatePdf pattern public static void Main(string[] args) { PdfWriter writer = new PdfWriter("report.pdf"); PdfDocument pdfDoc = new PdfDocument(writer); Document document = new Document(pdfDoc); // Register the event handler for END_PAGE pdfDoc.AddEventHandler(PdfDocumentEvent.END_PAGE, new ITextEvents()); document.Add(new Paragraph("Sales Data")); document.Add(new Paragraph("Content goes here...")); document.Close(); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 本实施方案展示了这两个库在架构上的根本区别。 iText 7 需要创建一个单独的处理程序类来实现 IEventHandler (类似于传统的 PdfPageEventHelper ),使用浮点坐标手动计算页面位置,并管理用于绘图操作的 PdfCanvas 和 Canvas 对象。 处理程序通过 END_PAGE 事件类型接收每个页面的事件--很多开发人员都会误用 START_PAGE 这一细节。 输出 。 iText 7 中的坐标系源自页面的左下角,需要进行明确的定位计算。 要获得最终的页数,需要使用模板 PdfTemplate headerTemplate 模式(在 public override void OnCloseDocument 事件中填写)来增加复杂性--该模式增加了更多的模板代码。 对于具有网络开发背景的开发人员来说,与声明式 HTML/CSS 模型相比,这种基于坐标的方法让人感到陌生。 每个定位决策都需要了解页面尺寸、边距偏移和文本测量--这些问题在基于 HTML 的方法中被抽象化了。 iText 7 根据 AGPL 许可运行,这意味着使用 iTextSharp 或 iText 7 的应用程序必须是开源的,除非购买了商业许可。 在为商业项目选择不同的库时,这是一个重要的考虑因素。 两种方法在常见情况下的比较? 在实现页码和总数等功能时,差异会变得更加明显。 使用 IronPDF,{total-pages} 可合并字段可自动处理这一点。 使用 iText 7 时,您需要使用 PdfFormXObject 模板,这些模板会在 OnCloseDocument 事件中填写--这种模式需要了解 PDF 生成生命周期。 在排除故障时,开发经验也有很大不同。 IronPdf 基于 HTML 的方法意味着您可以先在浏览器中预览标题设计,然后再将其整合到 PDF 生成代码中。 如果有些地方看起来不对,您可以使用熟悉的浏览器开发工具调整 HTML 和 CSS。 使用 iText 7 调试定位问题需要反复生成测试 PDF 并手动测量坐标。 基于 HTML 的方法意味着开发人员可以利用现有的网络开发技能。 在 IronPDF 页眉和页脚中可以使用 HTML 和 CSS 实现任何布局,从柔性框布局到响应式设计。 HTML页眉和页脚示例展示了更多的样式可能性。 与 iText 方法相比,您需要创建新的 PdfPTable 结构,使用新的 Phrase 构造函数添加文本,并使用新的浮点数组手动定位元素。 关于跨平台和容器部署? 现代 .NET 应用程序经常部署到 Linux 容器、Azure 应用服务或 AWS Lambda 函数中。 IronPdf.Linux 支持 Windows、Linux 和 macOS 跨平台部署,无需额外配置。 该库开箱即可在 Docker 容器中运行,因此适用于微服务架构和云原生应用程序。 这种跨平台能力延伸到页眉和页脚功能--在 Windows 开发机器上生成带有页眉的 PDF 的相同代码,在部署到 Linux 生产服务器上时也会产生相同的输出。 无需安装额外的字体、配置渲染引擎或处理特定平台的代码路径。 对于运行容器化工作负载的团队,IronPDF 的 Docker 部署文档为各种基础镜像和协调平台提供了配置指导。 该库的跨环境一致行为消除了 PDF 生成工作流程中 "在我的机器上运行 "错误的常见来源。 如何处理不同页面的不同页眉? 有些文件要求第一页有不同的页眉(或没有页眉),而后面的页面则使用标准格式。 IronPDF 通过基于页面索引的头应用程序来支持这一点--无需在 void OnEndPage 处理程序内检查条件或管理 int i 循环计数器: using IronPdf; using System.Linq; var renderer = new ChromePdfRenderer(); // Build multi-page HTML and include a print page-break between pages var pages = new List<string> { "<section><h1>Title Page</h1><p>Intro text on page 1.</p></section>", "<section><h2>Report</h2><p>Detailed report content on page 2.</p></section>", "<section><h2>Appendix</h2><p>Appendix content on page 3.</p></section>" }; var sb = new StringBuilder(); sb.AppendLine("<!doctype html><html><head><meta charset='utf-8'>"); sb.AppendLine("<style>"); sb.AppendLine(" body { font-family: Arial, sans-serif; margin: 20px; }"); sb.AppendLine(" .page-break { page-break-after: always; }"); sb.AppendLine(" @media print { .page-break { display:block; } }"); sb.AppendLine("</style>"); sb.AppendLine("</head><body>"); for (int i = 0; i < pages.Count; i++) { sb.AppendLine(pages[i]); // add page break between pages, but not after last page if (i < pages.Count - 1) sb.AppendLine("<div class='page-break'></div>"); } sb.AppendLine("</body></html>"); var multiPageHtmlContent = sb.ToString(); var pdf = renderer.RenderHtmlAsPdf(multiPageHtmlContent); // Create the standard header for checking header footer placement var standardHeader = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: center;'>Standard Header - Page {page}</div>", MaxHeight = 20 }; // Apply to all pages except the first (index 0) - start row at 1 var pageIndices = Enumerable.Range(1, pdf.PageCount - 1).ToList(); pdf.AddHtmlHeaders(standardHeader, 1, pageIndices); pdf.SaveAs("document-skip-first-page-header.pdf"); using IronPdf; using System.Linq; var renderer = new ChromePdfRenderer(); // Build multi-page HTML and include a print page-break between pages var pages = new List<string> { "<section><h1>Title Page</h1><p>Intro text on page 1.</p></section>", "<section><h2>Report</h2><p>Detailed report content on page 2.</p></section>", "<section><h2>Appendix</h2><p>Appendix content on page 3.</p></section>" }; var sb = new StringBuilder(); sb.AppendLine("<!doctype html><html><head><meta charset='utf-8'>"); sb.AppendLine("<style>"); sb.AppendLine(" body { font-family: Arial, sans-serif; margin: 20px; }"); sb.AppendLine(" .page-break { page-break-after: always; }"); sb.AppendLine(" @media print { .page-break { display:block; } }"); sb.AppendLine("</style>"); sb.AppendLine("</head><body>"); for (int i = 0; i < pages.Count; i++) { sb.AppendLine(pages[i]); // add page break between pages, but not after last page if (i < pages.Count - 1) sb.AppendLine("<div class='page-break'></div>"); } sb.AppendLine("</body></html>"); var multiPageHtmlContent = sb.ToString(); var pdf = renderer.RenderHtmlAsPdf(multiPageHtmlContent); // Create the standard header for checking header footer placement var standardHeader = new HtmlHeaderFooter { HtmlFragment = "<div style='text-align: center;'>Standard Header - Page {page}</div>", MaxHeight = 20 }; // Apply to all pages except the first (index 0) - start row at 1 var pageIndices = Enumerable.Range(1, pdf.PageCount - 1).ToList(); pdf.AddHtmlHeaders(standardHeader, 1, pageIndices); pdf.SaveAs("document-skip-first-page-header.pdf"); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel AddHtmlHeaders 中的第二个参数指定了{page}可合并字段的起始页码,而第三个参数则接受一个接收页眉的页面索引集合(无需末行--该列表准确定义了哪些页面)。 这种细粒度控制可以实现复杂的文档布局,而无需复杂的条件逻辑。 高级页眉和页脚示例涵盖更多情况,包括奇数/偶数页面区分。 输出 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-9.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图片 9 - 不同页面输出不同页眉。 哪些设置可控制页眉和页脚的外观? 微调页眉和页脚涉及影响定位和视觉呈现的多个属性。 TextHeaderFooter 类提供了这些自定义选项,用于控制单独的页眉部分和单独的页脚部分的显示方式: var footer = new TextHeaderFooter { LeftText = "Confidential", CenterText = "{pdf-title}", RightText = "Page {page}", Font = IronSoftware.Drawing.FontTypes.Arial, FontSize = 9, DrawDividerLine = true, DrawDividerLineColor = IronSoftware.Drawing.Color.Gray }; renderer.RenderingOptions.TextFooter = footer; renderer.RenderingOptions.MarginBottom = 20; var footer = new TextHeaderFooter { LeftText = "Confidential", CenterText = "{pdf-title}", RightText = "Page {page}", Font = IronSoftware.Drawing.FontTypes.Arial, FontSize = 9, DrawDividerLine = true, DrawDividerLineColor = IronSoftware.Drawing.Color.Gray }; renderer.RenderingOptions.TextFooter = footer; renderer.RenderingOptions.MarginBottom = 20; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel Font 属性接受 Iron Software.Drawing.FontTypes 中的值,包括 Helvetica、Arial、Courier 和 Times New Roman。 Spacing 属性可控制分隔线与文本内容之间的间隙。 这些属性提供了排版控制,无需 CSS 知识。 对于基于 HTML 的页眉和页脚,LoadStylesAndCSSFromMainHtmlDocument 属性可选择从正在呈现的主文档中继承样式,从而确保页眉和正文内容在视觉上保持一致。 当您的主文档使用自定义 CSS 时,这一点尤其有用,因为自定义 CSS 也应适用于页眉和页脚区域。 DrawDividerLine 属性添加了一个专业的水平规则,用于在页眉/页脚和主要内容之间画线分隔。 您可以使用 DrawDividerLineColor 自定义线条颜色,以匹配您的品牌颜色或文档主题。 如何在页码之外实现动态内容? 可合并字段系统支持在渲染过程中自动填充的多个动态值: {page} - 当前页码 {total-pages} - 文档的最终页数 {date} - 当地格式的当前日期 {time} - 当地格式的当前时间 {html-title} - 源 HTML 中 <title> 标记的内容 {pdf-title} - PDF 文档元数据标题 {url} - 从网址呈现时的源 URL 这些字段的组合可以实现商业文档中常见的复杂页脚设计。 法律部门通常要求在页脚显示文件标题、日期和页数。 财务报告可能需要时间戳,以符合法规要求。 可合并字段可满足这些要求,而无需为每种文档类型定制代码。 对于真正的动态内容--在运行时确定的值--您可以在将 HTML 片段字符串赋值给 HtmlFragment 属性之前,使用插值构建该字符串。 这种方法可以使标题包含数据库检索值、用户信息或计算数据: string userName = GetCurrentUserName(); string documentVersion = "v2.3.1"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = $"<div>Prepared by: {userName} Version: {documentVersion} Page {{page}}</div>", MaxHeight = 20 }; string userName = GetCurrentUserName(); string documentVersion = "v2.3.1"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = $"<div>Prepared by: {userName} Version: {documentVersion} Page {{page}}</div>", MaxHeight = 20 }; IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 在使用字符串插值时,请注意 {page} 周围的双括号--这样可以转义括号字符,从而在最终字符串中保留可合并字段。 这种模式的工作原理类似于您在事件驱动代码中处理 object sender, EventArgs e 参数的方式,在注入您自己的值的同时保持框架占位符的完整性。 开始使用 IronPDF 使用 IronPDF 只需几分钟即可在 PDF 文档中实现页眉和页脚。 通过 NuGet 包管理器安装库: Install-Package IronPdf !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-10.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图片 10 - 安装 或使用.NET CLI: dotnet add package IronPDF dotnet add package IronPDF SHELL 该库无需外部依赖性,安装后可立即运行。 从入门文档开始,探索 PDF 生成和操作的全部功能。 使用免费试用版试用 IronPDF,在您自己的项目中测试这些页眉和页脚的实现。 对于生产部署,许可选项可满足从个人开发人员到企业团队的各种需求。 !a href="/static-assets/pdf/blog/read-header-footer-itextsharp/read-header-footer-itextsharp-11.webp">How to Add Header and Footer in PDF Using iTextSharp and IronPDF in C# with Example:图像 11 - 许可 结论 在 C# 中为 PDF 文档添加页眉和页脚的过程从简单到复杂不等,这取决于您对库的选择。iText 7 通过事件处理程序(如 public override void OnEndPage )和使用 PdfWriter writer, PdfContentByte cb 模式的画布操作提供低级控制,而 IronPDF 则通过直观的 API(利用熟悉的 HTML 和 CSS 概念)提供相同的功能。 对于优先考虑快速实施和可维护代码的开发人员来说,IronPDF 的方法减少了页眉和页脚的实施,从几十行,包括 public class PdfFooter 处理程序、PdfPCell 单元 配置和新的 PdfPTable 结构减少到只有几个属性赋值。 基于 HTML 的样式选项为复杂的设计提供了可能性,而无需学习 PDF 特定的坐标系统或管理内容布局标题。 无论是生成带有公司品牌的发票、带有页面导航的报告,还是需要时间戳的合同,专业的页眉和页脚都能建立文档的可信度。 IronPDF文档提供了在.NET应用程序中实现这些和其他 PDF 功能的其他示例和 API 参考资料。 常见问题解答 如何使用 iTextSharp 为 PDF 添加页眉和页脚? 要使用 iTextSharp 为 PDF 添加页眉和页脚,可以定义一个页面事件处理程序,在 PDF 创建过程中自定义文档的页面。这包括覆盖 OnEndPage 方法,以包含所需的页眉和页脚内容。 使用 IronPdf 添加页眉和页脚有什么好处? IronPDF 通过提供简单明了的 API 简化了添加页眉和页脚的过程,并支持各种样式选项。它能与 C# 项目无缝集成,并提供 HTML 到 PDF 转换等附加功能,是一款适用于 PDF 操作的多功能工具。 IronPDF 和 iTextSharp 可以一起使用吗? 是的,IronPDF 和 iTextSharp 可以在 C# 项目中一起使用。iTextSharp 非常适合对 PDF 进行编程操作,而 IronPDF 则是对它的补充,它提供了额外的功能,如将 HTML 转换为 PDF,这对于动态生成页眉和页脚非常有用。 是否有办法使用 IronPDF 对页眉和页脚进行样式调整? IronPDF 允许您使用 HTML 和 CSS 对页眉和页脚进行样式设置。这让开发人员可以灵活地为 PDF 文档创建具有视觉吸引力的设计和布局。 IronPDF 如何处理页眉和页脚中的页码? IronPDF 可在页眉和页脚中自动插入页码。它可根据您的需要提供格式化页码的选项,如包含总页数或调整起始页码。 使用 IronPDF 的 C# 进行 PDF 操作有什么优势? 使用 IronPDF 的 C# 进行 PDF 操作具有很强的类型安全性,易于与 .NET 应用程序集成,并可访问各种库和工具,从而增强开发过程。IronPdf 的 C# API 设计直观、用户友好,使各种技能水平的开发人员都能使用。 我能否使用 IronPDF 将现有文档转换为 PDF? 是的,IronPDF 可以将各种文档格式(包括 HTML、ASPX 和其他基于网络的内容)转换为 PDF。这项功能对于从网页或动态生成的内容创建 PDF 尤其有用。 Curtis Chau 立即与工程团队聊天 技术作家 Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。 相关文章 已发布十二月 18, 2025 .NET PDF API 是 .NET 开发人员的指南。 如何使用 IronPDF for .NET 创建 .NET PDF API 阅读更多 已发布十二月 18, 2025 如何使用 Aspose C# 和 IronPDF 创建 PDF 通过这本专为开发人员设计的分步指南,了解如何使用 Aspose C# 和 IronPDF 创建 PDF。 阅读更多 已发布十二月 18, 2025 使用 IronPDF 创建 .NET Core PDF 生成器 使用 IronPDF 在 .NET Core 中构建强大的 PDF 生成器。将 HTML 转换为 PDF,创建发票,并通过像素完美的渲染生成报告。 阅读更多 使用 IronPDF 动态生成 .NET PDF如何在 ASP.NET 中使用 C# 和 ...
已发布十二月 18, 2025 如何使用 Aspose C# 和 IronPDF 创建 PDF 通过这本专为开发人员设计的分步指南,了解如何使用 Aspose C# 和 IronPDF 创建 PDF。 阅读更多
已发布十二月 18, 2025 使用 IronPDF 创建 .NET Core PDF 生成器 使用 IronPDF 在 .NET Core 中构建强大的 PDF 生成器。将 HTML 转换为 PDF,创建发票,并通过像素完美的渲染生成报告。 阅读更多