我使用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()
答案 0 :(得分:2)
您可以通过删除以下行来解决您的问题:
writer.Close()
关闭Document
时,作家会自动关闭。您遇到的问题是第一次关闭编写器时XMP将写入文档。 XmpWriter
中的数据已经过检查,批准并消费。
第二次关闭writer
时,您添加的XMP数据消失了。因此例外:缺少一些与ZUGFeRD相关的信息。
我们ZUGFeRD的问题是我们还没有找到德语标准的最终版本。我不明白你对评论中的额外问题的意思。
我已经制作了ZUGFeRD PDF内部结构的屏幕截图:
据我所知,文件名存储在EmbeddedFiles条目的Name树中。你是说这不是你的情况吗?