首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iTextSharp XML ZUGFeRD-invoice.xml附件

iTextSharp XML ZUGFeRD-invoice.xml附件
EN

Stack Overflow用户
提问于 2014-09-25 10:57:22
回答 1查看 1.5K关注 0票数 0

我使用iTextSharp 5.5.3,Ii需要生成一个ConformanceLevel = ZUGFeRD的PDF/A。我在设置正确的XMP模式标志时遇到了问题。

代码正在工作,但我总是得到异常。

ZUGFeRD XMP模式应包含附件名称。

当我结束写作的时候。PDF是以前生成的,但似乎与ZUGFeRD不兼容。

我不知道如何修正这个警告。我真的希望有人能帮我。我已经为这个问题做了两天了,却找不到解决的方法。

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-25 12:56:15

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

代码语言:javascript
复制
writer.Close()

当您关闭Document时,写入器将自动关闭。您面临的问题是,当作者第一次关闭时,XMP被写入文档。XmpWriter中的数据被检查、批准和使用。

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

ZUGFeRD的问题是我们还没有找到德文标准的最终版本。我不明白你在评论中提出的额外问题是什么意思。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26036852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档