使用 iText7 从现有 PDF 中获取所有元数据

dbr*_*lon 2 c# metadata itext itext7

如何使用 iText7 检索 PDF 中存储的所有元数据?

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();

    // Getting basic metadata
    var author = pdfDocumentInfo.GetAuthor();
    var title = pdfDocumentInfo.GetTitle();

    // Getting everything else
    var someMetadata = pdfDocumentInfo.GetMoreInfo("need-a-key-here");
    // How to get all metadata ?
}
Run Code Online (Sandbox Code Playgroud)

我将其与 iTextSharp 一起使用,但我不知道如何使用新的 iText7 来做到这一点。

using (var pdfReader = new iTextSharp.text.pdf.PdfReader("path-to-a-pdf-file"))
{
    // Getting basic metadata
    var author = pdfReader.Info.ContainsKey("Author") ? pdfReader.Info["Author"] : null;
    var title = pdfReader.Info.ContainsKey("Title") ? pdfReader.Info["Title"] : null;

    // Getting everything else
    var metadata = pdfReader.Info;
    metadata.Remove("Author");
    metadata.Remove("Title");

    // Print metadata
    Console.WriteLine($"Author: {author}");
    Console.WriteLine($"Title: {title}");

    foreach (var line in metadata)
    {
        Console.WriteLine($"{line.Key}: {line.Value}");
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用的是 iText7 7.1.1 版本。

mkl*_*mkl 5

不幸的是,在 iText 7 中,该类PdfDocumentInfo没有公开检索底层字典中键的方法。

但是您可以通过立即从预告片词典访问该词典来简单地检索 Info 词典内容。例如对于PdfDocument pdfDocument

PdfDictionary infoDictionary = pdfDocument.GetTrailer().GetAsDictionary(PdfName.Info);
foreach (PdfName key in infoDictionary.KeySet())
    Console.WriteLine($"{key}: {infoDictionary.GetAsString(key)}");
Run Code Online (Sandbox Code Playgroud)