从下面的代码中,我得到了xmp中的pdf元数据,如下所示。如何从这个输出中获取每个属性的值(例如:“pdf:关键字”)
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());
}
输出像
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)
</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"?>
发布于 2017-06-02 21:09:50
您将需要Apache PDFBox及其不受欢迎的JempBox库(实现Adobe(TM)规范-他们现在使用Xmpbox,但它更严格,不会处理大多数pdf格式)
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
直接下载JempBox jar
发布于 2019-05-17 07:53:33
您可以使用https://products.groupdocs.com/metadata/java API获取每个XMP属性的值(即pdf:关键字、pdf:Producer等)。不解析XML字符串的PDF元数据。
代码:
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()));
}
}
输出:
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的开发人员布道者。
发布于 2019-06-28 09:32:54
您可以使用Apache PDFBox和XMP Java库
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");
}
https://stackoverflow.com/questions/43806174
复制相似问题