【问题标题】:Get custom metadata for itext 7 pdf document获取 itext 7 pdf 文档的自定义元数据
【发布时间】:2017-04-26 16:36:41
【问题描述】:

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

目前,我也可以使用 sn-p 获取 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?

【问题讨论】:

    标签: pdf itext itext7


    【解决方案1】:

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

    PdfDictionary map = info.getPdfObject();
    

    返回地图类型对象。解析地图以获取所有键值对,包括自定义属性。 下面是完整的sn-p代码:

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

    【讨论】:

      【解决方案2】:

      在 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"));       
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-27
        • 2015-07-29
        • 1970-01-01
        • 2021-03-21
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多