/** * Adds information about the PDF/A conformance level to the XMP metadata. * * @param conformanceLevel * @throws IOException */ private void AddRdfDescription(PdfAConformanceLevel conformanceLevel) { switch (conformanceLevel) { case PdfAConformanceLevel.PDF_A_1A: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "1"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "A"); break; case PdfAConformanceLevel.PDF_A_1B: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "1"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "B"); break; case PdfAConformanceLevel.PDF_A_2A: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "2"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "A"); break; case PdfAConformanceLevel.PDF_A_2B: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "2"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "B"); break; case PdfAConformanceLevel.PDF_A_2U: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "2"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "U"); break; case PdfAConformanceLevel.PDF_A_3A: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "3"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "A"); break; case PdfAConformanceLevel.PDF_A_3B: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "3"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "B"); break; case PdfAConformanceLevel.PDF_A_3U: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "3"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "U"); break; case PdfAConformanceLevel.ZUGFeRD: xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.PART, "3"); xmpMeta.SetProperty(XmpConst.NS_PDFA_ID, PdfAProperties.CONFORMANCE, "B"); IXmpMeta taggedExtensionMeta = XmpMetaFactory.ParseFromString(zugferdExtension); XmpUtils.AppendProperties(taggedExtensionMeta, xmpMeta, true, false); break; default: break; } if (writer.IsTagged()) { IXmpMeta taggedExtensionMeta = XmpMetaFactory.ParseFromString(pdfUaExtension); XmpUtils.AppendProperties(taggedExtensionMeta, xmpMeta, true, false); } }
private void GenerateEAttachmentDocument(PdfAWriter writer, XmpWriter xmpWriter, EAttactment attachment) { // Use default intent if output intent of this instance was not set if (attachment.outputIntents == null) { //byte[] iccProfile = File.ReadAllBytes("/Resources/sRGB Color Space Profile.icm"); byte[] iccProfile = Properties.Resources.sRGB_Color_Space_Profile; ICC_Profile icc = ICC_Profile.GetInstance(iccProfile); writer.SetOutputIntents("sRGB IEC61966-2.1", "", "http://www.color.org", "sRGB IEC61966-2.1", icc); } else { OutputIntents outputIntents = attachment.outputIntents; byte[] iccProfileByteArray = File.ReadAllBytes(outputIntents.colorProfilePath); ICC_Profile icc = ICC_Profile.GetInstance(iccProfileByteArray); writer.SetOutputIntents(outputIntents.outputConditionIdentifier, outputIntents.outputCondition, outputIntents.registryName, outputIntents.info, icc); } //============= Create Exchange ECertificate ================= // 1 add ContentInformation.xml to document PdfArray attachmentArray = new PdfArray(); writer.ExtraCatalog.Put(new PdfName("AF"), attachmentArray); PdfFileSpecification contentSpec = this.EmbeddedAttachment(attachment.contentInformationXMLPath, attachment.attachmentName, attachment.attachmentMIME, new PdfName(attachment.attachmentType), writer, attachment.attachmentDescription); attachmentArray.Add(contentSpec.Reference); foreach (var item in attachment.fileAttachments) { contentSpec = this.EmbeddedAttachment(item.attachmentPath, item.attachmentName, item.attachmentMIME, new PdfName(item.attachmentType), writer, item.attachmentDescription); attachmentArray.Add(contentSpec.Reference); } // 2 add Electronic Document XMP Metadata ElectronicDocumentSchema ed = ElectronicDocumentSchema.generateED(attachment.attachmentName, attachment.documentVersion, attachment.documentID, attachment.documentOID); xmpWriter.AddRdfDescription(ed); string pdfaSchema = Properties.Resources.EDocument_PDFAExtensionSchema; // convert string to stream byte[] byteArray = Encoding.UTF8.GetBytes(pdfaSchema); //byte[] byteArray = Encoding.ASCII.GetBytes(contents); MemoryStream stream = new MemoryStream(byteArray); IXmpMeta edPDFAextension = XmpMetaFactory.Parse(stream); IXmpMeta originalXMP = xmpWriter.XmpMeta; XmpUtils.AppendProperties(edPDFAextension, originalXMP, true, true); }
virtual public void AddRdfDescription(XmpSchema s) { try { String str = "<rdf:RDF xmlns:rdf=\"" + XmpConst.NS_RDF + "\">" + "<rdf:Description rdf:about=\"" + xmpMeta.ObjectName + "\" " + s.Xmlns + ">" + s.ToString() + "</rdf:Description></rdf:RDF>\n"; IXmpMeta extMeta = XmpMetaFactory.ParseFromString(str); XmpUtils.AppendProperties(extMeta, xmpMeta, true, true); } catch (XmpException xmpExc) { throw new IOException(xmpExc.Message); } }
public void AddRdfDescription(String xmlns, String content) { try { String str = "<rdf:RDF xmlns:rdf=\"" + XmpConst.NS_RDF + "\">" + "<rdf:Description rdf:about=\"" + xmpMeta.ObjectName + "\" " + xmlns + ">" + content + "</rdf:Description></rdf:RDF>\n"; byte[] bytes = Encoding.Convert(Encoding.UTF8, Encoding.ASCII, Encoding.UTF8.GetBytes(str)); IXmpMeta extMeta = XmpMetaFactory.ParseFromString(str); XmpUtils.AppendProperties(extMeta, xmpMeta, true, true); } catch (XmpException xmpExc) { throw new IOException(xmpExc.Message); } }