Gia*_*mma 6 java xmp metadata itext
我需要在java(使用itext)中创建以下xmp元数据并将其放在我的一个pdf中.
<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#" xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#" xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"> <pdfaExtension:schemas>
<rdf:Bag>
<rdf:li rdf:parseType="Resource">
<pdfaSchema:schema>ABI Assegni Schema</pdfaSchema:schema> <pdfaSchema:namespaceURI>http://abi.it/std/cheque/xmlns</pdfaSchema:namespaceURI> <pdfaSchema:prefix>assegni</pdfaSchema:prefix>
<pdfaSchema:property>
<rdf:Seq>
<rdf:li rdf:parseType="Resource">
<pdfaProperty:name>IDDocumento</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Identificativo univoco del documento</pdfaProperty:description>
</rdf:li>
<rdf:li rdf:parseType="Resource">
<pdfaProperty:name>datachiusura</pdfaProperty:name> <pdfaProperty:valueType>Date</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Data e ora della produzione del file</pdfaProperty:description>
</rdf:li>
<rdf:li rdf:parseType="Resource">
<pdfaProperty:name>oggettodocumento</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Oggetto del documento</pdfaProperty:description>
</rdf:li>
<rdf:li rdf:parseType="Resource">
<pdfaProperty:name>soggettoproduttore</pdfaProperty:name> <pdfaProperty:valueType>soggetto</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Soggetto produttore</pdfaProperty:description>
</rdf:li>
<rdf:li rdf:parseType="Resource">
<pdfaProperty:name>destinatario</pdfaProperty:name> <pdfaProperty:valueType>soggetto</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Destinatario</pdfaProperty:description>
</rdf:li> </rdf:Seq>
</pdfaSchema:property>
</rdf:li>
</rdf:Bag>
</pdfaExtension:schemas>
</rdf:Description>
Run Code Online (Sandbox Code Playgroud)
到现在为止我尝试了这部分代码:
PdfReader reader = new PdfReader(baos.toByteArray());
PdfAStamper stamper = new PdfAStamper(reader, baos, PdfAConformanceLevel.PDF_A_1B);
String namespaceExtension = new String("http://www.aiim.org/pdfa/ns/extension/");
String namespaceSchema = new String("http://www.aiim.org/pdfa/ns/schema#");
String namespaceProperty = new String("http://www.aiim.org/pdfa/ns/property#");
String namespaceType = new String("http://www.aiim.org/pdfa/ns/type#");
String namespaceField = new String("http://www.aiim.org/pdfa/ns/field#");
XMPSchemaRegistry registry = XMPMetaFactory.getSchemaRegistry();
registry.registerNamespace(namespaceExtension, "pdfaExtension");
registry.registerNamespace(namespaceSchema, "pdfaSchema");
registry.registerNamespace(namespaceProperty, "pdfaProperty");
registry.registerNamespace(namespaceType, "pdfaType");
registry.registerNamespace(namespaceField, "pdfaField");
XmpWriter w = new XmpWriter(baos);
w.appendArrayItem(namespaceExtension, "schemas", "a");
w.close();
writer.setXmpMetadata(baos.toByteArray());
Run Code Online (Sandbox Code Playgroud)
创建的xmp如下:
<pdfaExtension:schemas>
<rdf:Bag>
<rdf:li>a</rdf:li>
</rdf:Bag>
Run Code Online (Sandbox Code Playgroud)
现在我无法理解如何继续下去.有关如何做到这一点的任何想法?
提前致谢
我能够用 iText5 来回答这个问题,尽管我认为这个答案有点“黑客”,因为它没有使用任何 iText 语义元数据对象,其中大多数似乎已被弃用。请特别注意,xmp.DublinCoreSchema、xmp.PdfSchema和xmp.XmpArray已xmp.XmpSchema被弃用,并且xmp.CustomSchema不再存在。
iText 文档在这方面非常差。
\n\n答案应该可以在这里或这里或这里找到,但这些都没有帮助。它们仅展示如何操作信息部分。
\n\n可以从线程使用 XMP 添加和检索自定义属性到 PDF 派生解决方案,但不推荐使用所有使用的 iText 类。
\n\n最后,我注意到任何XML 都可以通过stamper.setXmpMetadata(metadata)wheremetadata是byte[]包含 XML 来插入。该 XML 可以使用 DOM 创建,但在下面的快速和肮脏的文件中使用。
package itext.sandpit;\n\nimport com.itextpdf.text.Document;\nimport com.itextpdf.text.DocumentException;\nimport com.itextpdf.text.Paragraph;\nimport com.itextpdf.text.pdf.PdfReader;\nimport com.itextpdf.text.pdf.PdfStamper;\nimport com.itextpdf.text.pdf.PdfWriter;\nimport com.itextpdf.xmp.XMPException;\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.io.FileOutputStream;\nimport java.io.IOException;\n\n\npublic class ItextSandpit {\n\n public static void main(String[] args) throws DocumentException,\n IOException,\n XMPException {\n\n // Create PDF\n Document document = new Document();\n PdfWriter.getInstance(\n document, new FileOutputStream("mypdf.pdf"));\n document.open();\n document.add(new Paragraph("Hello World!"));\n document.close();\n\n // Read metadata\n File fff = new File("metadata.xml");\n FileInputStream fileInputStream = new FileInputStream(fff);\n int byteLength = (int) fff.length(); //bytecount of the file-content\n byte[] metadatabytes = new byte[byteLength];\n fileInputStream.read(metadatabytes, 0, byteLength);\n\n // Add metadata\n PdfReader reader = new PdfReader("mypdf.pdf");\n PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("mypdf_plus_xmp.pdf"));\n\n stamper.setXmpMetadata(metadatabytes);\n stamper.close();\n reader.close();\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n创建一个文件metadata.xml,将 OP 中的 XML 复制并粘贴到该文件中,然后运行。要确认元数据确实位于创建的 PDF 内,pdfinfo -meta mypdf_plus_xmp.pdf请执行以下操作:
Producer: iText\xc2\xae 5.5.12 \xc2\xa92000-2017 iText Group NV (AGPL-version); modified using iText\xc2\xae 5.5.12 \xc2\xa92000-2017 iText Group NV (AGPL-version)\nCreationDate: Tue Oct 10 21:01:21 2017\nModDate: Tue Oct 10 21:01:21 2017\nTagged: no\nUserProperties: no\nSuspects: no\nForm: none\nJavaScript: no\nPages: 1\nEncrypted: no\nPage size: 595 x 842 pts (A4)\nPage rot: 0\nFile size: 3224 bytes\nOptimized: no\nPDF version: 1.4\nMetadata:\n<rdf:Description rdf:about="" xmlns:pdfaExtension="http://www.aiim.org/pdfa/ns/extension/" xmlns:pdfaSchema="http://www.aiim.org/pdfa/ns/schema#" xmlns:pdfaProperty="http://www.aiim.org/pdfa/ns/property#" xmlns:pdfaType="http://www.aiim.org/pdfa/ns/type#" xmlns:pdfaField="http://www.aiim.org/pdfa/ns/field#"> <pdfaExtension:schemas>\n<rdf:Bag>\n<rdf:li rdf:parseType="Resource">\n<pdfaSchema:schema>ABI Assegni Schema</pdfaSchema:schema> <pdfaSchema:namespaceURI>http://abi.it/std/cheque/xmlns</pdfaSchema:namespaceURI> <pdfaSchema:prefix>assegni</pdfaSchema:prefix>\n<pdfaSchema:property>\n <rdf:Seq>\n<rdf:li rdf:parseType="Resource">\n<pdfaProperty:name>IDDocumento</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Identificativo univoco del documento</pdfaProperty:description>\n</rdf:li>\n<rdf:li rdf:parseType="Resource">\n<pdfaProperty:name>datachiusura</pdfaProperty:name> <pdfaProperty:valueType>Date</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Data e ora della produzione del file</pdfaProperty:description>\n</rdf:li>\n<rdf:li rdf:parseType="Resource">\n<pdfaProperty:name>oggettodocumento</pdfaProperty:name> <pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Oggetto del documento</pdfaProperty:description>\n</rdf:li>\n<rdf:li rdf:parseType="Resource">\n<pdfaProperty:name>soggettoproduttore</pdfaProperty:name> <pdfaProperty:valueType>soggetto</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Soggetto produttore</pdfaProperty:description>\n</rdf:li>\n<rdf:li rdf:parseType="Resource">\n<pdfaProperty:name>destinatario</pdfaProperty:name> <pdfaProperty:valueType>soggetto</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category> <pdfaProperty:description>Destinatario</pdfaProperty:description>\n</rdf:li> </rdf:Seq>\n\n</pdfaSchema:property>\n</rdf:li>\n</rdf:Bag>\n</pdfaExtension:schemas>\n</rdf:Description>\nRun Code Online (Sandbox Code Playgroud)\n\n如果可能,请使用iText“包装器”,例如 PDFBox或移至 iText7。
| 归档时间: |
|
| 查看次数: |
698 次 |
| 最近记录: |