2014-09-25 2 views
0

iTextSharp 5.5.3을 사용하며 ConformanceLevel = ZUGFeRD 인 PDF/A를 생성해야합니다. 올바른 XMP 스키마 플래그를 설정하는 데 문제가 있습니다.iTextSharp XML ZUGFeRD-invoice.xml 첨부 파일

코드는 작동하지만 난 작가를 닫을 때 나는 항상

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

'writer.Close()'를 제거하면 어떻게됩니까? 그 선이 필요한 이유가 없습니다. "writer"가 닫힌 * 공식 문서 (예 : 나에 의해 작성된 문서)에서 예제를 본 적이 있습니까? –

+0

예! 그게 전부 야! 예외는 사라졌다! 고마워요! – Chris

+0

내 코드를 더 잘 작동시킬 수있는 의견이 있으십니까? 나는 아직도 문제가 ZUGFeRD를 준수해야한다고 생각합니다./이름/EmbeddedFiles/이름에도 파일 첨부 파일 이름을 설정해야하지만 이렇게 할 수있는 방법을 찾을 수 없습니까? 무슨 뜻인지 공식 문서에 대한 링크를 주시겠습니까? 나는 iTextSharp로 ZUGFeRD 호환 PDF/A를 만드는 것에 관한 매우 가난한 정보만을 발견했습니다 ... 고마워! – Chris

답변

2

당신은 다음 줄을 제거하여 문제를 해결할 수 있습니다 :

writer.Close() 

작가가 자동으로 닫혀는 Document을 닫을 때. 직면 한 문제는 처음으로 작성자를 닫을 때 XMP가 문서에 쓰여지는 것입니다. XmpWriter의 데이터가 확인되고 승인되며 이 (가)으로 소비됩니다.

writer을 두 번 닫으면 추가 한 XMP 데이터가 사라집니다. 따라서 예외 : 일부 ZUGFeRD 관련 정보가 누락되었습니다.

ZUGFeRD의 문제점은 아직 완성 된 표준 버전의 독일어를 아직 찾지 못했기 때문입니다. 나는 당신이 코멘트에서 여분의 질문으로 무엇을 의미하는지 이해하지 못합니다.

나는 ZUGFeRD의 PDF의 내부 구조의 스크린 샷을했습니다

:

enter image description here

내가 볼 수있는 파일의 이름은 EmbeddedFiles의 이름 트리에 저장되어 지금까지 기입. 이게 너에게 맞지 않는다고 말하는거야?

+0

샌프란시스코에서 Java One으로 비행하려고합니다. 추가 답변을 원하시면, iText Software에 직접 연락하거나, 다른 사람이 대답하기를 희망하거나, 내가 돌아 왔을 때 10 월 하순까지 기다려야합니다. –

+2

당신이 내 대답을 편집했고 여분의 질문을 추가 ** 처음 답변을 삭제했습니다 ** StackOverflow에서 다른 중재자에 의해 편집이 거부되었으므로 StackOverflow FAQ를 읽으시기 바랍니다. –

+0

@Chris - 회신 할 답변을 수정하거나 댓글을 달지 마십시오. 새로운 질문이있는 경우 페이지 상단의 "질문하기"링크를 사용하여 게시하십시오. –