如何使用iText7获取PDF文件中的全部元数据?
用iText7获取PDF全部元数据的方法
你已经搞定了基础元数据的获取,要拿到所有元数据(包括标准元数据和自定义元数据),其实可以直接操作PdfDocumentInfo的底层字典,或者用API提供的批量方法拿自定义元数据,下面给你具体的实现方案:
方法一:遍历底层字典获取所有元数据(最全面)
PdfDocumentInfo本质是对PDF元数据字典的封装,通过GetPdfObject()方法能拿到底层的PdfDictionary,遍历它的所有键值对就能覆盖所有元数据——不管是标准的作者、标题,还是用户自定义的额外元数据都能获取到:
using (var pdfReader = new iText.Kernel.Pdf.PdfReader("path-to-a-pdf-file")) { var pdfDocument = new iText.Kernel.Pdf.PdfDocument(pdfReader); var pdfDocumentInfo = pdfDocument.GetDocumentInfo(); // 获取元数据的底层字典 PdfDictionary infoDict = pdfDocumentInfo.GetPdfObject(); // 遍历所有键值对 foreach (PdfName key in infoDict.KeySet()) { string keyName = key.GetValue(); PdfObject valueObj = infoDict.Get(key); string value = string.Empty; // 根据值的类型做转换,确保能正确输出字符串 if (valueObj.IsString()) { value = ((PdfString)valueObj).GetValue(); } else if (valueObj.IsName()) { value = ((PdfName)valueObj).GetValue(); } // 其他类型(比如数组、日期等)可以按需扩展处理逻辑 Console.WriteLine($"元数据键: {keyName}, 值: {value}"); } }
方法二:批量获取自定义元数据
如果你只需要获取标准元数据(Author、Title、Subject等)之外的自定义元数据,可以直接用GetMoreInfo()方法,它会返回一个包含所有自定义键值对的字典:
using (var pdfReader = new iText.Kernel.Pdf.PdfReader("path-to-a-pdf-file")) { var pdfDocument = new iText.Kernel.Pdf.PdfDocument(pdfReader); var pdfDocumentInfo = pdfDocument.GetDocumentInfo(); // 获取所有自定义元数据 IDictionary<string, string> customMetadata = pdfDocumentInfo.GetMoreInfo(); foreach (var kvp in customMetadata) { Console.WriteLine($"自定义元数据键: {kvp.Key}, 值: {kvp.Value}"); } }
小提示
- 标准元数据的键都是PDF规范里定义的,比如
Author、Title、Creator、CreationDate等,这些也可以通过遍历底层字典拿到,和你之前用GetAuthor()、GetTitle()拿到的结果完全一致。 - 如果遇到日期类型的元数据(比如
CreationDate),可以用PdfDate类解析成可读格式,比如PdfDate.Decode(((PdfString)valueObj).GetValue())。
内容的提问来源于stack exchange,提问作者dbraillon
相关产品推荐
相关产品推荐

