/// <summary> ///By package because ChangeDocumentType not working well /// </summary> /// <param name="documentStream"></param> private void ChangeDocmToDocxUsingPackage(Stream documentStream) { // Open the document in the stream and replace the custom XML part using (System.IO.Packaging.Package packageFile = System.IO.Packaging.Package.Open(documentStream, FileMode.Open, FileAccess.ReadWrite)) { System.IO.Packaging.PackagePart packagePart = null; // Find part containing the correct namespace foreach (var part in packageFile.GetParts()) { if (part.ContentType.Equals("application/vnd.ms-word.document.macroEnabled.main+xml", StringComparison.OrdinalIgnoreCase)) { packagePart = part; break; } } if (packagePart != null) { using (MemoryStream source = new MemoryStream()) { CopyStream(packagePart.GetStream(), source); var saveRelationBeforeDelPart = new List <PackageRelationship>(); foreach (var item in packagePart.GetRelationships()) { saveRelationBeforeDelPart.Add(item); } Uri uriData = packagePart.Uri; // Delete the existing XML part if (packageFile.PartExists(uriData)) { packageFile.DeletePart(uriData); } // Load the custom XML data var pkgprtData = packageFile.CreatePart(uriData, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml", System.IO.Packaging.CompressionOption.SuperFast); source.Position = 0;//reset position CopyStream(source, pkgprtData.GetStream(FileMode.Create)); foreach (var copyRel in saveRelationBeforeDelPart) { pkgprtData.CreateRelationship(copyRel.TargetUri, copyRel.TargetMode, copyRel.RelationshipType, copyRel.Id); } } } } }
/* S T M C R E A T E P A R T */ /*---------------------------------------------------------------------------- %%Function: StmCreatePart %%Qualified: ArbWeb.OOXML.StmCreatePart %%Contact: rlittle ----------------------------------------------------------------------------*/ public static Stream StmCreatePart(Package pkg, string sUri, string sContentType, out PackagePart prt) { Uri uriTeams = new System.Uri(sUri, UriKind.Relative); prt = pkg.GetPart(uriTeams); List<PackageRelationship> plrel = new List<PackageRelationship>(); foreach (PackageRelationship rel in prt.GetRelationships()) { plrel.Add(rel); } prt = null; pkg.DeletePart(uriTeams); prt = pkg.CreatePart(uriTeams, sContentType); foreach (PackageRelationship rel in plrel) { prt.CreateRelationship(rel.TargetUri, rel.TargetMode, rel.RelationshipType, rel.Id); } return prt.GetStream(FileMode.Create, FileAccess.Write); }