public void TestOpenFromInputStream() { string originalFile = OpenXml4NetTestDataSamples.GetSampleFileName("TestPackageCommon.docx"); FileStream finp = new FileStream(originalFile, FileMode.Open, FileAccess.Read); OPCPackage p = OPCPackage.Open(finp); Assert.IsNotNull(p); Assert.IsNotNull(p.Relationships); Assert.AreEqual(12, p.GetParts().Count); // Check it has the usual bits Assert.IsTrue(p.HasRelationships); Assert.IsTrue(p.ContainPart(PackagingUriHelper.CreatePartName("/_rels/.rels"))); }
public void TestExisting() { XSSFWorkbook workbook = XSSFTestDataSamples.OpenSampleWorkbook("Formatting.xlsx"); Assert.IsNotNull(workbook.GetSharedStringSource()); Assert.IsNotNull(workbook.GetStylesSource()); // And check a few low level bits too OPCPackage pkg = OPCPackage.Open(HSSFTestDataSamples.OpenSampleFileStream("Formatting.xlsx")); PackagePart wbPart = pkg.GetPart(PackagingUriHelper.CreatePartName("/xl/workbook.xml")); // Links to the three sheets, shared, styles and themes Assert.IsTrue(wbPart.HasRelationships); Assert.AreEqual(6, wbPart.Relationships.Size); }
/** * Fetches the InputStream to read the contents, based * of the specified core part, for which we are defined * as a suitable relationship */ public Stream GetContents(PackagePart corePart) { PackageRelationshipCollection prc = corePart.GetRelationshipsByType(_relation); IEnumerator <PackageRelationship> it = prc.GetEnumerator(); if (it.MoveNext()) { PackageRelationship rel = it.Current; PackagePartName relName = PackagingUriHelper.CreatePartName(rel.TargetUri); PackagePart part = corePart.Package.GetPart(relName); return(part.GetInputStream()); } log.Log(POILogger.WARN, "No part " + _defaultName + " found"); return(null); }
protected static OPCPackage newPackage() { try { OPCPackage opcPackage = OPCPackage.Create((Stream) new MemoryStream()); PackagePartName partName = PackagingUriHelper.CreatePartName(XSSFRelation.WORKBOOK.DefaultFileName); opcPackage.AddRelationship(partName, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"); opcPackage.CreatePart(partName, XSSFRelation.WORKBOOK.ContentType); opcPackage.GetPackageProperties().SetCreatorProperty(POIXMLDocument.DOCUMENT_CREATOR); return(opcPackage); } catch (Exception ex) { throw new POIXMLException(ex); } }
public void TestRelativizeUri() { Uri Uri1 = new Uri("/word/document.xml", UriKind.Relative); Uri Uri2 = new Uri("/word/media/image1.gif", UriKind.Relative); Uri Uri3 = new Uri("/word/media/image1.gif#Sheet1!A1", UriKind.Relative); Uri Uri4 = new Uri("#'My%20Sheet1'!A1", UriKind.Relative); // Document to image is down a directory Uri retUri1to2 = PackagingUriHelper.RelativizeUri(Uri1, Uri2); Assert.AreEqual("media/image1.gif", retUri1to2.OriginalString); // Image to document is up a directory Uri retUri2to1 = PackagingUriHelper.RelativizeUri(Uri2, Uri1); Assert.AreEqual("../document.xml", retUri2to1.OriginalString); // Document and CustomXML parts totally different [Julien C.] Uri UriCustomXml = new Uri("/customXml/item1.xml", UriKind.RelativeOrAbsolute); Uri UriRes = PackagingUriHelper.RelativizeUri(Uri1, UriCustomXml); Assert.AreEqual("../customXml/item1.xml", UriRes.ToString()); // Document to itself is the same place (empty Uri) Uri retUri2 = PackagingUriHelper.RelativizeUri(Uri1, Uri1); // YK: the line below used to assert empty string which is wrong // if source and target are the same they should be relaitivized as the last segment, // see Bugzilla 51187 Assert.AreEqual("document.xml", retUri2.OriginalString); // relativization against root Uri root = new Uri("/", UriKind.Relative); UriRes = PackagingUriHelper.RelativizeUri(root, Uri1); Assert.AreEqual("/word/document.xml", UriRes.ToString()); //Uri compatible with MS Office and OpenOffice: leading slash is Removed UriRes = PackagingUriHelper.RelativizeUri(root, Uri1, true); Assert.AreEqual("word/document.xml", UriRes.ToString()); //preserve Uri fragments UriRes = PackagingUriHelper.RelativizeUri(Uri1, Uri3, true); Assert.AreEqual("media/image1.gif#Sheet1!A1", UriRes.ToString()); UriRes = PackagingUriHelper.RelativizeUri(root, Uri4, true); Assert.AreEqual("#'My%20Sheet1'!A1", UriRes.ToString()); }
public void TestRemovePartRecursive() { String originalFile = OpenXml4NetTestDataSamples.GetSampleFileName("TestPackageCommon.docx"); FileInfo targetFile = OpenXml4NetTestDataSamples.GetOutputFile("TestPackageRemovePartRecursiveOUTPUT.docx"); FileInfo tempFile = OpenXml4NetTestDataSamples.GetOutputFile("TestPackageRemovePartRecursiveTMP.docx"); OPCPackage p = OPCPackage.Open(originalFile, PackageAccess.READ_WRITE); p.RemovePartRecursive(PackagingUriHelper.CreatePartName(new Uri( "/word/document.xml", UriKind.Relative))); p.Save(tempFile.FullName); // Compare the original and newly saved document Assert.IsTrue(File.Exists(targetFile.FullName)); ZipFileAssert.AssertEqual(targetFile, tempFile); File.Delete(targetFile.FullName); }
public void Assert_50154(OPCPackage pkg) { Uri drawingUri = new Uri("/xl/drawings/drawing1.xml", UriKind.Relative); PackagePart drawingPart = pkg.GetPart(PackagingUriHelper.CreatePartName(drawingUri)); PackageRelationshipCollection drawingRels = drawingPart.Relationships; Assert.AreEqual(6, drawingRels.Size); // expected one image Assert.AreEqual(1, drawingPart.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/image").Size); // and three hyperlinks Assert.AreEqual(5, drawingPart.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink").Size); PackageRelationship rId1 = drawingPart.GetRelationship("rId1"); Uri parent = drawingPart.PartName.URI; Uri rel1 = new Uri(Path.Combine(parent.ToString(), rId1.TargetUri.ToString()), UriKind.Relative); Uri rel11 = PackagingUriHelper.RelativizeUri(drawingPart.PartName.URI, rId1.TargetUri); Assert.AreEqual("'Another Sheet'!A1", WebUtility.UrlDecode(rel1.ToString().Split(new char[] { '#' })[1])); Assert.AreEqual("'Another Sheet'!A1", WebUtility.UrlDecode(rel11.ToString().Split(new char[] { '#' })[1])); PackageRelationship rId2 = drawingPart.GetRelationship("rId2"); Uri rel2 = PackagingUriHelper.RelativizeUri(drawingPart.PartName.URI, rId2.TargetUri); Assert.AreEqual("../media/image1.png", rel2.OriginalString); PackageRelationship rId3 = drawingPart.GetRelationship("rId3"); Uri rel3 = new Uri(Path.Combine(parent.ToString(), rId3.TargetUri.ToString()), UriKind.Relative); Assert.AreEqual("#ThirdSheet!A1", rel3.OriginalString.Split(new char[] { '/' })[3]); PackageRelationship rId4 = drawingPart.GetRelationship("rId4"); Uri rel4 = new Uri(Path.Combine(parent.ToString(), rId4.TargetUri.ToString()), UriKind.Relative); Assert.AreEqual("#'\u0410\u043F\u0430\u0447\u0435 \u041F\u041E\u0418'!A1", WebUtility.UrlDecode(rel4.OriginalString.Split(new char[] { '/' })[3])); PackageRelationship rId5 = drawingPart.GetRelationship("rId5"); Uri rel5 = new Uri(Path.Combine(parent.ToString(), rId5.TargetUri.ToString()), UriKind.Relative); // back slashed have been Replaced with forward //Assert.AreEqual("file:///D:/chan-chan.mp3", rel5.ToString()); PackageRelationship rId6 = drawingPart.GetRelationship("rId6"); Uri rel6 = new Uri(ResolveRelativePath(parent.ToString(), WebUtility.UrlDecode(rId6.TargetUri.ToString())), UriKind.Relative); //Assert.AreEqual("../../../../../../../cygwin/home/yegor/dinom/&&&[access].2010-10-26.log", rel6.OriginalString); //Assert.AreEqual("#'\u0410\u043F\u0430\u0447\u0435 \u041F\u041E\u0418'!A5", HttpUtility.UrlDecode(rel6.OriginalString.Split(new char[] { '/' })[3])); }
/** * Commit Changes to the underlying OPC namespace */ public virtual void Commit() { if (extPart == null && !NEW_EXT_INSTANCE.ToString().Equals(ext.props.ToString())) { try { PackagePartName prtname = PackagingUriHelper.CreatePartName("/docProps/app.xml"); pkg.AddRelationship(prtname, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties"); extPart = pkg.CreatePart(prtname, "application/vnd.openxmlformats-officedocument.extended-properties+xml"); } catch (InvalidFormatException e) { throw new POIXMLException(e); } } if (custPart == null && !NEW_CUST_INSTANCE.ToString().Equals(cust.props.ToString())) { try { PackagePartName prtname = PackagingUriHelper.CreatePartName("/docProps/custom.xml"); pkg.AddRelationship(prtname, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties"); custPart = pkg.CreatePart(prtname, "application/vnd.openxmlformats-officedocument.custom-properties+xml"); } catch (InvalidFormatException e) { throw new POIXMLException(e); } } if (extPart != null) { Stream out1 = extPart.GetOutputStream(); if (extPart.Size > 0) { extPart.Clear(); } ext.props.Save(out1); out1.Dispose(); } if (custPart != null) { Stream out1 = custPart.GetOutputStream(); cust.props.Save(out1); out1.Dispose(); } }
public void TestInvalidPartNames() { string[] invalidNames = { "/", "/xml./doc.xml", "[Content_Types].xml", "//xml/." }; foreach (string s in invalidNames) { Uri uri = null; try { uri = new Uri(s, UriKind.Relative); } catch (UriFormatException e) { Assert.IsTrue(s.Equals("[Content_Types].xml")); continue; } Assert.IsFalse( PackagingUriHelper.IsValidPartName(uri), "This part name SHOULD NOT be valid: " + s); } }
public void TestPartNameWithUnreservedEncodedCharactersFailure() { string[] invalidNames = { "/a/docum%65nt.xml" }; try { foreach (string s in invalidNames) { Assert.IsFalse( PackagingUriHelper .IsValidPartName(new Uri(s, UriKind.RelativeOrAbsolute)), "A segment shall not contain percent-encoded unreserved characters [M1.8] : " + s); } } catch (UriFormatException e) { Assert.Fail(e.Message); } }
public void TestPartNameWithNonPCharCharacters() { string[] validNames = { "/doc&.xml" }; try { foreach (string s in validNames) { Assert.IsTrue( PackagingUriHelper .IsValidPartName(new Uri(s, UriKind.RelativeOrAbsolute)), "A segment shall not contain non pchar characters [M1.6] : " + s); } } catch (UriFormatException e) { Assert.Fail(e.Message); } }
public void TestCreatePackageAddPart() { FileInfo targetFile = OpenXml4NetTestDataSamples.GetOutputFile("TestCreatePackageTMP.docx"); FileInfo expectedFile = OpenXml4NetTestDataSamples.GetSampleFile("TestCreatePackageOUTPUT.docx"); // Zap the target file, in case of an earlier run if (targetFile.Exists) { targetFile.Delete(); } // Create a namespace OPCPackage pkg = OPCPackage.Create(targetFile.FullName); PackagePartName corePartName = PackagingUriHelper .CreatePartName("/word/document.xml"); pkg.AddRelationship(corePartName, TargetMode.Internal, PackageRelationshipTypes.CORE_DOCUMENT, "rId1"); PackagePart corePart = pkg .CreatePart( corePartName, "application/vnd.openxmlformats-officedocument.wordProcessingml.document.main+xml"); //Document doc = DocumentHelper.CreateDocument(); //Namespace nsWordProcessinML = new Namespace("w", // "http://schemas.openxmlformats.org/wordProcessingml/2006/main"); //Element elDocument = doc.AddElement(new QName("document", // nsWordProcessinML)); //Element elBody = elDocument.AddElement(new QName("body", // nsWordProcessinML)); //Element elParagraph = elBody.AddElement(new QName("p", // nsWordProcessinML)); //Element elRun = elParagraph // .AddElement(new QName("r", nsWordProcessinML)); //Element elText = elRun.AddElement(new QName("t", nsWordProcessinML)); //elText.SetText("Hello Open XML !"); //StreamHelper.SaveXmlInStream(doc, corePart.GetOutputStream()); //pkg.Close(); //ZipFileAssert.AssertEqual(expectedFile, targetFile); //File.Delete(targetFile.FullName); }
public void TestSetVBAProject() { FileInfo file; byte[] allBytes = new byte[256]; for (int i = 0; i < 256; i++) { allBytes[i] = (byte)(i - 128); } XSSFWorkbook wb1 = new XSSFWorkbook(); wb1.CreateSheet(); wb1.SetVBAProject(new ByteArrayInputStream(allBytes)); file = TempFile.CreateTempFile("poi-", ".xlsm"); Stream out1 = new FileStream(file.FullName, FileMode.Open, FileAccess.ReadWrite); wb1.Write(out1); out1.Close(); wb1.Close(); // Check the package contains what we'd expect it to OPCPackage pkg = OPCPackage.Open(file); PackagePart wbPart = pkg.GetPart(PackagingUriHelper.CreatePartName("/xl/workbook.xml")); Assert.IsTrue(wbPart.HasRelationships); PackageRelationshipCollection relationships = wbPart.Relationships.GetRelationships(XSSFRelation.VBA_MACROS.Relation); Assert.AreEqual(1, relationships.Size); Assert.AreEqual(XSSFRelation.VBA_MACROS.DefaultFileName, relationships.GetRelationship(0).TargetUri.ToString()); PackagePart vbaPart = pkg.GetPart(PackagingUriHelper.CreatePartName(XSSFRelation.VBA_MACROS.DefaultFileName)); Assert.IsNotNull(vbaPart); Assert.IsFalse(vbaPart.IsRelationshipPart); Assert.AreEqual(XSSFRelation.VBA_MACROS.ContentType, vbaPart.ContentType); byte[] fromFile = IOUtils.ToByteArray(vbaPart.GetInputStream()); CollectionAssert.AreEqual(allBytes, fromFile); // Load back the XSSFWorkbook just to check nothing explodes XSSFWorkbook wb2 = new XSSFWorkbook(pkg); Assert.AreEqual(1, wb2.NumberOfSheets); Assert.AreEqual(XSSFWorkbookType.XLSM, wb2.WorkbookType); pkg.Close(); }
public void TestCreatePartNameRelativeUri() { PackagePartName partNameToValid = PackagingUriHelper .CreatePartName("/word/media/image1.gif"); OPCPackage pkg = OPCPackage.Create("DELETEIFEXISTS.docx"); // Base part PackagePartName nameBase = PackagingUriHelper .CreatePartName("/word/document.xml"); PackagePart partBase = pkg.CreatePart(nameBase, ContentTypes.XML); // Relative part name PackagePartName relativeName = PackagingUriHelper.CreatePartName( new Uri("media/image1.gif", UriKind.RelativeOrAbsolute), partBase); Assert.AreEqual(partNameToValid, relativeName, "The part name must be equal to " + partNameToValid.Name); pkg.Revert(); }
private void assertMSCompatibility(OPCPackage pkg) { PackagePartName relName = PackagingUriHelper.CreatePartName(PackageRelationship.ContainerPartRelationship); PackagePart relPart = pkg.GetPart(relName); XmlDocument xmlRelationshipsDoc = DocumentHelper.LoadDocument(relPart.GetInputStream()); XmlElement root = xmlRelationshipsDoc.DocumentElement; XmlNodeList nodeList = root.GetElementsByTagName(PackageRelationship.RELATIONSHIP_TAG_NAME); int nodeCount = nodeList.Count; for (int i = 0; i < nodeCount; i++) { XmlElement element = (XmlElement)nodeList.Item(i); String value = element.GetAttribute(PackageRelationship.TARGET_ATTRIBUTE_NAME); Assert.IsTrue(value[0] != '/', "Root target must not start with a leading slash ('/'): " + value); } }
public void SetUp() { values = new Dictionary <PackagePartName, String>(); // Expected values expectedValues = new Dictionary <PackagePartName, String>(); expectedValues.Add(PackagingUriHelper.CreatePartName("/_rels/.rels"), "application/vnd.openxmlformats-package.relationships+xml"); expectedValues .Add(PackagingUriHelper.CreatePartName("/docProps/app.xml"), "application/vnd.openxmlformats-officedocument.extended-properties+xml"); expectedValues.Add(PackagingUriHelper .CreatePartName("/docProps/core.xml"), "application/vnd.openxmlformats-package.core-properties+xml"); expectedValues.Add(PackagingUriHelper .CreatePartName("/word/_rels/document.xml.rels"), "application/vnd.openxmlformats-package.relationships+xml"); expectedValues .Add( PackagingUriHelper.CreatePartName("/word/document.xml"), "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"); expectedValues .Add(PackagingUriHelper.CreatePartName("/word/fontTable.xml"), "application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"); expectedValues.Add(PackagingUriHelper .CreatePartName("/word/media/image1.gif"), "image/gif"); expectedValues .Add(PackagingUriHelper.CreatePartName("/word/settings.xml"), "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"); expectedValues .Add(PackagingUriHelper.CreatePartName("/word/styles.xml"), "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"); expectedValues.Add(PackagingUriHelper .CreatePartName("/word/theme/theme1.xml"), "application/vnd.openxmlformats-officedocument.theme+xml"); expectedValues .Add( PackagingUriHelper .CreatePartName("/word/webSettings.xml"), "application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"); }
public void TestContentTypeAddition() { ContentTypeManager ctm = new ZipContentTypeManager(null, null); PackagePartName name1 = PackagingUriHelper.CreatePartName("/foo/foo.XML"); PackagePartName name2 = PackagingUriHelper.CreatePartName("/foo/foo2.xml"); PackagePartName name3 = PackagingUriHelper.CreatePartName("/foo/doc.rels"); PackagePartName name4 = PackagingUriHelper.CreatePartName("/foo/doc.RELS"); // Add content types ctm.AddContentType(name1, "foo-type1"); ctm.AddContentType(name2, "foo-type2"); ctm.AddContentType(name3, "text/xml+rel"); ctm.AddContentType(name4, "text/xml+rel"); Assert.AreEqual(ctm.GetContentType(name1), "foo-type1"); Assert.AreEqual(ctm.GetContentType(name2), "foo-type2"); Assert.AreEqual(ctm.GetContentType(name3), "text/xml+rel"); Assert.AreEqual(ctm.GetContentType(name3), "text/xml+rel"); }
public void TestPartNameDerivationAdditionAssert_Failure() { OPCPackage pkg = OPCPackage.Create("TODELETEIFEXIST.docx"); try { PackagePartName name = PackagingUriHelper .CreatePartName("/word/document.xml"); PackagePartName nameDerived = PackagingUriHelper .CreatePartName("/word/document.xml/image1.gif"); pkg.CreatePart(name, ContentTypes.XML); pkg.CreatePart(nameDerived, ContentTypes.EXTENSION_GIF); } catch (InvalidOperationException e) { pkg.Revert(); return; } Assert.Fail("A package implementer shall neither create nor recognize a part with a" + " part name derived from another part name by appending segments to it." + " [M1.11]"); }
public void TestAddPackageAlreadyAddAssert_Failure2() { OPCPackage pkg = OPCPackage.Create("DELETEIFEXISTS.docx"); PackagePartName partName = null; try { partName = PackagingUriHelper.CreatePartName("/word/document.xml"); } catch (InvalidFormatException e) { throw new Exception(e.Message); } pkg.CreatePart(partName, ContentTypes.XML); try { pkg.CreatePart(partName, ContentTypes.XML); } catch (InvalidOperationException e) { return; } Assert.Fail("Packages shall not contain equivalent part names and package implementers shall neither create nor recognize packages with equivalent part names. [M1.12]"); }
public void TestLoadRelationships() { Stream is1 = OpenXml4NetTestDataSamples.OpenSampleStream("sample.xlsx"); OPCPackage pkg = OPCPackage.Open(is1); logger.Log(POILogger.DEBUG, "1: " + pkg); PackageRelationshipCollection rels = pkg.GetRelationshipsByType(PackageRelationshipTypes.CORE_DOCUMENT); PackageRelationship coreDocRelationship = rels.GetRelationship(0); PackagePart corePart = pkg.GetPart(coreDocRelationship); String[] relIds = { "rId1", "rId2", "rId3" }; foreach (String relId in relIds) { PackageRelationship rel = corePart.GetRelationship(relId); Assert.IsNotNull(rel); PackagePartName relName = PackagingUriHelper.CreatePartName(rel.TargetUri); PackagePart sheetPart = pkg.GetPart(relName); Assert.AreEqual(1, sheetPart.Relationships.Size, "Number of relationships1 for " + sheetPart.PartName); } }
public void TestDeletePartRecursive() { Dictionary <PackagePartName, String> expectedValues; Dictionary <PackagePartName, String> values; values = new Dictionary <PackagePartName, String>(); // Expected values expectedValues = new Dictionary <PackagePartName, String>(); expectedValues.Add(PackagingUriHelper.CreatePartName("/_rels/.rels"), "application/vnd.openxmlformats-package.relationships+xml"); expectedValues .Add(PackagingUriHelper.CreatePartName("/docProps/app.xml"), "application/vnd.openxmlformats-officedocument.extended-properties+xml"); expectedValues.Add(PackagingUriHelper .CreatePartName("/docProps/core.xml"), "application/vnd.openxmlformats-package.core-properties+xml"); String filepath = OpenXml4NetTestDataSamples.GetSampleFileName("sample.docx"); OPCPackage p = OPCPackage.Open(filepath, PackageAccess.READ_WRITE); // Remove the core part p.DeletePartRecursive(PackagingUriHelper.CreatePartName("/word/document.xml")); foreach (PackagePart part in p.GetParts()) { values.Add(part.PartName, part.ContentType); logger.Log(POILogger.DEBUG, part.PartName); } // Compare expected values with values return by the namespace foreach (PackagePartName partName in expectedValues.Keys) { Assert.IsNotNull(values[partName]); Assert.AreEqual(expectedValues[partName], values[partName]); } // Don't save modifications p.Revert(); }
public void TestCreateUriFromString() { string[] href = { "..\\\\\\cygwin\\home\\yegor\\.vim\\filetype.vim", "..\\Program%20Files\\AGEIA%20Technologies\\v2.3.3\\NxCooking.dll", "file:///D:\\seva\\1981\\r810102ns.mp3", "..\\cygwin\\home\\yegor\\dinom\\%5baccess%5d.2010-10-26.log", "#'Instructions (Text)'!B21", "javascript://" }; foreach (string s in href) { try { Uri Uri = PackagingUriHelper.ToUri(s); } catch (UriFormatException e) { Assert.Fail("Failed to create Uri from " + s); } } }
/** * Recursively copy namespace parts to the destination namespace */ private static void Copy(OPCPackage pkg, PackagePart part, OPCPackage tgt, PackagePart part_tgt) { PackageRelationshipCollection rels = part.Relationships; if (rels != null) { foreach (PackageRelationship rel in rels) { PackagePart p; if (rel.TargetMode == TargetMode.External) { part_tgt.AddExternalRelationship(rel.TargetUri.ToString(), rel.RelationshipType, rel.Id); //external relations don't have associated namespace parts continue; } Uri uri = rel.TargetUri; if (uri.Fragment != null) { part_tgt.AddRelationship(uri, (TargetMode)rel.TargetMode, rel.RelationshipType, rel.Id); continue; } PackagePartName relName = PackagingUriHelper.CreatePartName(rel.TargetUri); p = pkg.GetPart(relName); part_tgt.AddRelationship(p.PartName, (TargetMode)rel.TargetMode, rel.RelationshipType, rel.Id); PackagePart dest; if (!tgt.ContainPart(p.PartName)) { dest = tgt.CreatePart(p.PartName, p.ContentType); Stream out1 = dest.GetOutputStream(); IOUtils.Copy(p.GetInputStream(), out1); out1.Close(); Copy(pkg, p, tgt, dest); } } } }
public void Bug47668() { XSSFWorkbook workbook = XSSFTestDataSamples.OpenSampleWorkbook("47668.xlsx"); IList allPictures = workbook.GetAllPictures(); Assert.AreEqual(1, allPictures.Count); PackagePartName imagePartName = PackagingUriHelper .CreatePartName("/xl/media/image1.jpeg"); PackagePart imagePart = workbook.Package.GetPart(imagePartName); Assert.IsNotNull(imagePart); foreach (XSSFPictureData pictureData in allPictures) { PackagePart picturePart = pictureData.GetPackagePart(); Assert.AreSame(imagePart, picturePart); } XSSFSheet sheet0 = (XSSFSheet)workbook.GetSheetAt(0); XSSFDrawing Drawing0 = (XSSFDrawing)sheet0.CreateDrawingPatriarch(); XSSFPictureData pictureData0 = (XSSFPictureData)Drawing0.GetRelations()[0]; byte[] data0 = pictureData0.Data; CRC32 crc0 = new CRC32(); crc0.Update(data0); XSSFSheet sheet1 = workbook.GetSheetAt(1) as XSSFSheet; XSSFDrawing Drawing1 = sheet1.CreateDrawingPatriarch() as XSSFDrawing; XSSFPictureData pictureData1 = (XSSFPictureData)Drawing1.GetRelations()[0]; byte[] data1 = pictureData1.Data; CRC32 crc1 = new CRC32(); crc1.Update(data1); Assert.AreEqual(crc0.Value, crc1.Value); workbook.Close(); }
public void TestFetchFromCollection() { Stream is1 = OpenXml4NetTestDataSamples.OpenSampleStream("ExcelWithHyperlinks.xlsx"); OPCPackage pkg = OPCPackage.Open(is1); PackagePart sheet = pkg.GetPart( PackagingUriHelper.CreatePartName(SHEET_WITH_COMMENTS)); Assert.IsNotNull(sheet); Assert.IsTrue(sheet.HasRelationships); Assert.AreEqual(6, sheet.Relationships.Size); // Should have three hyperlinks, and one comment PackageRelationshipCollection hyperlinks = sheet.GetRelationshipsByType(HYPERLINK_REL_TYPE); PackageRelationshipCollection comments = sheet.GetRelationshipsByType(COMMENTS_REL_TYPE); Assert.AreEqual(3, hyperlinks.Size); Assert.AreEqual(1, comments.Size); // Check we can Get bits out by id // Hyperlinks are rId1, rId2 and rId3 // Comment is rId6 Assert.IsNotNull(hyperlinks.GetRelationshipByID("rId1")); Assert.IsNotNull(hyperlinks.GetRelationshipByID("rId2")); Assert.IsNotNull(hyperlinks.GetRelationshipByID("rId3")); Assert.IsNull(hyperlinks.GetRelationshipByID("rId6")); Assert.IsNull(comments.GetRelationshipByID("rId1")); Assert.IsNull(comments.GetRelationshipByID("rId2")); Assert.IsNull(comments.GetRelationshipByID("rId3")); Assert.IsNotNull(comments.GetRelationshipByID("rId6")); Assert.IsNotNull(sheet.GetRelationship("rId1")); Assert.IsNotNull(sheet.GetRelationship("rId2")); Assert.IsNotNull(sheet.GetRelationship("rId3")); Assert.IsNotNull(sheet.GetRelationship("rId6")); }
/** * Convert an OPC item name into a zip URI by removing any leading forward * slash if it exist. * * @param opcItemName * The OPC item name to convert. * @return A zip URI without any leading slashes. */ public static Uri GetZipURIFromOPCName(String opcItemName) { if (opcItemName == null) { throw new ArgumentException("opcItemName"); } String retVal = opcItemName; while (retVal.StartsWith(FORWARD_SLASH)) { retVal = retVal.Substring(1); } try { return(PackagingUriHelper.ParseUri(retVal, UriKind.RelativeOrAbsolute)); } catch (UriFormatException) { return(null); } }
private static void Copy(OPCPackage pkg, PackagePart part, OPCPackage tgt, PackagePart part_tgt) { PackageRelationshipCollection relationships = part.Relationships; if (relationships == null) { return; } foreach (PackageRelationship packageRelationship in relationships) { TargetMode?targetMode = packageRelationship.TargetMode; if ((targetMode.GetValueOrDefault() != TargetMode.External ? 0 : (targetMode.HasValue ? 1 : 0)) != 0) { part_tgt.AddExternalRelationship(packageRelationship.TargetUri.ToString(), packageRelationship.RelationshipType, packageRelationship.Id); } else { Uri targetUri = packageRelationship.TargetUri; if (targetUri.Fragment != null) { part_tgt.AddRelationship(targetUri, packageRelationship.TargetMode.Value, packageRelationship.RelationshipType, packageRelationship.Id); } else { PackagePartName partName = PackagingUriHelper.CreatePartName(packageRelationship.TargetUri); PackagePart part1 = pkg.GetPart(partName); part_tgt.AddRelationship(part1.PartName, packageRelationship.TargetMode.Value, packageRelationship.RelationshipType, packageRelationship.Id); if (!tgt.ContainPart(part1.PartName)) { PackagePart part2 = tgt.CreatePart(part1.PartName, part1.ContentType); Stream outputStream = part2.GetOutputStream(); IOUtils.Copy(part1.GetInputStream(), outputStream); outputStream.Close(); PackageHelper.Copy(pkg, part1, tgt, part2); } } } } }
public void TestAddRelationshipRelationshipsPartAssert_Failure() { OPCPackage pkg = OPCPackage.Create("DELETEIFEXISTS.docx"); PackagePartName name1 = null; try { name1 = PackagingUriHelper .CreatePartName("/test/_rels/document.xml.rels"); } catch (InvalidFormatException e) { Assert.Fail("This exception should never happen !"); } try { pkg.AddRelationship(name1, TargetMode.Internal, PackageRelationshipTypes.CORE_DOCUMENT); } catch (InvalidOperationException e) { return; } Assert.Fail("Assert.Fail test -> M1.25: The Relationships part shall not have relationships to any other part"); }
/** * Parse the content types part. * * @throws InvalidFormatException * Throws if the content type doesn't exist or the XML format is * invalid. */ private void ParseContentTypesFile(Stream in1) { try { //in1.Position = 0; XPathDocument xpathdoc = DocumentHelper.ReadDocument(in1); XPathNavigator xpathnav = xpathdoc.CreateNavigator(); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xpathnav.NameTable); nsMgr.AddNamespace("x", TYPES_NAMESPACE_URI); XPathNodeIterator iterator = xpathnav.Select("//x:" + DEFAULT_TAG_NAME, nsMgr); while (iterator.MoveNext()) { // Default content types //iterator.Current; String extension = iterator.Current.GetAttribute(EXTENSION_ATTRIBUTE_NAME, xpathnav.NamespaceURI); String contentType = iterator.Current.GetAttribute(CONTENT_TYPE_ATTRIBUTE_NAME, xpathnav.NamespaceURI); AddDefaultContentType(extension, contentType); } iterator = xpathnav.Select("//x:" + OVERRIDE_TAG_NAME, nsMgr); while (iterator.MoveNext()) { // Overriden content types //iterator.Current.MoveToNext(); Uri uri = PackagingUriHelper.ParseUri(iterator.Current.GetAttribute(PART_NAME_ATTRIBUTE_NAME, xpathnav.NamespaceURI), UriKind.RelativeOrAbsolute); PackagePartName partName = PackagingUriHelper .CreatePartName(uri); String contentType = iterator.Current.GetAttribute(CONTENT_TYPE_ATTRIBUTE_NAME, xpathnav.NamespaceURI); AddOverrideContentType(partName, contentType); } } catch (UriFormatException urie) { throw new InvalidFormatException(urie.Message); } }
public void TestOnlyOneCorePropertiesPart_AddPart() { String sampleFileName = "OPCCompliance_CoreProperties_OnlyOneCorePropertiesPart.docx"; OPCPackage pkg = null; pkg = OPCPackage.Open(POIDataSamples.GetOpenXML4JInstance().GetFile(sampleFileName)); Uri partUri = CreateURI("/docProps/core2.xml"); try { pkg.CreatePart(PackagingUriHelper.CreatePartName(partUri), ContentTypes.CORE_PROPERTIES_PART); // no longer fail on compliance error //fail("expected OPC compliance exception was not thrown"); } catch (InvalidOperationException e) { // expected during successful test Assert.AreEqual("OPC Compliance error [M4.1]: you try to add more than one core properties relationship in the package !", e.Message); } pkg.Revert(); }