使用FOP 2.1添加XMP Meta Dublin语言

时间:2016-10-20 11:39:13

标签: apache-fop xmp pdflib pdfa

我想创建一个有效的PDF / A2-b文件。在此之后,想要使用PDFLib库放入ZUGFeRD发票。

每次使用Online Validator检查PDF时,都会收到以下错误:

rechnung.pdf does not conform to PDF/A.

Validating file "rechnung.pdf" for conformance level pdfa-2b
dc:language :: Wrong value type. Expected type 'bag'.
The document does not conform to the requested standard.
The document's meta data is either missing or inconsistent or corrupt.

Done.

这是带有我的FOP元信息的部分。

<fo:declarations>
    <x:xmpmeta xmlns:x="adobe:ns:meta/">
        <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
            <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
                <dc:title>
                    <rdf:Alt>
                        <rdf:li xml:lang="x-default">Titel</rdf:li>
                    </rdf:Alt>
                </dc:title>
                <dc:creator>
                    <rdf:Seq>
                        <rdf:li>Creator</rdf:li>
                    </rdf:Seq>
                </dc:creator>
                <dc:description>
                    <rdf:Alt>
                        <rdf:li xml:lang="x-default">PDF/A Rechnung</rdf:li>
                    </rdf:Alt>
                </dc:description>
                <dc:date>
                    <rdf:Seq>
                        <rdf:li>2016-10-20</rdf:li>
                    </rdf:Seq>
                </dc:date>
            </rdf:Description>
            <rdf:Description rdf:about=""
                xmlns:xmp="http://ns.adobe.com/xap/1.0/">
                <!-- XMP properties go here -->
                <xmp:CreatorTool>Creator Tool</xmp:CreatorTool>
            </rdf:Description>
        </rdf:RDF>
    </x:xmpmeta>
</fo:declarations>

FOP从fo:root元素中获取元数据的语言部分。

<fo:root xml:lang="de"
     xmlns:fo="http://www.w3.org/1999/XSL/Format"
     font-family="PT-Sans" font-weight="normal" font-style="normal"
     xmlns:pdf="http://xmlgraphics.apache.org/fop/extensions/pdf">

但是当我用记事本++打开PDF文件时,dc:语言没有类型规范。这就是我想的问题。

如何在文件中获取这些规范?

我试图像其他声明那样添加它:

<dc:language>
    <rdf:Bag>
        <rdf:li>de-DE</rdf:li>
    </rdf:Bag>
</dc:language>

然后我从Validator那里得到了同样的失败消息。为什么?因为PDF文件中的语言具有以下内容:

<dc:language>x-unknown</dc:language>

我认为值“x-unknown”直接来自FOP。

在一个论坛中,我已经读过构造函数中有一个方法来自java / org / apache / fop / pdf / PDFRoot.java文件,名为“setLanguage(”x-unknown“);”因为FOP 1.1。

我已经看过实际的FOP而且她还在里面。

的java /组织/阿帕奇/ FOP / PDF / PDFRoot.java [80:9]

public PDFRoot(PDFDocument document, PDFPages pages) {
    this.document = document;
    setObjectNumber(document);
    put("Type", new PDFName("Catalog"));
    setRootPages(pages);
    setLanguage("x-unknown");
}

1 个答案:

答案 0 :(得分:0)

我在Apache FOP 2.22.4上遇到了同样的问题,我认为这是Apache FOP本身的错误。 Apache FOP应该在< dc:language >下创建一个数组/包,并将值放在其中,但相反,它将值直接放在< dc:language >下。

对我来说,解决方案是我在第二步中将XMP Metadata添加到了Apache PDFBox