PDF 文档属性是嵌入在文件内部的元数据,包括标题、作者、主题、关键词以及生成器名称等字段。这些信息不直接显示在页面内容中,但对于文档检索、归档管理和自动化处理流程具有实际价值。在 C# 项目中,借助 Free Spire.PDF for .NET 可以较为便捷地完成属性的写入与读取操作。本文将对这两项操作分别进行说明,并补充一些实现中需要注意的细节。

Free Spire.PDF for .NET 是一个独立的 PDF 处理库,不依赖 Adobe Acrobat 或其他第三方软件即可运行。通过 NuGet 安装即可在项目中使用:
Install-Package FreeSpire.PDF需要留意的是,免费版在加载和创建 PDF 时限制文档不超过 10 页,超出部分会被截断。对于属性设置与读取这类轻量操作,只要示例文件控制在限制范围内,即可正常验证。
PdfDocument 类中的 DocumentInformation 属性提供了对标准文档属性的访问入口。该属性返回 PdfDocumentInformation 类型的对象,其 Title、Author、Subject、Keywords 和 Producer 等字段均为可读写的字符串属性。以下代码展示了加载一个已有 PDF 文件、修改其属性并另存为新文件的完整流程。为区分原始文件,示例中的属性值已替换为与项目归档相关的实际内容:
using Spire.Pdf;
namespace PdfPropertyDemo
{
class SetProperties
{
static void Main(string[] args)
{
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("项目报告_原始.pdf");
pdf.DocumentInformation.Title = "2026年第二季度项目总结报告";
pdf.DocumentInformation.Author = "技术文档组";
pdf.DocumentInformation.Subject = "项目进度与资源使用情况汇总";
pdf.DocumentInformation.Keywords = "项目管理, 季度报告, 进度跟踪";
pdf.DocumentInformation.Producer = "内部文档生成工具";
pdf.SaveToFile("项目报告_已标记.pdf");
pdf.Close();
}
}
}执行后,项目报告_已标记.pdf 会保留原文件内容,同时携带更新后的属性信息。Producer 字段通常用于标识生成该 PDF 的应用程序名称,在自动化流程中可据此追溯文件来源。
需要说明的是,如果目标属性在原始 PDF 中并不存在,读取时可能返回 null 或空字符串。写入操作本身不受此影响,直接赋值即可。
读取操作同样围绕 DocumentInformation 展开。下面的示例将已设置属性的 PDF 文件加载后,逐项提取字段值并写入一个文本文件,便于后续核对或存档:
using Spire.Pdf;
using System.IO;
using System.Text;
namespace PdfPropertyDemo
{
class GetProperties
{
static void Main(string[] args)
{
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("项目报告_已标记.pdf");
StringBuilder content = new StringBuilder();
content.AppendLine("标题: " + pdf.DocumentInformation.Title);
content.AppendLine("作者: " + pdf.DocumentInformation.Author);
content.AppendLine("主题: " + pdf.DocumentInformation.Subject);
content.AppendLine("关键词: " + pdf.DocumentInformation.Keywords);
content.AppendLine("生成器: " + pdf.DocumentInformation.Producer);
File.WriteAllText("属性提取结果.txt", content.ToString(), Encoding.UTF8);
pdf.Close();
}
}
}与片段二相比,这里将 \r\n 替换为 AppendLine,并在 File.WriteAllText 中显式指定 UTF-8 编码。后者在处理中文属性值时尤为重要:若系统默认编码与文件实际编码不一致,写入的文本可能出现乱码。AppendLine 则使代码更简洁,同时保持各字段独占一行的输出格式。
从上述两个示例可以看出,Free Spire.PDF 对文档属性的操作接口设计较为直接,属性名与 PDF 规范中的 Info 字典条目基本对应。设置与读取使用同一套属性访问器,无需额外解析底层结构。
在实际使用中,有两点值得留意。其一,PdfDocument 对象实现了 Close 方法,在完成读写后显式调用有助于及时释放文件句柄,尤其是在后续操作需要立即访问同一文件时。其二,读取属性时若某项未被设置,返回空值的可能性客观存在,因此在将结果用于下游逻辑(如条件判断或数据库写入)前,加入空值检查是稳妥的做法。
此外,标准属性之外还存在自定义属性(Custom Properties),可通过 SetCustomProperty 和 GetCustomProperty 方法操作,适用于需要携带内部编号、版本标记等业务信息的场景。这部分内容不在本文示例范围内,但在构建文档管理系统时可以作为标准属性的补充手段加以利用。
本文以 Free Spire.PDF for .NET 为工具,展示了在 C# 中设置和读取 PDF 文档属性的完整流程。设置操作通过 DocumentInformation 的各字符串属性直接赋值完成,读取操作则将对应属性值提取至 StringBuilder 并落盘为文本文件。代码层面的关键点包括:显式指定文本编码以避免中文乱码、读写完成后关闭文档对象、以及对可能为空的属性值保持防御性处理习惯。这些细节虽然简单,却直接影响代码在实际项目中的稳定性。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。