首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用java从<pdf:Keywords> (Xmpmeta)中搜索PDMetadata

如何使用java从<pdf:Keywords> (Xmpmeta)中搜索PDMetadata
EN

Stack Overflow用户
提问于 2017-05-05 13:25:25
回答 4查看 816关注 0票数 2

从下面的代码中,我得到了xmp中的pdf元数据,如下所示。如何从这个输出中获取每个属性的值(例如:“pdf:关键字”)

代码语言:javascript
运行
复制
InputStream in=new FileInputStream(pdfFile);
    PDFParser parser=new PDFParser(in);
    parser.parse();
    PDMetadata metadata = parser.getPDDocument().getDocumentCatalog().getMetadata();
    if(metadata!=null)
    {
    System.out.println(metadata.getInputStreamAsString());
    }

输出像

代码语言:javascript
运行
复制
    metadata<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.2-c001 63.139439, 2010/09/27-13:37:26        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
         <pdf:Producer>Acrobat Distiller 7.0 (Windows)</pdf:Producer>
         <pdf:Keywords>F3392|4|Name 2016|02|2016|04|Sub111 |Three Hours|30|(5X1=5),(5X2=10), (3X5=15)&#xD;&#xA;</pdf:Keywords>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/"
         <pdfx:semester>02</pdfx:semester>
   </rdf:RDF>
</x:xmpmeta>          
<?xpacket end="w"?>
EN

回答 4

Stack Overflow用户

发布于 2017-06-02 21:09:50

您将需要Apache PDFBox及其不受欢迎的JempBox库(实现Adobe(TM)规范-他们现在使用Xmpbox,但它更严格,不会处理大多数pdf格式)

代码语言:javascript
运行
复制
PDDocument document = PDDocument.load(inputStream);
PDDocumentCatalog cat = document.getDocumentCatalog();
PDMetadata metadata = cat.getMetadata();

if( metadata != null )
{
    try
    {
        XMPMetadata meta = XMPMetadata.load(metadata.exportXMPMetadata());

        XMPSchema xs = meta.getDublinCoreSchema();
        if (xs != null)
        {
            System.out.println("About: " + xs.getAbout());
            List<String> bagList = xs.getBagList("author");
            if(bagList != null)
            {
                System.out.println("BagList: ");
                ShowString(bagList);
            }
            List<String> creators = xs.getBagList("creator");
            if(creators != null)
            {
                System.out.println("Creators: ");
                ShowString(creators);
            }
        }

        XMPSchemaDublinCore dc = meta.getDublinCoreSchema();
        if (dc != null)
        {
            System.out.println("Title: " + dc.getTitle());
            System.out.println("Description:" + dc.getDescription());
            System.out.println("Source:" + dc.getSource());
            System.out.println("Identifier:" + dc.getIdentifier());
            System.out.println("Coverage:" + dc.getCoverage());
            System.out.println("About:" + dc.getAbout());
            List<String> relationships = dc.getRelationships();
            if(relationships != null)
            {
                System.out.println("Relationships: ");
                ShowString(relationships);
            }
            List<String> contributors = dc.getContributors();
            if(contributors != null)
            {
                System.out.println("Contributors: ");
                ShowString(contributors);
            }
            List<String> creators = dc.getCreators();
            if(creators != null)
            {
                System.out.println("Creators: ");
                ShowString(creators);
            }
            List<Calendar> dates = dc.getDates();
            if(dates != null)
            {
                System.out.println("Dates: ");
                ShowCalendar(dates);
            }
            List<String> subjects = dc.getSubjects();
            if(subjects != null)
            {
                System.out.println("Subjects: ");
                ShowString(subjects);
            }
            List<String> publishers = dc.getPublishers();
            if(publishers != null)
            {
                System.out.println("Publishers: ");
                ShowString(publishers);
            }
            List<String> languages = dc.getLanguages();
            if(languages != null)
            {
                System.out.println("Languages: ");
                ShowString(languages);
            }
        }

        XMPSchemaPDF pdf = meta.getPDFSchema();
        if (pdf != null)
        {
            System.out.println("Keywords:" + pdf.getKeywords());
            System.out.println("PDF Version:" + pdf.getPDFVersion());
            System.out.println("PDF Producer:" + pdf.getProducer());
        }

        XMPSchemaBasic basic = meta.getBasicSchema();
        if (basic != null)
        {
            System.out.println("Create Date:" + basic.getCreateDate().getTime());
            System.out.println("Modify Date:" + basic.getModifyDate().getTime());
            System.out.println("Creator Tool:" + basic.getCreatorTool());
            System.out.println("Label:" + basic.getLabel());
            System.out.println("About:" + basic.getAbout());
            System.out.println("Nickname:" + basic.getNickname());
            System.out.println("Title:" + basic.getTitle());
        }
    }
    catch (Exception e)
    {
        System.err.println("An error occurred while parsing the meta data: "
                + e.getMessage());
    }                   
}
else
{
    PDDocumentInformation info = document.getDocumentInformation();
    System.out.println( "Title:" + info.getTitle() );
    System.out.println( "Author:" + info.getAuthor() );
    System.out.println( "Subject:" + info.getSubject() );
    System.out.println( "Keywords:" + info.getKeywords() );
    System.out.println( "Creator:" + info.getCreator() );
    System.out.println( "Producer:" + info.getProducer() );
    System.out.println( "Creation Date:" + info.getCreationDate().getTime() );
    System.out.println( "Modification Date:" + info.getModificationDate().getTime() );
    System.out.println( "Trapped:" + info.getTrapped() );
}

document.close();

直接下载PDFBox jar

PDFBox Maven链接

直接下载JempBox jar

JempBox Maven链接

票数 0
EN

Stack Overflow用户

发布于 2019-05-17 07:53:33

您可以使用https://products.groupdocs.com/metadata/java API获取每个XMP属性的值(即pdf:关键字、pdf:Producer等)。不解析XML字符串的PDF元数据。

代码:

代码语言:javascript
运行
复制
import com.groupdocs.metadata.PdfFormat;
import com.groupdocs.metadata.XmpProperties;

try (PdfFormat pdfFormat = new PdfFormat("sample.PDF")) {
                XmpProperties xmp = pdfFormat.getXmpProperties();

                for (String var : xmp.getKeys()) {
                    System.out.println(String.format("%s : %s", var, xmp.get_Item(var).getValue()));
                }
}

输出:

代码语言:javascript
运行
复制
pdf:keywords : animal
pdf:producer : ABC
dc:creator : Creators
dc:contributor : Contributors
dc:rights : <rdf:Alt><rdf:li xml:lang="x-default">Rights</rdf:li></rdf:Alt>
dc:source : Source
dc:subject : Subject
........

披露:我是GroupDocs的开发人员布道者。

票数 0
EN

Stack Overflow用户

发布于 2019-06-28 09:32:54

您可以使用Apache PDFBoxXMP Java库

代码语言:javascript
运行
复制
PDDocument document = PDDocument.load(documentContent);
PDDocumentCatalog catalog = document.getDocumentCatalog();
PDMetadata rawMeta = catalog.getMetadata();

if (rawMeta != null) {
    XMPMeta meta = XMPMetaFactory.parse(rawMeta.exportXMPMetadata());
    String keywords = meta.getProperty(XMPConst.NS_PDF, "Keywords").getValue();
    System.out.println("Keywords: " + keywords);
} else {
    System.out.println("Empty metadata");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43806174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档