获取 itext 7 pdf 文档的自定义元数据

Get custom metadata for itext 7 pdf document

我使用下面给出的 link 在 itext 5 中获取元数据,使用:Get and set metadata for itext pdf document

目前,我也可以使用以下代码片段在 itext7 中获取元数据:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
PdfDocumentInfo info = pdfDoc.getDocumentInfo();
info.getAuthor();
info.getCreator();
info.getProducer();

我不知道如何使用它来获取自定义属性。 我可以使用以下方法设置自定义元数据:

pdfDoc.getDocumentInfo().setMoreInfo("Test", "test");

如何在不对键名进行硬编码的情况下以编程方式获取此值? 另外,有没有办法在不实际写入的情况下获取这些元数据值(包括自定义元数据):

getAuthor, getCreator, etc?

不用担心,得到答案。 之前没有意识到:

PdfDictionary map = info.getPdfObject();

returns 地图类型对象。解析地图以获取所有键值对,包括自定义属性。 以下是完整的代码片段:

import com.itextpdf.kernel.pdf.PdfDictionary;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfName;
import com.itextpdf.kernel.pdf.PdfObject;
import com.itextpdf.kernel.pdf.PdfReader;

import java.io.File;
import java.io.IOException;
import java.util.Map.Entry;

public class GetInfo {

    public static final String SRC = "hello.pdf";

    public static void main(String[] args) throws IOException {
        File file = new File(SRC);
        file.getParentFile().mkdirs();
        new GetInfo().manipulatePdf(SRC);
    }

    public void manipulatePdf(String src) throws IOException {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
        PdfDocumentInfo info = pdfDoc.getDocumentInfo();
        PdfDictionary map = info.getPdfObject();
        for(Entry<PdfName, PdfObject> entry : map.entrySet()){
            System.out.println(entry.getKey().getValue() + " - " + entry.getValue() );
        }
        pdfDoc.close();
    }
}

在 iText 7.0.8+ 中,您可以通过这种方式获取 pdf 元数据映射。

PdfDocument pdfDoc = new PdfDocument(new PdfReader(src));
//get metadata map
PdfDictionary catalog = pdfDoc.getTrailer();
PdfDictionary map = catalog.getAsDictionary(PdfName.Info);
for (Map.Entry<PdfName, PdfObject> entry : map.entrySet()) {
 System.out.println(entry.getKey().getValue() + " - " + entry.getValue());
}
pdfDoc.close();

您可以使用以下方式设置自定义元数据:

 map.put(new PdfName("test"), new PdfString("test"));