向 pdf 文档添加页码不仅实用,而且具有美观效果,因为它能使文档呈现出类似专业出版物的精致外观。无论您处理的是小说的电子版、报告,还是其他类型的长篇文档,添加页码都能显著提高其可读性和使用价值。在本文中,您将学习如何在 c# 中使用 spire.pdf for .net 向 pdf 文档添加页码。
安装 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 类,它允许您将所需文本与一个或多个字段组合成单一字段。
具体示例代码如下:
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)
{
// 应用许可证密钥
licenseprovider.setlicensekey("license key");
// 创建 pdfdocument 对象
pdfdocument doc = new pdfdocument();
// 加载 pdf 文件
doc.loadfromfile("c:\\users\\administrator\\desktop\\terms of service.pdf");
// 创建字体、画刷和画笔,用于设置页码的显示样式
pdftruetypefont font = new pdftruetypefont(new font("times new roman", 12, fontstyle.regular), true);
pdfbrush brush = pdfbrushes.black;
pdfpen pen = new pdfpen(brush, 1.0f);
// 创建 pdfpagenumberfield 对象和 pdfpagecountfield 对象
pdfpagenumberfield pagenumberfield = new pdfpagenumberfield();
pdfpagecountfield pagecountfield = new pdfpagecountfield();
// 创建 pdfcompositefield 对象,将页码字段和总页数字段组合为一个字段
pdfcompositefield compositefield = new pdfcompositefield(font, brush, "page {0} of {1}", pagenumberfield, pagecountfield);
// 获取页面尺寸
sizef pagesize = doc.pages[0].size;
// 设置复合字段的位置
compositefield.location = new pointf(72, pagesize.height - 45);
// 遍历文档中的每一页
for (int i = 0; i < doc.pages.count; i++)
{
// 获取指定页面
pdfpagebase page = doc.pages[i];
// 在指定位置绘制一条直线
page.canvas.drawline(pen, 72, pagesize.height - 50, pagesize.width - 72, pagesize.height - 50);
// 在页面上绘制复合字段
compositefield.draw(page.canvas);
}
// 保存为新的 pdf 文件
doc.savetofile("addpagenumberstoleftcorner.pdf");
// 释放资源
doc.dispose();
}
}
}在 c# 中在页脚添加居中对齐的页码
为了将页脚中的页码居中对齐,关键在于动态计算文本 “第 x 页,共 y 页” 的宽度。这一步计算非常重要,因为它决定了页码(pdfcompositefield)的 x 坐标。为了实现居中对齐,x 坐标的计算方法为:用页面宽度减去页码宽度,然后将结果除以 2,即 (pagewidth - pagenumberwidth) / 2。
具体示例代码如下:
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)
{
// 应用许可证密钥
licenseprovider.setlicensekey("license key");
// 创建 pdfdocument 对象
pdfdocument doc = new pdfdocument();
// 加载 pdf 文件
doc.loadfromfile("c:\\users\\administrator\\desktop\\terms of service.pdf");
// 创建字体、画刷和画笔,用于设置页码的显示样式
pdftruetypefont font = new pdftruetypefont(new font("times new roman", 12, fontstyle.regular), true);
pdfbrush brush = pdfbrushes.black;
pdfpen pen = new pdfpen(brush, 1.0f);
// 创建 pdfpagenumberfield 对象和 pdfpagecountfield 对象
pdfpagenumberfield pagenumberfield = new pdfpagenumberfield();
pdfpagecountfield pagecountfield = new pdfpagecountfield();
// 创建 pdfcompositefield 对象,将页码字段和总页数字段组合为一个字段
pdfcompositefield compositefield = new pdfcompositefield(font, brush, "page {0} of {1}", pagenumberfield, pagecountfield);
// 遍历文档中的每一页
for (int i = 0; i < doc.pages.count; i++)
{
// 获取指定页面
pdfpagebase page = doc.pages[i];
// 获取页面尺寸
sizef pagesize = doc.pages[i].size;
// 在指定位置绘制一条直线
page.canvas.drawline(pen, 72, pagesize.height - 50, pagesize.width - 72, pagesize.height - 50);
// 测量 "page x of y" 文本的尺寸
sizef pagenumbersize = font.measurestring(string.format("page {0} of {1}", i + 1, doc.pages.count));
// 设置复合字段的位置,实现居中对齐
compositefield.location = new pointf((pagesize.width - pagenumbersize.width) / 2, pagesize.height - 45);
// 在页面上绘制复合字段
compositefield.draw(page.canvas);
}
// 保存为新的 pdf 文件
doc.savetofile("addpagenumberstocenter.pdf");
// 释放资源
doc.dispose();
}
}
}在 c# 中在页脚添加右对齐的页码
为了将页脚中的页码放置在右侧角落,同样需要动态计算文本 “第 x 页,共 y 页” 的宽度。因为页码(pdfcompositefield)的 x 坐标是通过用页面宽度减去页码宽度与右侧页边距的和来确定的,计算公式如下:
pagewidth - (pagenumberwidth + rightpagemargin)
具体示例代码如下:
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)
{
// 应用许可证密钥
licenseprovider.setlicensekey("license key");
// 创建 pdfdocument 对象
pdfdocument doc = new pdfdocument();
// 加载 pdf 文件
doc.loadfromfile("c:\\users\\administrator\\desktop\\terms of service.pdf");
// 创建字体、画刷和画笔,用于设置页码的显示样式
pdftruetypefont font = new pdftruetypefont(new font("times new roman", 12, fontstyle.regular), true);
pdfbrush brush = pdfbrushes.black;
pdfpen pen = new pdfpen(brush, 1.0f);
// 创建 pdfpagenumberfield 对象和 pdfpagecountfield 对象
pdfpagenumberfield pagenumberfield = new pdfpagenumberfield();
pdfpagecountfield pagecountfield = new pdfpagecountfield();
// 创建 pdfcompositefield 对象,将页码字段和总页数字段组合为一个字段
pdfcompositefield compositefield = new pdfcompositefield(font, brush, "page {0} of {1}", pagenumberfield, pagecountfield);
// 遍历文档中的每一页
for (int i = 0; i < doc.pages.count; i++)
{
// 获取指定页面
pdfpagebase page = doc.pages[i];
// 获取页面尺寸
sizef pagesize = doc.pages[i].size;
// 在指定位置绘制一条直线
page.canvas.drawline(pen, 72, pagesize.height - 50, pagesize.width - 72, pagesize.height - 50);
// 测量 "page x of y" 文本的尺寸
sizef pagenumbersize = font.measurestring(string.format("page {0} of {1}", i + 1, doc.pages.count));
// 设置复合字段的位置,实现右对齐
compositefield.location = new pointf(pagesize.width - pagenumbersize.width - 72, pagesize.height - 45);
// 在页面上绘制复合字段
compositefield.draw(page.canvas);
}
// 保存为新的 pdf 文件
doc.savetofile("addpagenumberstorigthcorner.pdf");
// 释放资源
doc.dispose();
}
}
}到此这篇关于使用c#代码在pdf文档添加页码的操作指南的文章就介绍到这了,更多相关c# pdf文档添加页码内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论