【问题标题】:iTextSharp XML ZUGFeRD-invoice.xml attachmentiTextSharp XML ZUGFeRD-invoice.xml 附件
【发布时间】:2014-09-25 10:57:22
【问题描述】:

我使用 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()

【问题讨论】:

  • 如果删除 writer.Close() 会发生什么?没有理由需要这条线。您是否在 official 文档(即:我编写的文档)中看到 writer 已关闭的任何示例?
  • 耶!就是这样!异常消失了!非常感谢!
  • 您有任何 cmets 可以让我的代码更好地工作吗?我认为我仍然存在符合 ZUGFeRD 的问题。我也必须在 /Names/EmbeddedFiles/Names 中设置文件附件名称,但我找不到这样做的方法?你能给我你的意思的官方文档的链接吗?我只发现有关使用 iTextSharp 创建符合 ZUGFeRD 的 PDF/A 的信息非常差……谢谢!

标签: vb.net itext xmp pdfa zugferd


【解决方案1】:

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

writer.Close()

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

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

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

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

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

【讨论】:

  • 我即将飞往旧金山参加 Java One。进一步的答案,你必须直接联系iText Software,希望其他人回答,或者等到10月下旬我回来。
  • 我看到您编辑了我的答案并添加了一个额外的问题删除了我的初始答案。我强烈建议您阅读 StackOverflow 常见问题解答,因为您的编辑被不同的版主拒绝StackOverflow。
  • @Chris - 不要编辑答案以回复或评论它们。如果您有新问题,请使用任何页面顶部的“”链接发布。
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
相关资源
最近更新 更多