0

我使用 iTextSharp 5.5.3,我需要使用 ConformanceLevel = ZUGFeRD 生成 PDF/A。我无法设置正确的 XMP 模式标志。

代码正在运行,但我总是遇到异常

ZUGFeRD XMP 模式应包含附件名称

当我关闭作家。PDF 是之前生成的,但似乎不符合 ZUGFeRD。

我不知道如何解决这个警告。我真的希望有人能帮助我。我已经在这个问题上工作了 2 天,但找不到方法。

Dim document As New Document(PageSize.A4, 0, 0, 0, 0)
Dim writer As PdfAWriter = PdfAWriter.GetInstance(document, New FileStream(tmpPDFDatei, FileMode.Create), PdfAConformanceLevel.ZUGFeRD)
writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_7)
writer.CreateXmpMetadata()
Dim PDFbaseFont As BaseFont = BaseFont.CreateFont(Application.StartupPath & "\Courier Prime.ttf", BaseFont.CP1252, BaseFont.EMBEDDED)

document.Open()

Dim icc As ICC_Profile = ICC_Profile.GetInstance(Application.StartupPath & "\sRGB_IEC61966-2-1_black_scaled.icc")
writer.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc)

Dim cb As PdfContentByte = writer.DirectContent

cb.BeginText()

cb.SetFontAndSize(PDFbaseFont, 10)
cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, "TEST TEXT", 0, 0, 0)
cb.SetHorizontalScaling(100)
cb.EndText()

Dim Params As PdfDictionary = New PdfDictionary
Params.Put(PdfName.MODDATE, New PdfDate)

Dim fileSpec As PdfFileSpecification = PdfFileSpecification.FileEmbedded(writer, tmpXMLDatei, "ZUGFeRD-invoice.xml", Nothing, False, "text/xml", Params)
fileSpec.Put(New PdfName("AFRelationship"), New PdfName("Alternative"))
writer.AddFileAttachment("ZUGFeRD Invoice", fileSpec)
Dim aRR As PdfArray = New PdfArray
aRR.Add(fileSpec.Reference)
writer.ExtraCatalog.Put(New PdfName("AF"), aRR)

writer.XmpWriter.SetProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName, "ZUGFeRD-invoice.xml")
writer.XmpWriter.SetProperty(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentType, "INVOICE")

document.Close()
writer.Close()
4

1 回答 1

2

您可以通过删除以下行来解决您的问题:

writer.Close()

当您关闭Document. 您面临的问题是 XMP 在编写器第一次关闭时被写入文档。中的数据XmpWriter经过检查、批准和消费

当您writer第二次关闭时,您添加的 XMP 数据就消失了。因此例外:缺少一些 ZUGFeRD 相关信息。

ZUGFeRD 的问题是我们还没有找到德语标准的最终版本。我不明白你对评论中额外问题的意思。

我制作了 ZUGFeRD PDF 内部结构的屏幕截图:

在此处输入图像描述

据我所知,文件的名称存储在 EmbeddedFiles 条目的名称树中。你说这不适合你吗?

于 2014-09-25T12:56:15.123 回答