public void CreateCDAPackage() { // ------------------------------------------------------------------------------ // Set up signing certificate and identifiers // ------------------------------------------------------------------------------ // Load certificate used to sign the CDA document X509Certificate2 signingCert = X509CertificateUtil.GetCertificate( "Signing Certificate Find Value", X509FindType.FindBySubjectName, StoreName.My, StoreLocation.CurrentUser, true); // ------------------------------------------------------------------------------ // Create CDAPackage // ------------------------------------------------------------------------------ // Create an approver var approver = new Approver() { PersonId = new Uri("http://ns.electronichealth.net.au/id/hi/hpii/1.0/8003610000000000"), PersonFamilyName = "Jacobs", PersonGivenNames = new List <string> { "Adam", "Barry" }, PersonNameSuffixes = new List <string> { "MD", "JR" }, PersonTitles = new List <string> { "MR", "DR" } }; // Create a CDAPackage instance var package = new CDAPackage(approver); // Create the CDA root document for the CDA package package.CreateRootDocument(File.ReadAllBytes("CdaDocumentXmlFile.xml")); // Add an image attachment package.AddDocumentAttachment( "ImageAttachment1.jpg", File.ReadAllBytes("ImageAttachment1.jpg") ); // Add another image attachment package.AddDocumentAttachment( "ImageAttachment2.png", File.ReadAllBytes("ImageAttachment2.png") ); // Create the CDA package zip CDAPackageUtility.CreateZip(package, "CdaPackageOutputFilePath.zip", signingCert); }
/// <summary> /// Extract the package data. /// </summary> /// <param name="cdaPackageData"></param> /// <returns></returns> public CdaPackageData ExtractPackageData(byte[] cdaPackageData) { // NOTE will throw a validation exception if the signature is not valid CDAPackage cdaPackage = CDAPackageUtility.Extract(cdaPackageData, certificate => { // NO-OP assume the certificate is valid }); // Load the document XmlDocument cdaDocument = GetCdaDocumentFromPackage(cdaPackage); // Extract the package data return(ExtractPackageData(cdaDocument)); }
private static XmlDocument GetCdaDocumentFromPackage(CDAPackage cdaPackage) { CDAPackageFile cdaDocumentFile = cdaPackage.CDADocumentRoot; XmlDocument cdaDocument = new XmlDocument(); using (var memoryStream = new MemoryStream(cdaDocumentFile.FileContent) { Position = 0 }) { cdaDocument.Load(memoryStream); } return(cdaDocument); }