在 PDF 文档中添加页码不仅实用,而且美观,因为它提供了类似于专业出版材料的精美外观。无论您处理的是小说、报告还是任何其他类型的长文档的数字副本,添加页码都可以显著提高其可读性和实用性。在本文中,您将学习如何使用Spire.PDF for .NET在 C# 中向 PDF 文档添加页码。
Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。
E-iceblue 功能类库Spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件,不受其他国家的技术或法律法规限制,同时适配国产操作系统如中科方德、中标麒麟等,兼容国产文档处理软件 WPS(如 .wps/.et/.dps 等格式
Spire.PDF for.net下载
安装 Spire.PDF for .NET
首先,您需要将 Spire.PDF for.NET 包中包含的 DLL 文件作为引用添加到您的 .NET 项目中。 可以从此链接下载 DLL 文件,也可以通过NuGet安装。
PM> Install-Package Spire.PDF
PDF 坐标系
当使用 Spire.PDF for .NET 操作现有的 PDF 文档时,需要注意的是坐标系的原点位于页面的左上角。x 轴向右延伸,y 轴向下延伸。
通常,页码位于文档的页眉或页脚部分。因此,在确定页码的适当位置时,考虑页面大小和页边距至关重要。
在 C# 中的页脚中添加左对齐页码
在 Spire.PDF for .NET 库中,有两个可用的类:PdfPageNumberField和PdfPageCountField。这些类允许您在将当前页码和总页数添加到 PDF 文档的页面时检索和显示它们。如果您希望插入诸如“第 X 页”或“第 X 页,共 Y 页”之类的文本,则可以使用PdfCompositeField类,该类使您能够将所需文本与一个或多个字段组合成单个字段。以下是使用 C# 在 PDF 页脚中添加左对齐页码的步骤。
- 创建一个Document对象。
- 从指定页面加载 PDF 文件。
- 创建一个PdfPageNumberField对象和一个PdfPageCountField对象。
- 创建一个PdfCompositeField对象来创建“第 X 页,共 Y 页”格式。
- 使用PdfCompositeField.Location属性指定 PdfCompositeField 对象的位置。
- 遍历文档中的页面,并使用PdfCompositeField.Draw()方法将“第 X 页,共 Y 页”添加到页脚部分的左上角。
- 将文档保存为不同的 PDF 文件。
【C#】
using Spire.Pdf.AutomaticFields; using Spire.Pdf.Graphics; using Spire.Pdf; using System.Drawing; using Spire.Pdf.License;namespace AddPageNumbersToLeftCorner { class Program { static void Main(string[] args) { // Apply your license key LicenseProvider.SetLicenseKey("License Key");// Create a PdfDocument object PdfDocument doc = new PdfDocument();// Load a PDF file doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Terms of service.pdf");// Create font, brush and pen, which determine the appearance of the page numbers to be added PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 12, FontStyle.Regular), true); PdfBrush brush = PdfBrushes.Black; PdfPen pen = new PdfPen(brush, 1.0f);// Create a PdfPageNumberField object and a PdfPageCountField object PdfPageNumberField pageNumberField = new PdfPageNumberField(); PdfPageCountField pageCountField = new PdfPageCountField();// Create a PdfCompositeField object to combine page count field and page number field in a single field PdfCompositeField compositeField = new PdfCompositeField(font, brush, "Page {0} of {1}", pageNumberField, pageCountField);// Get the page size SizeF pageSize = doc.Pages[0].Size;// Set the location of the composite field compositeField.Location = new PointF(72, pageSize.Height - 45);// Iterate through the pages in the document for (int i = 0; i < doc.Pages.Count; i++) {// Get a specific page PdfPageBase page = doc.Pages[i];// Draw a line at the specified position page.Canvas.DrawLine(pen, 72, pageSize.Height - 50, pageSize.Width - 72, pageSize.Height - 50);// Draw the composite field on the page compositeField.Draw(page.Canvas); }// Save to a different PDF file doc.SaveToFile("AddPageNumbersToLeftCorner.pdf");// Dispose resources doc.Dispose(); } } }
在 C# 中的页脚中添加居中对齐的页码
为了将页脚部分的页码与中心对齐,动态计算文本“第 X 页,共 Y 页”的宽度至关重要。此计算至关重要,因为它决定了页码 ( PdfCompositeField ) 的 X 坐标。要实现居中对齐,X 坐标的计算方法是从页面宽度中减去页码的宽度,然后将结果除以 2,如下所示:(PageWidth - PageNumberWidth)/2。
以下是使用 C# 在 PDF 页脚中添加居中对齐页码的步骤。
- 创建一个Document对象。
- 从指定页面加载 PDF 文件。
- 创建一个PdfPageNumberField对象和一个PdfPageCountField对象。
- 创建一个PdfCompositeField对象来创建“第 X 页,共 Y 页”格式。
- 使用PdfCompositeField.Location属性指定 PdfCompositeField 对象的位置。
- 遍历文档中的页面,并使用PdfCompositeField.Draw()方法将“第 X 页,共 Y 页”添加到页脚部分的中心。
- 将文档保存为不同的 PDF 文件。
【C#】
using Spire.Pdf.AutomaticFields; using Spire.Pdf.Graphics; using Spire.Pdf; using System.Drawing; using Spire.Pdf.License;namespace AddPageNumbersToCenter { class Program { static void Main(string[] args) { // Apply your license key LicenseProvider.SetLicenseKey("License Key");// Create a PdfDocument object PdfDocument doc = new PdfDocument();// Load a PDF file doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Terms of service.pdf");// Create font, brush and pen, which determine the appearance of the page numbers to be added PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 12, FontStyle.Regular), true); PdfBrush brush = PdfBrushes.Black; PdfPen pen = new PdfPen(brush, 1.0f);// Create a PdfPageNumberField object and a PdfPageCountField object PdfPageNumberField pageNumberField = new PdfPageNumberField(); PdfPageCountField pageCountField = new PdfPageCountField();// Create a PdfCompositeField object to combine page count field and page number field in a single field PdfCompositeField compositeField = new PdfCompositeField(font, brush, "Page {0} of {1}", pageNumberField, pageCountField);// Iterate through the pages in the document for (int i = 0; i < doc.Pages.Count; i++) {// Get a specific page PdfPageBase page = doc.Pages[i];// Get the page size SizeF pageSize = doc.Pages[i].Size;// Draw a line at the specified position page.Canvas.DrawLine(pen, 72, pageSize.Height - 50, pageSize.Width - 72, pageSize.Height - 50);// Measure the size the "Page X of Y" SizeF pageNumberSize = font.MeasureString(string.Format("Page {0} of {1}", i + 1, doc.Pages.Count));// Set the location of the composite field compositeField.Location = new PointF((pageSize.Width - pageNumberSize.Width) / 2, pageSize.Height - 45);// Draw the composite field on the page compositeField.Draw(page.Canvas);}// Save to a different PDF file doc.SaveToFile("AddPageNumbersToCenter.pdf");// Dispose resources doc.Dispose(); } } }
在 C# 中的页脚中添加右对齐页码
要将页码定位在页脚部分的右上角,还必须动态计算文本“第 X 页,共 Y 页”的宽度。因为页码 ( PdfCompositeField ) 的 X 坐标是通过从页面宽度中减去页码和右页边距的组合宽度来确定的,如下所示:PageWidth - (PageNumberWidth + RightPageMargin)。
以下是使用 C# 在 PDF 页脚中添加右对齐页码的步骤。
- 创建一个Document对象。
- 从指定页面加载 PDF 文件。
- 创建一个PdfPageNumberField对象和一个PdfPageCountField对象。
- 创建一个PdfCompositeField对象来创建“第 X 页,共 Y 页”格式。
- 使用PdfCompositeField.Location属性指定 PdfCompositeField 对象的位置。
- 遍历文档中的页面,并使用PdfCompositeField.Draw()方法将“第 X 页,共 Y 页”添加到页脚部分的右上角。
- 将文档保存为不同的 PDF 文件。
【C#】
using Spire.Pdf.AutomaticFields; using Spire.Pdf.Graphics; using Spire.Pdf; using System.Drawing; using Spire.Pdf.License;namespace AddPageNumbersToRigthCorner { class Program { static void Main(string[] args) { // Apply your license key LicenseProvider.SetLicenseKey("License Key");// Create a PdfDocument object PdfDocument doc = new PdfDocument();// Load a PDF file doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Terms of service.pdf");// Create font, brush and pen, which determine the appearance of the page numbers to be added PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Times New Roman", 12, FontStyle.Regular), true); PdfBrush brush = PdfBrushes.Black; PdfPen pen = new PdfPen(brush, 1.0f);// Create a PdfPageNumberField object and a PdfPageCountField object PdfPageNumberField pageNumberField = new PdfPageNumberField(); PdfPageCountField pageCountField = new PdfPageCountField();// Create a PdfCompositeField object to combine page count field and page number field in a single field PdfCompositeField compositeField = new PdfCompositeField(font, brush, "Page {0} of {1}", pageNumberField, pageCountField);// Iterate through the pages in the document for (int i = 0; i < doc.Pages.Count; i++) {// Get a specific page PdfPageBase page = doc.Pages[i];// Get the page size SizeF pageSize = doc.Pages[i].Size;// Draw a line at the specified position page.Canvas.DrawLine(pen, 72, pageSize.Height - 50, pageSize.Width - 72, pageSize.Height - 50);// Measure the size the "Page X of Y" SizeF pageNumberSize = font.MeasureString(string.Format("Page {0} of {1}", i + 1, doc.Pages.Count));// Set the location of the composite field compositeField.Location = new PointF(pageSize.Width - pageNumberSize.Width - 72, pageSize.Height - 45);// Draw the composite field on the page compositeField.Draw(page.Canvas);}// Save to a different PDF file doc.SaveToFile("AddPageNumbersToRigthCorner.pdf");// Dispose resources doc.Dispose(); } } }