【发布时间】:2020-06-15 16:11:33
【问题描述】:
我正在尝试为发票创建 PDF/A 文件。因此,我尝试使用 gofpdf 库为我的文件设置 XMP 标头。设置标头似乎工作正常,但我的任何验证器(如 exiftool 或验证网站)都无法识别 XMP 数据。我正在使用这样的 PDF 库:您可以找到 reproducable example here。
pdf, customerNumber, err := GeneratePDF(type, id, user, nil)
if err != nil {
return err
}
pointerVal := reflect.ValueOf(pdf.Fpdf)
val := reflect.Indirect(pointerVal)
member := val.FieldByName("pdfVersion")
ptrToY := unsafe.Pointer(member.UnsafeAddr())
realPtrToY := (*string)(ptrToY)
*realPtrToY = "1.4"
pdf.SetXmpMetadata(XMP_HEADER)
err = s.SavePDFAndRespondWith(type, id, customerNumber, user, pdf)
if err != nil {
return err
}
内容 XMP 内容看起来像这样,是从工作示例文件中取出的。示例文件不是用 Go 和 gofpdf 生成的。
var XMP_HEADER = []byte(`
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<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" ></rdf:li></rdf:Alt></dc:title><dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator><dc:subject><rdf:Bag><rdf:li></rdf:li></rdf:Bag></dc:subject><dc:format>application/pdf</dc:format><dc:description><rdf:Alt><rdf:li xml:lang="x-default" ></rdf:li></rdf:Alt></dc:description></rdf:Description>
<rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"><pdf:Producer>iTextSharp 4.1.0 (based on iText 2.1.0)</pdf:Producer><pdf:Keywords></pdf:Keywords></rdf:Description>
<rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/"><xmp:ModifyDate>2020-03-13T08:44:31+01:00</xmp:ModifyDate><xmp:CreatorTool>Symtrax - Compleo Suite</xmp:CreatorTool><xmp:CreateDate>2020-03-13T08:44:31+01:00</xmp:CreateDate></rdf:Description>
<rdf:Description rdf:about="" xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/"><pdfaid:part>3</pdfaid:part><pdfaid:conformance>A</pdfaid:conformance></rdf:Description>
<rdf:Description 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#" rdf:about=""><pdfaExtension:schemas><rdf:Bag><rdf:li rdf:parseType="Resource"><pdfaSchema:schema>Factur-X PDFA Extension Schema</pdfaSchema:schema><pdfaSchema:namespaceURI>urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#</pdfaSchema:namespaceURI><pdfaSchema:prefix>fx</pdfaSchema:prefix><pdfaSchema:property><rdf:Seq><rdf:li rdf:parseType="Resource"><pdfaProperty:name>DocumentFileName</pdfaProperty:name><pdfaProperty:valueType>Text</pdfaProperty:valueType><pdfaProperty:category>external</pdfaProperty:category><pdfaProperty:description>name of the embedded XML invoice file</pdfaProperty:description></rdf:li><rdf:li rdf:parseType="Resource"><pdfaProperty:name>DocumentType</pdfaProperty:name><pdfaProperty:valueType>Text</pdfaProperty:valueType><pdfaProperty:category>external</pdfaProperty:category><pdfaProperty:description>INVOICE</pdfaProperty:description></rdf:li><rdf:li rdf:parseType="Resource"><pdfaProperty:name>Version</pdfaProperty:name><pdfaProperty:valueType>Text</pdfaProperty:valueType> <pdfaProperty:category>external</pdfaProperty:category><pdfaProperty:description>The actual version of the Factur-X XML schema</pdfaProperty:description></rdf:li><rdf:li rdf:parseType="Resource"><pdfaProperty:name>ConformanceLevel</pdfaProperty:name><pdfaProperty:valueType>Text</pdfaProperty:valueType><pdfaProperty:category>external</pdfaProperty:category><pdfaProperty:description>The conformance level of the embedded Factur-X data</pdfaProperty:description></rdf:li></rdf:Seq></pdfaSchema:property></rdf:li></rdf:Bag></pdfaExtension:schemas></rdf:Description><rdf:Description xmlns:fx="urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#" rdf:about="" fx:ConformanceLevel="EN 16931" fx:DocumentFileName="factur-x.xml" fx:DocumentType="INVOICE" fx:Version="1.0"/>
</rdf:RDF></x:xmpmeta>
<?xpacket end="w"?>`)
打开结果文件 (example) 时,您可以看到嵌入的 XMP 数据:
<< /Type /Metadata /Subtype /XML /Length 3286 >>
stream
<<< ... RDF ... >>>
endstream
endobj
6 0 obj
<<
/Producer (FPDF 1.7)
/CreationDate (D:20200615175638)
>>
endobj
7 0 obj
这个 XMP 似乎没有被任何验证器或 adobe 拾取。
感谢任何帮助。
【问题讨论】: