iTextSharp XML ZUGFeRD-invoice.xml附件

时间:2014-09-25 10:57:22

标签: vb.net itextsharp xmp pdfa

我使用iTextSharp 5.5.3,Ii需要使用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()

1 个答案:

答案 0 :(得分:2)

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

writer.Close()

关闭Document时,作家会自动关闭。您遇到的问题是第一次关闭编写器时XMP将写入文档。 XmpWriter中的数据已经过检查,批准并消费

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

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

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

enter image description here

据我所知,文件名存储在EmbeddedFiles条目的Name树中。你是说这不是你的情况吗?