繁体   English   中英

Itext使用Java在pdf中创建XMP

[英]Itext create XMP in pdf with Java

我需要在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>

到现在为止我尝试了这部分代码:

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

创建的xmp如下:

<pdfaExtension:schemas>
    <rdf:Bag>
      <rdf:li>a</rdf:li>
    </rdf:Bag>

现在我无法理解如何继续下去。 有关如何做到这一点的任何想法?

提前致谢

我能够用iText5回答这个问题,尽管我认为这个答案有点像“黑客”,因为它没有使用任何iText语义元数据对象,其中大多数似乎都被弃用了。 请注意,特别是xmp.DublinCoreSchemaxmp.PdfSchemaxmp.XmpArrayxmp.XmpSchema不推荐使用,而xmp.CustomSchema不再存在。

iText文档在这方面非常差。

答案应该这里这里这里提供,但这些都没有帮助。 他们只展示如何操纵信息部分。

可以从线程派生解决方案使用XMP将自定义属性添加和检索到PDF ,但不推荐使用所有使用的iText类。

最后,我注意到可以通过stamper.setXmpMetadata(metadata)插入任何 XML,其中metadata是包含XML的byte[] 可以使用DOM创建此XML,但在下面的快速和脏文件中使用。

package itext.sandpit;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.xmp.XMPException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class ItextSandpit {

    public static void main(String[] args) throws DocumentException,
            IOException,
            XMPException {

        // Create PDF
        Document document = new Document();
        PdfWriter.getInstance(
                document, new FileOutputStream("mypdf.pdf"));
        document.open();
        document.add(new Paragraph("Hello World!"));
        document.close();

        // Read metadata
        File fff = new File("metadata.xml");
        FileInputStream fileInputStream = new FileInputStream(fff);
        int byteLength = (int) fff.length(); //bytecount of the file-content
        byte[] metadatabytes = new byte[byteLength];
        fileInputStream.read(metadatabytes, 0, byteLength);

        // Add metadata
        PdfReader reader = new PdfReader("mypdf.pdf");
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("mypdf_plus_xmp.pdf"));

        stamper.setXmpMetadata(metadatabytes);
        stamper.close();
        reader.close();
    }

}

创建文件metadata.xml并将OP中的XML复制并粘贴到此文件中,然后运行。 要确认元数据确实在创建的PDF中, pdfinfo -meta mypdf_plus_xmp.pdf产生

Producer:       iText® 5.5.12 ©2000-2017 iText Group NV (AGPL-version); modified using iText® 5.5.12 ©2000-2017 iText Group NV (AGPL-version)
CreationDate:   Tue Oct 10 21:01:21 2017
ModDate:        Tue Oct 10 21:01:21 2017
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          1
Encrypted:      no
Page size:      595 x 842 pts (A4)
Page rot:       0
File size:      3224 bytes
Optimized:      no
PDF version:    1.4
Metadata:
<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>

如果可能,请使用iText“包装器”(如 PDFBox)或移至iText7。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM