Esempio n. 1
0
        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")));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /**
         *  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);
        }
Esempio n. 4
0
 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);
     }
 }
Esempio n. 5
0
        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());
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
     }
 }
Esempio n. 12
0
        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);
        }
Esempio n. 13
0
        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();
        }
Esempio n. 14
0
        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();
        }
Esempio n. 15
0
        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);
            }
        }
Esempio n. 16
0
        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");
        }
Esempio n. 17
0
        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]");
        }
Esempio n. 20
0
        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);
            }
        }
Esempio n. 21
0
        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);
         }
     }
 }
Esempio n. 23
0
        /**
         * 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);
                    }
                }
            }
        }
Esempio n. 24
0
        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();
        }
Esempio n. 25
0
        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"));
        }
Esempio n. 26
0
        /**
         * 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);
            }
        }
Esempio n. 27
0
        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");
        }
Esempio n. 29
0
        /**
         * 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);
            }
        }
Esempio n. 30
0
        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();
        }