public override void Close(PdfWriter writer) { base.Close(writer); bool ok = false; IXmpMeta xmpMeta = null; if (writer.XmpWriter == null) { if (writer is PdfAStamperImp) { xmpMeta = ((PdfAStamperImp)writer).GetXmpMeta(); PdfReader pdfReader = ((PdfAStamperImp)writer).GetPdfReader(); PdfArray pdfArray = pdfReader.Catalog.GetAsArray(PdfName.AF); if (pdfArray != null) { for (int i = 0; i < pdfArray.Size; i++) { PdfFileSpecification pdfFileSpecification = new PdfFileSpecification(); pdfFileSpecification.PutAll((PdfDictionary)pdfArray.GetDirectObject(i)); attachments.Add(pdfFileSpecification); } } } } else { xmpMeta = writer.XmpWriter.XmpMeta; } if (xmpMeta == null) { writer.CreateXmpMetadata(); xmpMeta = writer.XmpWriter.XmpMeta; } try { String docFileName = xmpMeta.GetPropertyString(PdfAXmpWriter.zugferdSchemaNS, PdfAXmpWriter.zugferdDocumentFileName); foreach (PdfFileSpecification attachment in attachments) { if ((attachment.GetAsString(PdfName.UF) != null && docFileName.Equals(attachment.GetAsString(PdfName.UF).ToString())) || (attachment.GetAsString(PdfName.F) != null && docFileName.Equals(attachment.GetAsString(PdfName.F).ToString()))) { PdfName relationship = attachment.GetAsName(PdfName.AFRELATIONSHIP); if (!AFRelationshipValue.Alternative.Equals(relationship)) { attachments.Clear(); throw new PdfAConformanceException(attachment, MessageLocalization.GetComposedMessage("afrelationship.value.shall.be.alternative")); } ok = true; break; } } } catch (Exception e) { attachments.Clear(); throw e; } attachments.Clear(); if (!ok) { throw new PdfAConformanceException(xmpMeta, MessageLocalization.GetComposedMessage("zugferd.xmp.schema.shall.contain.attachment.name")); } }