產品比較 PDF頁眉和頁腳:IronPDF與iTextSharp比較 Curtis Chau 更新:2026年3月1日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 Full Comparison Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Itext on pricing, HTML support, and licensing. View Full Comparison IronPDF透過基於屬性的配置和原生 HTML 支援簡化了 PDF 頁首和頁尾的創建,而 iTextSharp 需要透過手動座標計算來實現精確定位。 在製作專業 PDF 文件(例如商業報告、發票、技術文件)時,一致的頁首和頁尾能夠體現品質並強化品牌形象。 使用過iTextSharp 的開發人員都知道其中的挑戰:新增頁首和頁尾意味著要編寫頁面事件處理程序、計算座標以及在底層管理字體。 IronPDF採用了一種截然不同的方法,它允許您描述您想要的內容,而不是指定每個像素。 本指南將對這兩個庫進行並排介紹,以便您在下一個專案中做出明智的選擇。 如何安裝IronPDF? 在進行比較之前,這裡先介紹如何將IronPDF加入到.NET 10 專案中。 在 Visual Studio 中使用.NET CLI 或NuGet套件管理器控制台: dotnet add package IronPdf # Or in the NuGet Package Manager Console: # Install-Package IronPdf dotnet add package IronPdf # Or in the NuGet Package Manager Console: # Install-Package IronPdf SHELL 安裝完成後,在應用程式啟動時新增一次性許可證金鑰呼叫: IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"; IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"; $vbLabelText $csharpLabel IronPDF NuGet套件面向.NET 8+,並隨附 Chromium 引擎,因此無需額外的執行時間相依性。 我們提供免費試用許可證,以便您在購買前在您的環境中評估IronPDF 。 iTextSharp 實現頁首和頁尾面臨哪些挑戰? 使用 iTextSharp 需要實作 PdfPageEventHelper 類別並重寫 OnEndPage 方法以新增頁首和頁尾。 這種方法涉及直接操作 PdfContentByte 物件和精確的座標計算。 與現代HTML 轉 PDF解決方案不同,iTextSharp 的事件驅動架構需要對 PDF 結構和座標系統有深入的了解。 座標系從頁面左下角開始,這與大多數開發者對佈局的思考方式相反。 這是PDF 規範對頁面座標空間定義方式的直接結果。 每次頁面尺寸改變時——例如,從 A4 切換到 Letter——每個座標值都需要重新計算。 在頁首下方新增底線、將文字置中或將頁尾與右邊距對齊都需要明確的數值偏移。 public class HeaderFooterEvent : PdfPageEventHelper { private readonly Font headerFont = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD); private readonly Font footerFont = new Font(Font.FontFamily.HELVETICA, 10); public override void OnEndPage(PdfWriter writer, Document document) { PdfContentByte cb = writer.DirectContent; // Add header text -- requires precise Y coordinate calculation float headerY = document.PageSize.Height - 30; ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, new Phrase("Company Report", headerFont), document.PageSize.Width / 2, headerY, 0); // Draw underline manually cb.MoveTo(40, headerY - 5); cb.LineTo(document.PageSize.Width - 40, headerY - 5); cb.Stroke(); // Add footer with page number string footerText = $"Page {writer.PageNumber}"; ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(footerText, footerFont), document.PageSize.Width - 40, 30, 0); // Add date on left side ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, new Phrase(DateTime.Now.ToString("MM/dd/yyyy"), footerFont), 40, 30, 0); } } // Usage PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.PageEvent = new HeaderFooterEvent(); public class HeaderFooterEvent : PdfPageEventHelper { private readonly Font headerFont = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD); private readonly Font footerFont = new Font(Font.FontFamily.HELVETICA, 10); public override void OnEndPage(PdfWriter writer, Document document) { PdfContentByte cb = writer.DirectContent; // Add header text -- requires precise Y coordinate calculation float headerY = document.PageSize.Height - 30; ColumnText.ShowTextAligned(cb, Element.ALIGN_CENTER, new Phrase("Company Report", headerFont), document.PageSize.Width / 2, headerY, 0); // Draw underline manually cb.MoveTo(40, headerY - 5); cb.LineTo(document.PageSize.Width - 40, headerY - 5); cb.Stroke(); // Add footer with page number string footerText = $"Page {writer.PageNumber}"; ColumnText.ShowTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(footerText, footerFont), document.PageSize.Width - 40, 30, 0); // Add date on left side ColumnText.ShowTextAligned(cb, Element.ALIGN_LEFT, new Phrase(DateTime.Now.ToString("MM/dd/yyyy"), footerFont), 40, 30, 0); } } // Usage PdfWriter writer = PdfWriter.GetInstance(document, stream); writer.PageEvent = new HeaderFooterEvent(); $vbLabelText $csharpLabel 當處理不同的頁面方向、自訂紙張尺寸或不同的邊距要求時,這種手動定位方法會變得更加複雜。 對於需要符合 PDF/A 標準或數位簽章的生產系統,手動方法會增加大量的維護成本。 帶有基本標頭的輸出是什麼樣的? 上面的程式碼示範了所需的手動工作——您需要計算精確的座標,單獨管理字體,並透過 DirectContent 處理渲染。 每一次設計變更都意味著要編輯散佈在事件處理程序中的數值常數。 為什麼基於座標的佈局會造成維護問題? 當設計發生變更時——例如移動徽標、調整字體大小、將日期移到中心——開發人員必須透過像素偏移來了解需要更改的內容。 沒有視覺層; 程式碼本身就是佈局的唯一規範。 這使得開發人員之間的交接容易出錯,並增加了即使是細微的視覺修改也需要花費的時間。 IronPDF如何簡化頁首和頁尾的創建? IronPDF透過直覺的 API 改變了頁首和頁尾的創建過程。 無需實現事件處理程序,即可透過簡單的屬性設定來配置頁首和頁尾。 ChromePdfRenderer。 這種方法符合現代.NET開發實踐,並大大降低了學習難度。 using IronPdf; var renderer = new ChromePdfRenderer(); // Configure text header with multiple properties renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Company Report", LeftText = "CONFIDENTIAL", RightText = DateTime.Now.ToString("MMMM yyyy"), DrawDividerLine = true, FontSize = 12, FontFamily = "Arial", Spacing = 5 }; // Configure text footer with dynamic placeholders renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date} {time}", CenterText = "© 2024 Company Name", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10, Spacing = 10 }; // Set margins to ensure proper spacing renderer.RenderingOptions.MarginTop = 30; renderer.RenderingOptions.MarginBottom = 25; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // Configure text header with multiple properties renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Company Report", LeftText = "CONFIDENTIAL", RightText = DateTime.Now.ToString("MMMM yyyy"), DrawDividerLine = true, FontSize = 12, FontFamily = "Arial", Spacing = 5 }; // Configure text footer with dynamic placeholders renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date} {time}", CenterText = "© 2024 Company Name", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10, Spacing = 10 }; // Set margins to ensure proper spacing renderer.RenderingOptions.MarginTop = 30; renderer.RenderingOptions.MarginBottom = 25; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("report.pdf"); $vbLabelText $csharpLabel IronPDF中的渲染選項可以對 PDF 產生進行精細控制,同時保持程式碼的可讀性。 這種基於屬性的方法使得維護和修改頁首和頁尾變得容易,而無需深入了解底層 PDF 操作。 IronPDF如何處理專業格式? 差異顯而易見IronPDF可以自動處理定位、邊距和渲染,同時為動態內容提供內建佔位符。 該程式庫的Chrome 渲染引擎可確保像素級完美的輸出,與您的 HTML 預覽完全一致。 生產系統中哪些特性最為重要? 功能對比:iTextSharp 與IronPDF在頁首和頁尾的比較 特徵 iTextSharp IronPDF 實作方法 `PdfPageEventHelper`類 `RenderingOptions`屬性 程式碼複雜度 手動座標計算 簡單屬性賦值 頁碼 使用`writer.PageNumber`進行手動追蹤 內建`{page}`佔位符 HTML 支援 有限,需要 XMLWorker 原生 HTML 標頭支持 利潤管理 手動計算 自動調節 動態內容 需要客製化實現 預定義佔位符 第一頁不同 複雜條件邏輯 `FirstPageNumber`屬性 學習曲線 陡 逐漸地 如何新增帶頁碼的頁首和頁尾? 頁碼是PDF文件的標準要求。 使用 iTextSharp 時,您必須手動追蹤當前頁碼和總頁數,通常需要兩次才能獲得準確的總頁數: // iTextSharp approach with complete page numbering public class CompleteHeaderFooterEvent : PdfPageEventHelper { private readonly PdfTemplate totalPageCount; private readonly Font normalFont = new Font(Font.FontFamily.HELVETICA, 10); public CompleteHeaderFooterEvent(PdfWriter writer) { // Create placeholder for total page count totalPageCount = writer.DirectContent.CreateTemplate(30, 16); } public override void OnEndPage(PdfWriter writer, Document document) { PdfPTable footerTable = new PdfPTable(3); footerTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin; footerTable.SetWidths(new float[] { 1, 1, 1 }); PdfPCell leftCell = new PdfPCell(new Phrase(DateTime.Now.ToString("dd/MM/yyyy"), normalFont)); leftCell.Border = Rectangle.NO_BORDER; leftCell.HorizontalAlignment = Element.ALIGN_LEFT; PdfPCell centerCell = new PdfPCell(new Phrase("Confidential", normalFont)); centerCell.Border = Rectangle.NO_BORDER; centerCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfPCell rightCell = new PdfPCell(); rightCell.Border = Rectangle.NO_BORDER; rightCell.HorizontalAlignment = Element.ALIGN_RIGHT; Chunk pageNum = new Chunk($"Page {writer.PageNumber} of ", normalFont); rightCell.AddElement(pageNum); rightCell.AddElement(Image.GetInstance(totalPageCount)); footerTable.AddCell(leftCell); footerTable.AddCell(centerCell); footerTable.AddCell(rightCell); footerTable.WriteSelectedRows(0, -1, document.LeftMargin, document.PageSize.GetBottom(document.BottomMargin), writer.DirectContent); } public override void OnCloseDocument(PdfWriter writer, Document document) { ColumnText.ShowTextAligned(totalPageCount, Element.ALIGN_LEFT, new Phrase(writer.PageNumber.ToString(), normalFont), 0, 0, 0); } } // iTextSharp approach with complete page numbering public class CompleteHeaderFooterEvent : PdfPageEventHelper { private readonly PdfTemplate totalPageCount; private readonly Font normalFont = new Font(Font.FontFamily.HELVETICA, 10); public CompleteHeaderFooterEvent(PdfWriter writer) { // Create placeholder for total page count totalPageCount = writer.DirectContent.CreateTemplate(30, 16); } public override void OnEndPage(PdfWriter writer, Document document) { PdfPTable footerTable = new PdfPTable(3); footerTable.TotalWidth = document.PageSize.Width - document.LeftMargin - document.RightMargin; footerTable.SetWidths(new float[] { 1, 1, 1 }); PdfPCell leftCell = new PdfPCell(new Phrase(DateTime.Now.ToString("dd/MM/yyyy"), normalFont)); leftCell.Border = Rectangle.NO_BORDER; leftCell.HorizontalAlignment = Element.ALIGN_LEFT; PdfPCell centerCell = new PdfPCell(new Phrase("Confidential", normalFont)); centerCell.Border = Rectangle.NO_BORDER; centerCell.HorizontalAlignment = Element.ALIGN_CENTER; PdfPCell rightCell = new PdfPCell(); rightCell.Border = Rectangle.NO_BORDER; rightCell.HorizontalAlignment = Element.ALIGN_RIGHT; Chunk pageNum = new Chunk($"Page {writer.PageNumber} of ", normalFont); rightCell.AddElement(pageNum); rightCell.AddElement(Image.GetInstance(totalPageCount)); footerTable.AddCell(leftCell); footerTable.AddCell(centerCell); footerTable.AddCell(rightCell); footerTable.WriteSelectedRows(0, -1, document.LeftMargin, document.PageSize.GetBottom(document.BottomMargin), writer.DirectContent); } public override void OnCloseDocument(PdfWriter writer, Document document) { ColumnText.ShowTextAligned(totalPageCount, Element.ALIGN_LEFT, new Phrase(writer.PageNumber.ToString(), normalFont), 0, 0, 0); } } $vbLabelText $csharpLabel 此模式需要建立一個 PDF 範本物件作為佔位符,然後在文件關閉後回填總頁數。 對於不熟悉 iTextSharp 內部機制的人來說,該操作的兩遍特性並不明顯,如果操作錯誤,最終生成的 PDF 文件中的頁數就會不正確。 IronPDF 的方法為何更容易維護? IronPDF使用內建佔位符和自動頁碼處理功能來處理頁碼: using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date} {time}", CenterText = "Confidential -- Internal Use Only", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10, FontFamily = "Calibri", Spacing = 8 }; // Skip numbering on cover page renderer.RenderingOptions.FirstPageNumber = 0; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginTop = 30; var pdf = renderer.RenderHtmlAsPdf(htmlContent); using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextFooter = new TextHeaderFooter { LeftText = "{date} {time}", CenterText = "Confidential -- Internal Use Only", RightText = "Page {page} of {total-pages}", DrawDividerLine = true, FontSize = 10, FontFamily = "Calibri", Spacing = 8 }; // Skip numbering on cover page renderer.RenderingOptions.FirstPageNumber = 0; renderer.RenderingOptions.MarginBottom = 25; renderer.RenderingOptions.MarginTop = 30; var pdf = renderer.RenderHtmlAsPdf(htmlContent); $vbLabelText $csharpLabel 內建佔位符支援 {pdf-title}、{html-title}DE-7760--@。 無需複雜的後製或兩遍渲染。 該函式庫會在內部計算總頁數,並自動將其註入到每個佔位符位置。 能否創建具有動態內容的HTML頭部? 對於包含公司徽標、樣式化排版或結構化表格的佈局,HTML 標題比基於文字的標題提供了更大的靈活性。 IronPDF在這方面表現出色,它對原生HTML頁首和頁尾提供了支援: using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 0;'> <img src='logo.png' style='height: 40px;'> <div style='text-align: center;'> <h2 style='margin: 0; color: #2c3e50;'>Annual Report 2024</h2> <p style='margin: 0; font-size: 12px; color: #7f8c8d;'>Financial Performance & Strategic Overview</p> </div> <div style='text-align: right; font-size: 11px; color: #95a5a6;'> Document ID: AR-2024-001<br> Classification: Public </div> </div>", MaxHeight = 80, DrawDividerLine = true, BaseUrl = new Uri(System.IO.Path.GetFullPath("assets/")).AbsoluteUri }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <table style='width: 100%; font-size: 10px; color: #34495e;'> <tr> <td style='width: 33%; text-align: left;'>Generated: {date} at {time}</td> <td style='width: 34%; text-align: center;'>Page {page} of {total-pages}</td> <td style='width: 33%; text-align: right;'>Annual Report 2024</td> </tr> </table>", MaxHeight = 30, DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("annual-report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = @" <div style='width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 0;'> <img src='logo.png' style='height: 40px;'> <div style='text-align: center;'> <h2 style='margin: 0; color: #2c3e50;'>Annual Report 2024</h2> <p style='margin: 0; font-size: 12px; color: #7f8c8d;'>Financial Performance & Strategic Overview</p> </div> <div style='text-align: right; font-size: 11px; color: #95a5a6;'> Document ID: AR-2024-001<br> Classification: Public </div> </div>", MaxHeight = 80, DrawDividerLine = true, BaseUrl = new Uri(System.IO.Path.GetFullPath("assets/")).AbsoluteUri }; renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { HtmlFragment = @" <table style='width: 100%; font-size: 10px; color: #34495e;'> <tr> <td style='width: 33%; text-align: left;'>Generated: {date} at {time}</td> <td style='width: 34%; text-align: center;'>Page {page} of {total-pages}</td> <td style='width: 33%; text-align: right;'>Annual Report 2024</td> </tr> </table>", MaxHeight = 30, DrawDividerLine = true }; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("annual-report.pdf"); $vbLabelText $csharpLabel 複雜頭部在實踐中是如何渲染的? 使用 iTextSharp 實作 HTML 標頭需要新增 XMLWorker 擴充功能並編寫複雜的解析程式碼。 該庫對 CSS 的支援有限,因此難以產生在不同紙張尺寸上都能可靠工作的現代佈局。 圖片、彈性佈局和網頁字體需要一些變通方法,這大大增加了程式碼的複雜性。 如何區別對待首頁標題? 許多專業文件需要在封面頁使用不同的頁首-封面頁使用較大的徽標,後續頁面使用簡潔的頁首。 IronPDF透過條件 HTML 和 CSS 支援這種模式: using IronPdf; var renderer = new ChromePdfRenderer(); string firstPageHeader = @" <div style='text-align: center; padding: 20px 0;'> <img src='logo-large.png' style='height: 80px; margin-bottom: 10px;'> <h1 style='margin: 0; color: #2c3e50;'>2024 Annual Report</h1> <h3 style='margin: 5px 0; color: #7f8c8d;'>Fiscal Year Ending December 31, 2024</h3> </div>"; string subsequentPageHeader = @" <div style='display: flex; justify-content: space-between; align-items: center;'> <img src='logo-small.png' style='height: 30px;'> <span>Annual Report 2024</span> <span>Page {page}</span> </div>"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = $@" <style> .first-page {{ display: none; }} .other-pages {{ display: block; }} @page:first {{ .first-page {{ display: block; }} .other-pages {{ display: none; }} }} </style> <div class='first-page'>{firstPageHeader}</div> <div class='other-pages'>{subsequentPageHeader}</div>", MaxHeight = 100 }; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("report-with-cover.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); string firstPageHeader = @" <div style='text-align: center; padding: 20px 0;'> <img src='logo-large.png' style='height: 80px; margin-bottom: 10px;'> <h1 style='margin: 0; color: #2c3e50;'>2024 Annual Report</h1> <h3 style='margin: 5px 0; color: #7f8c8d;'>Fiscal Year Ending December 31, 2024</h3> </div>"; string subsequentPageHeader = @" <div style='display: flex; justify-content: space-between; align-items: center;'> <img src='logo-small.png' style='height: 30px;'> <span>Annual Report 2024</span> <span>Page {page}</span> </div>"; renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter { HtmlFragment = $@" <style> .first-page {{ display: none; }} .other-pages {{ display: block; }} @page:first {{ .first-page {{ display: block; }} .other-pages {{ display: none; }} }} </style> <div class='first-page'>{firstPageHeader}</div> <div class='other-pages'>{subsequentPageHeader}</div>", MaxHeight = 100 }; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("report-with-cover.pdf"); $vbLabelText $csharpLabel 這種方法將頁首定義集中在一個地方,以便同時更新封面和內頁頁首。 您也可以探索非同步 PDF 渲染在高吞吐量場景下的應用。 哪種方法能提供更好的效能和彈性? 產生大型文件或同時處理多個 PDF 文件時,效能至關重要。 IronPDF 的Chrome 渲染引擎為生產工作負載提供了幾個優勢: 1.渲染效能: IronPDF會快取已渲染的頁首和頁腳,提升多頁文件的吞吐量。 2.記憶體效率:此程式庫自動處理記憶體管理,避免手動操作可能導致的記憶體洩漏。 3.並行處理:支援非同步操作,可使用Task.WhenAll模式高效產生批次任務 using IronPdf; public async Task GenerateReportsAsync(List<ReportData> reports) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Monthly Report", DrawDividerLine = true }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Disable JavaScript if not required for faster rendering renderer.RenderingOptions.EnableJavaScript = false; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; var tasks = reports.Select(async report => { string html = await GenerateHtmlAsync(report); return await renderer.RenderHtmlAsPdfAsync(html); }); PdfDocument[] pdfs = await Task.WhenAll(tasks); } using IronPdf; public async Task GenerateReportsAsync(List<ReportData> reports) { var renderer = new ChromePdfRenderer(); renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Monthly Report", DrawDividerLine = true }; renderer.RenderingOptions.TextFooter = new TextHeaderFooter { RightText = "Page {page} of {total-pages}", DrawDividerLine = true }; // Disable JavaScript if not required for faster rendering renderer.RenderingOptions.EnableJavaScript = false; renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; var tasks = reports.Select(async report => { string html = await GenerateHtmlAsync(report); return await renderer.RenderHtmlAsPdfAsync(html); }); PdfDocument[] pdfs = await Task.WhenAll(tasks); } $vbLabelText $csharpLabel 生產用途的許可方面需要考慮哪些因素? 與 iTextSharp 的 AGPL 許可相比,IronPDF 的許可模式提供了對商業用戶友好的條款,除非您購買單獨的商業 iText 許可,否則 AGPL 許可要求您開源您的應用程式程式碼。 對於生產系統, IronPDF提供: 永久授權,無任何續費 支援在Windows 、 Linux 、 macOS和Azure上部署 為授權使用者提供支持 生產輸出中無浮水印 團隊的學習曲線有多陡峭? 對於熟悉 iTextSharp 頁面事件系統的開發人員來說,會有一個適應期,但 IronPDF 的文件和範例使其易於管理。 使用 CSS 進行樣式設定和 HTML 進行佈局的能力,為實作 iTextSharp 中需要編寫大量自訂程式碼才能實現的功能開闢了新的可能性。相關文件包括: -快速入門指南,幫助您快速上手 涵蓋常見場景的程式碼範例 生產問題故障排除指南 包含完整 IntelliSense 支援的API 參考 邊距和間距的計算方式有何不同? 專業文件排版需要精確控制頁邊距。 IronPDF使用毫米作為測量單位簡化了這個過程——毫米是印刷佈局的天然單位: using IronPdf; var renderer = new ChromePdfRenderer(); // Set margins in millimeters renderer.RenderingOptions.MarginTop = 25.4; // 1 inch renderer.RenderingOptions.MarginBottom = 25.4; renderer.RenderingOptions.MarginLeft = 19.05; // 0.75 inch renderer.RenderingOptions.MarginRight = 19.05; renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Internal Report", DrawDividerLine = true, Spacing = 5 }; // Use print CSS media type for accurate page layout // See MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/print renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("margin-report.pdf"); using IronPdf; var renderer = new ChromePdfRenderer(); // Set margins in millimeters renderer.RenderingOptions.MarginTop = 25.4; // 1 inch renderer.RenderingOptions.MarginBottom = 25.4; renderer.RenderingOptions.MarginLeft = 19.05; // 0.75 inch renderer.RenderingOptions.MarginRight = 19.05; renderer.RenderingOptions.TextHeader = new TextHeaderFooter { CenterText = "Internal Report", DrawDividerLine = true, Spacing = 5 }; // Use print CSS media type for accurate page layout // See MDN reference: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/print renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; var pdf = renderer.RenderHtmlAsPdf(htmlContent); pdf.SaveAs("margin-report.pdf"); $vbLabelText $csharpLabel 相較之下,iTextSharp 的基於座標的方法需要計算相對於頁面邊界的位置,並手動驗證內容是否與頁首或頁尾重疊。 下一步計劃是什麼? 在 PDF 文件中加入頁首和頁尾並不一定需要複雜的事件處理和座標計算。 雖然 iTextSharp 的方法透過頁面事件和直接內容操作提供精細的控制,但IronPDF提供了一個更直觀的解決方案,它基於屬性的配置和原生 HTML 支援。 考慮到開發速度、可維護性和產生專業外觀文件的便利性,選擇就變得顯而易見了。 IronPDF 對頁首和頁尾的處理方式體現了現代 PDF 生成的特點——功能強大且易於使用。 對於重視架構清晰且程式碼可維護性的團隊而言,IronPDF 的 API 與.NET開發實務非常契合。 生產系統的主要優點包括: -縮短開發時間:基於屬性的配置與複雜的事件處理程序相比 -更易於維護:使用 HTML/CSS 進行佈局,而不是座標計算 -增強靈活性:原生支援響應式設計和網頁字體 -卓越效能:優化渲染,支援快取和並行處理 -專業效果:像素級完美輸出,符合現代網路標準 首先透過NuGet安裝IronPDF ,然後按照快速入門指南操作,即可在幾分鐘內建立您的第一個頁首和頁尾。 準備投入生產時,請查看授權選項,找到符合您部署要求的方案。 如果在整合過程中遇到任何問題,支援團隊隨時為您提供協助。 請注意iTextSharp 是其各自所有者的註冊商標。 本網站與iTextSharp無任何關聯,亦未獲得其認可或贊助。所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映的是撰寫本文時可公開取得的資訊。 常見問題解答 IronPDF 和 iTextSharp 在添加頁眉和頁脚方面的主要区别是什么? IronPDF 使用具有原生 HTML 支援的基於屬性的 API,而 iTextSharp 需要通過手動坐標計算實現 PdfPageEventHelper。IronPDF 還提供了頁碼、日期和 URL 的內建佔位符。 IronPDF 如何簡化頁面標頭的添加? IronPDF 允許您通過 ChromePdfRenderer.RenderingOptions 上的 TextHeaderFooter 或 HtmlHeaderFooter 屬性配置頁眉,消除了需要處理頁面事件或計算像素位置的必要性。 是否可以在 IronPDF 中使用 HTML 自訂標頭? 是的,IronPDF 支援通過 HtmlHeaderFooter 類進行基於 HTML 的頁眉和頁腳,從而實現完整的 CSS 樣式、圖片和動態佔位符,如 {page} 和 {total-pages}。 使用 IronPDF 製作商業報表有什麼好處? IronPDF 通過基於屬性配置減少實施時間,支援頁碼和日期的動態佔位符,並使用 Chromium 引擎以像素級精度渲染頁眉。 IronPDF 可以處理頁首和頁尾的頁碼嗎? 是的,IronPDF 通過內建的佔位符如 {page} 和 {total-pages} 自動處理頁碼,無需兩遍渲染。 IronPDF 和 iTextSharp 在易用性方面相比如何? IronPDF 一般更容易使用,因為它用聲明性屬性 API 取代了基於坐標的低級事件處理器,並支援 HTML/CSS 進行佈局。 IronPDF 是否支持標頭中的動態內容? 是的,IronPDF 支援內建佔位符({page}、{total-pages}、{date}、{time}、{html-title}、{url})的動態內容,適用於文本和 HTML 頁眉。 是什麼讓 IronPDF 更適合文件專案? IronPDF 的 HTML 頁眉支援使其適合需要一致樣式、公司品牌和易於更新的文檔。修改需要編輯 HTML,而不是數字坐標常數。 我可以使用 IronPDF 自訂標頭的發票嗎? 是的,IronPDF 支援帶有標誌、樣式文本和動態字段的自定義 HTML 頁眉,使其非常適合發票生成。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新2026年3月1日 在 ASP.NET MVC 中生成 PDF:iTextSharp vs IronPDF 指南 比較在 ASP.NET MVC 中使用 iTextSharp vs IronPDF 的 PDF 產生方法。發現哪個函式庫能提供更好的 HTML 呈現以及更容易的實作。 閱讀更多 更新2026年2月1日 Ghostscript GPL vs IronPDF:技術比較指南 探索 Ghostscript GPL 與 IronPDF 的主要差異。比較 AGPL 授權與商業授權、指令列開關與本機 .NET API,以及 HTML-to-PDF 功能。 閱讀更多 更新2026年3月1日 ASP PDF 庫:比較 IronPDF、Aspose 和 Syncfusion 發現適用於 ASP.NET Core 應用程式的最佳 PDF 庫。比較 IronPDF 的 Chrome 引擎與 Aspose 和 Syncfusion 的替代方案。 閱讀更多 ASP PDF 庫:比較 IronPDF、Aspose 和 Syncfusion修復 iTextSharp 在 HTML 到 PDF ...
更新2026年3月1日 在 ASP.NET MVC 中生成 PDF:iTextSharp vs IronPDF 指南 比較在 ASP.NET MVC 中使用 iTextSharp vs IronPDF 的 PDF 產生方法。發現哪個函式庫能提供更好的 HTML 呈現以及更容易的實作。 閱讀更多
更新2026年2月1日 Ghostscript GPL vs IronPDF:技術比較指南 探索 Ghostscript GPL 與 IronPDF 的主要差異。比較 AGPL 授權與商業授權、指令列開關與本機 .NET API,以及 HTML-to-PDF 功能。 閱讀更多
更新2026年3月1日 ASP PDF 庫:比較 IronPDF、Aspose 和 Syncfusion 發現適用於 ASP.NET Core 應用程式的最佳 PDF 庫。比較 IronPDF 的 Chrome 引擎與 Aspose 和 Syncfusion 的替代方案。 閱讀更多