使用C#讀取PDF元數(shù)據(jù)的操作指南
引言
在日常開發(fā)和文檔管理場景中,PDF 往往不僅僅是“內(nèi)容載體”,它還包含了大量描述性信息,例如標(biāo)題、作者、創(chuàng)建時間、關(guān)鍵詞,甚至是企業(yè)內(nèi)部自定義的業(yè)務(wù)字段。這些信息統(tǒng)稱為 PDF 元數(shù)據(jù)(Metadata)。
在內(nèi)容管理系統(tǒng)(CMS)、文檔歸檔系統(tǒng)、搜索引擎索引、合規(guī)審計以及自動化文檔處理流程中,準(zhǔn)確讀取和分析 PDF 元數(shù)據(jù),往往是一個不可忽視的環(huán)節(jié)。
本文將以 Free Spire.PDF for .NET 為基礎(chǔ),結(jié)合實(shí)際 C# 示例代碼,系統(tǒng)講解如何在 .NET 環(huán)境中讀取 PDF 標(biāo)準(zhǔn)文檔屬性 和 自定義文檔屬性,并對關(guān)鍵類和實(shí)現(xiàn)邏輯進(jìn)行深入解析,幫助你在真實(shí)項目中靈活應(yīng)用。
一、PDF 元數(shù)據(jù)簡介
PDF 元數(shù)據(jù)主要分為兩類:
第一類是 標(biāo)準(zhǔn)文檔屬性,這是 PDF 規(guī)范中定義的通用字段,大多數(shù) PDF 閱讀器(如 Adobe Acrobat)都能直接顯示,包括標(biāo)題、作者、主題、關(guān)鍵詞、創(chuàng)建時間、修改時間、生成器等。
第二類是 自定義文檔屬性,通常由生成 PDF 的程序或業(yè)務(wù)系統(tǒng)寫入,用于保存特定業(yè)務(wù)信息,例如項目編號、合同編號、部門名稱、版本號等。這類屬性在界面中未必可見,但對程序來說非常有價值。
通過程序讀取這些信息,可以實(shí)現(xiàn)自動分類、檢索、校驗和分析,而無需解析 PDF 的正文內(nèi)容。
二、準(zhǔn)備工作:引入 Free Spire.PDF for .NET
Free Spire.PDF for .NET 是一個輕量級的 PDF 處理庫,支持 PDF 的創(chuàng)建、讀取、解析和基本操作,非常適合用于文檔自動化和工具型項目。
在項目中,你可以通過 NuGet (搜索FreeSpire.PDF)或官網(wǎng)下載 DLL 并手動引用。完成引用后,只需導(dǎo)入以下命名空間即可開始使用:
using Spire.Pdf;
三、讀取 PDF 標(biāo)準(zhǔn)文檔屬性
下面的示例演示了如何使用 C# 加載一個 PDF 文件,并讀取其標(biāo)準(zhǔn)元數(shù)據(jù)。
示例代碼
using System;
using Spire.Pdf;
namespace PdfMetadataReader
{
class Program
{
static void Main(string[] args)
{
string pdfFilePath = "Sample.pdf";
try
{
using (PdfDocument doc = new PdfDocument())
{
// 加載 PDF 文件
doc.LoadFromFile(pdfFilePath);
Console.WriteLine("=== PDF 標(biāo)準(zhǔn)文檔屬性 ===");
Console.WriteLine($"標(biāo)題 (Title): {doc.DocumentInformation.Title}");
Console.WriteLine($"作者 (Author): {doc.DocumentInformation.Author}");
Console.WriteLine($"主題 (Subject): {doc.DocumentInformation.Subject}");
Console.WriteLine($"關(guān)鍵詞 (Keywords): {doc.DocumentInformation.Keywords}");
Console.WriteLine($"創(chuàng)建時間 (CreationDate): {doc.DocumentInformation.CreationDate}");
Console.WriteLine($"修改時間 (ModificationDate): {doc.DocumentInformation.ModificationDate}");
Console.WriteLine($"創(chuàng)建程序 (Creator): {doc.DocumentInformation.Creator}");
Console.WriteLine($"生成器 (Producer): {doc.DocumentInformation.Producer}");
}
}
catch (Exception ex)
{
Console.WriteLine("讀取 PDF 元數(shù)據(jù)失?。? + ex.Message);
}
Console.ReadKey();
}
}
}讀取結(jié)果

實(shí)現(xiàn)邏輯解析
程序首先創(chuàng)建 PdfDocument 對象,這是 Free Spire.PDF 中用于表示整個 PDF 文檔的核心類。通過 LoadFromFile 方法加載指定路徑的文件后,即可通過 DocumentInformation 屬性訪問文檔元數(shù)據(jù)。
DocumentInformation 提供了一組強(qiáng)類型屬性,每個屬性都直接映射到 PDF 的標(biāo)準(zhǔn)字段。這種方式避免了手動解析底層結(jié)構(gòu),代碼清晰、可讀性高,非常適合用于工具型程序和后臺服務(wù)。
在實(shí)際應(yīng)用中,你可以將這些信息寫入數(shù)據(jù)庫、日志系統(tǒng),或作為索引字段用于全文檢索。
四、讀取 PDF 自定義文檔屬性
除了標(biāo)準(zhǔn)屬性外,很多 PDF 文件還包含自定義元數(shù)據(jù)。Free Spire.PDF 同樣支持完整讀取這些信息。
示例代碼
using System;
using System.Collections.Generic;
using Spire.Pdf;
namespace PdfMetadataReader
{
class Program
{
static void Main(string[] args)
{
string pdfFilePath = "SampleWithCustomMetadata.pdf";
try
{
using (PdfDocument doc = new PdfDocument())
{
doc.LoadFromFile(pdfFilePath);
Console.WriteLine("=== PDF 自定義文檔屬性 ===");
var customProperties = doc.DocumentInformation.GetAllCustomProperties();
if (customProperties != null && customProperties.Count > 0)
{
foreach (KeyValuePair<string, string> item in customProperties)
{
Console.WriteLine($"{item.Key} : {item.Value}");
}
}
else
{
Console.WriteLine("當(dāng)前 PDF 未包含自定義元數(shù)據(jù)。");
}
}
}
catch (Exception ex)
{
Console.WriteLine("讀取 PDF 自定義元數(shù)據(jù)失?。? + ex.Message);
}
Console.ReadKey();
}
}
}讀取結(jié)果

關(guān)鍵點(diǎn)說明
GetAllCustomProperties() 方法會返回一個鍵值對集合,鍵為屬性名稱,值為屬性內(nèi)容。這種結(jié)構(gòu)非常適合動態(tài)字段的讀取和處理,不需要提前知道具體屬性名。
在企業(yè)系統(tǒng)中,這類自定義字段往往承載著重要業(yè)務(wù)含義,例如合同編號、審批人、系統(tǒng)版本等。通過程序自動提取,可以顯著減少人工核對和錄入成本。
五、常見應(yīng)用場景分析
在實(shí)際項目中,讀取 PDF 元數(shù)據(jù)通常與以下需求緊密相關(guān):
在文檔管理系統(tǒng)中,根據(jù)作者、創(chuàng)建時間或自定義字段對 PDF 自動分類和歸檔。
在搜索系統(tǒng)中,將 PDF 元數(shù)據(jù)作為索引字段,提高搜索效率和準(zhǔn)確性。
在合規(guī)與審計場景中,批量檢查 PDF 的生成工具、修改時間或來源信息。
在自動化流程中,根據(jù) PDF 內(nèi)嵌的業(yè)務(wù)字段觸發(fā)不同的處理邏輯。
相比解析 PDF 正文內(nèi)容,讀取元數(shù)據(jù)性能更高、實(shí)現(xiàn)更簡單,是很多系統(tǒng)的首選方案。
六、總結(jié)
本文圍繞“讀取 PDF 元數(shù)據(jù)”這一主題,詳細(xì)介紹了如何使用 Free Spire.PDF for .NET 在 C# 中獲取 PDF 的標(biāo)準(zhǔn)文檔屬性和自定義文檔屬性,并結(jié)合代碼對實(shí)現(xiàn)思路進(jìn)行了深入解析。
通過 PdfDocument 和 DocumentInformation 提供的 API,你可以在不解析頁面內(nèi)容的前提下,高效獲取 PDF 的關(guān)鍵信息。這種方式不僅代碼簡潔,而且非常穩(wěn)定,適合在批量處理、后臺服務(wù)和企業(yè)級應(yīng)用中使用。
掌握 PDF 元數(shù)據(jù)的讀取方法,將有助于你構(gòu)建更智能、更自動化的文檔處理系統(tǒng),也為后續(xù)的 PDF 分析和管理打下堅實(shí)基礎(chǔ)。
以上就是使用C#讀取PDF元數(shù)據(jù)的操作指南的詳細(xì)內(nèi)容,更多關(guān)于C#讀取PDF元數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 如何使用OpcUaHelper讀寫OPC服務(wù)器
這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫OPC服務(wù)器,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-12-12
C#實(shí)現(xiàn)字符串倒序遍歷的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了C#中實(shí)現(xiàn)字符串倒序遍歷的常見方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考下2024-02-02
利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度
本文介紹利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度,具體實(shí)例代碼已附上,僅供大家參考,希望對大家有所幫助2016-11-11
C#實(shí)現(xiàn)程序等待延遲執(zhí)行的方法
這篇文章主要介紹了C#實(shí)現(xiàn)程序等待延遲執(zhí)行的方法,涉及C#動態(tài)鏈接庫的使用及延遲的實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-09-09
C#實(shí)現(xiàn)文件斷點(diǎn)續(xù)傳下載的方法
這篇文章主要介紹了C#實(shí)現(xiàn)文件斷點(diǎn)續(xù)傳下載的方法,涉及網(wǎng)絡(luò)文件操作的相關(guān)技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-05-05
unity 文件流讀取圖片與www讀取圖片的區(qū)別介紹
這篇文章主要介紹了unity 文件流讀取圖片與www讀取圖片的對比分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

