使用C#讀取PDF元數(shù)據(jù)的操作指南
引言
在日常開(kāi)發(fā)和文檔管理場(chǎng)景中,PDF 往往不僅僅是“內(nèi)容載體”,它還包含了大量描述性信息,例如標(biāo)題、作者、創(chuàng)建時(shí)間、關(guān)鍵詞,甚至是企業(yè)內(nèi)部自定義的業(yè)務(wù)字段。這些信息統(tǒng)稱為 PDF 元數(shù)據(jù)(Metadata)。
在內(nèi)容管理系統(tǒng)(CMS)、文檔歸檔系統(tǒng)、搜索引擎索引、合規(guī)審計(jì)以及自動(dòng)化文檔處理流程中,準(zhǔn)確讀取和分析 PDF 元數(shù)據(jù),往往是一個(gè)不可忽視的環(huán)節(jié)。
本文將以 Free Spire.PDF for .NET 為基礎(chǔ),結(jié)合實(shí)際 C# 示例代碼,系統(tǒng)講解如何在 .NET 環(huán)境中讀取 PDF 標(biāo)準(zhǔn)文檔屬性 和 自定義文檔屬性,并對(duì)關(guān)鍵類(lèi)和實(shí)現(xiàn)邏輯進(jìn)行深入解析,幫助你在真實(shí)項(xiàng)目中靈活應(yīng)用。
一、PDF 元數(shù)據(jù)簡(jiǎn)介
PDF 元數(shù)據(jù)主要分為兩類(lèi):
第一類(lèi)是 標(biāo)準(zhǔn)文檔屬性,這是 PDF 規(guī)范中定義的通用字段,大多數(shù) PDF 閱讀器(如 Adobe Acrobat)都能直接顯示,包括標(biāo)題、作者、主題、關(guān)鍵詞、創(chuàng)建時(shí)間、修改時(shí)間、生成器等。
第二類(lèi)是 自定義文檔屬性,通常由生成 PDF 的程序或業(yè)務(wù)系統(tǒng)寫(xiě)入,用于保存特定業(yè)務(wù)信息,例如項(xiàng)目編號(hào)、合同編號(hào)、部門(mén)名稱、版本號(hào)等。這類(lèi)屬性在界面中未必可見(jiàn),但對(duì)程序來(lái)說(shuō)非常有價(jià)值。
通過(guò)程序讀取這些信息,可以實(shí)現(xiàn)自動(dòng)分類(lèi)、檢索、校驗(yàn)和分析,而無(wú)需解析 PDF 的正文內(nèi)容。
二、準(zhǔn)備工作:引入 Free Spire.PDF for .NET
Free Spire.PDF for .NET 是一個(gè)輕量級(jí)的 PDF 處理庫(kù),支持 PDF 的創(chuàng)建、讀取、解析和基本操作,非常適合用于文檔自動(dòng)化和工具型項(xiàng)目。
在項(xiàng)目中,你可以通過(guò) NuGet (搜索FreeSpire.PDF)或官網(wǎng)下載 DLL 并手動(dòng)引用。完成引用后,只需導(dǎo)入以下命名空間即可開(kāi)始使用:
using Spire.Pdf;
三、讀取 PDF 標(biāo)準(zhǔn)文檔屬性
下面的示例演示了如何使用 C# 加載一個(gè) 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)建時(shí)間 (CreationDate): {doc.DocumentInformation.CreationDate}");
Console.WriteLine($"修改時(shí)間 (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 對(duì)象,這是 Free Spire.PDF 中用于表示整個(gè) PDF 文檔的核心類(lèi)。通過(guò) LoadFromFile 方法加載指定路徑的文件后,即可通過(guò) DocumentInformation 屬性訪問(wèn)文檔元數(shù)據(jù)。
DocumentInformation 提供了一組強(qiáng)類(lèi)型屬性,每個(gè)屬性都直接映射到 PDF 的標(biāo)準(zhǔn)字段。這種方式避免了手動(dòng)解析底層結(jié)構(gòu),代碼清晰、可讀性高,非常適合用于工具型程序和后臺(tái)服務(wù)。
在實(shí)際應(yīng)用中,你可以將這些信息寫(xiě)入數(shù)據(jù)庫(kù)、日志系統(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)說(shuō)明
GetAllCustomProperties() 方法會(huì)返回一個(gè)鍵值對(duì)集合,鍵為屬性名稱,值為屬性內(nèi)容。這種結(jié)構(gòu)非常適合動(dòng)態(tài)字段的讀取和處理,不需要提前知道具體屬性名。
在企業(yè)系統(tǒng)中,這類(lèi)自定義字段往往承載著重要業(yè)務(wù)含義,例如合同編號(hào)、審批人、系統(tǒng)版本等。通過(guò)程序自動(dòng)提取,可以顯著減少人工核對(duì)和錄入成本。
五、常見(jiàn)應(yīng)用場(chǎng)景分析
在實(shí)際項(xiàng)目中,讀取 PDF 元數(shù)據(jù)通常與以下需求緊密相關(guān):
在文檔管理系統(tǒng)中,根據(jù)作者、創(chuàng)建時(shí)間或自定義字段對(duì) PDF 自動(dòng)分類(lèi)和歸檔。
在搜索系統(tǒng)中,將 PDF 元數(shù)據(jù)作為索引字段,提高搜索效率和準(zhǔn)確性。
在合規(guī)與審計(jì)場(chǎng)景中,批量檢查 PDF 的生成工具、修改時(shí)間或來(lái)源信息。
在自動(dòng)化流程中,根據(jù) PDF 內(nèi)嵌的業(yè)務(wù)字段觸發(fā)不同的處理邏輯。
相比解析 PDF 正文內(nèi)容,讀取元數(shù)據(jù)性能更高、實(shí)現(xiàn)更簡(jiǎn)單,是很多系統(tǒng)的首選方案。
六、總結(jié)
本文圍繞“讀取 PDF 元數(shù)據(jù)”這一主題,詳細(xì)介紹了如何使用 Free Spire.PDF for .NET 在 C# 中獲取 PDF 的標(biāo)準(zhǔn)文檔屬性和自定義文檔屬性,并結(jié)合代碼對(duì)實(shí)現(xiàn)思路進(jìn)行了深入解析。
通過(guò) PdfDocument 和 DocumentInformation 提供的 API,你可以在不解析頁(yè)面內(nèi)容的前提下,高效獲取 PDF 的關(guān)鍵信息。這種方式不僅代碼簡(jiǎn)潔,而且非常穩(wěn)定,適合在批量處理、后臺(tái)服務(wù)和企業(yè)級(jí)應(yīng)用中使用。
掌握 PDF 元數(shù)據(jù)的讀取方法,將有助于你構(gòu)建更智能、更自動(dòng)化的文檔處理系統(tǒng),也為后續(xù)的 PDF 分析和管理打下堅(jiān)實(shí)基礎(chǔ)。
以上就是使用C#讀取PDF元數(shù)據(jù)的操作指南的詳細(xì)內(nèi)容,更多關(guān)于C#讀取PDF元數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C# 如何使用OpcUaHelper讀寫(xiě)OPC服務(wù)器
這篇文章給大家介紹C# 如何使用OpcUaHelper讀寫(xiě)OPC服務(wù)器,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2023-12-12
C#實(shí)現(xiàn)字符串倒序遍歷的方法小結(jié)
這篇文章主要為大家詳細(xì)介紹了C#中實(shí)現(xiàn)字符串倒序遍歷的常見(jiàn)方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-02-02
C#使用Process類(lèi)調(diào)用外部程序分解
這篇文章主要介紹了C#使用Process類(lèi)調(diào)用外部程序分解,分別介紹了啟動(dòng)外部程序、關(guān)掉外部程序、關(guān)掉后調(diào)用一些方法的方法,需要的朋友可以參考下2014-07-07
利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度
本文介紹利用C#代碼實(shí)現(xiàn)圖片旋轉(zhuǎn)360度,具體實(shí)例代碼已附上,僅供大家參考,希望對(duì)大家有所幫助2016-11-11
C#實(shí)現(xiàn)程序等待延遲執(zhí)行的方法
這篇文章主要介紹了C#實(shí)現(xiàn)程序等待延遲執(zhí)行的方法,涉及C#動(dòng)態(tài)鏈接庫(kù)的使用及延遲的實(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í)用價(jià)值,需要的朋友可以參考下2015-05-05
unity 文件流讀取圖片與www讀取圖片的區(qū)別介紹
這篇文章主要介紹了unity 文件流讀取圖片與www讀取圖片的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04

