public void CanRoundTripWordprocessingDocumentWithAltChunks()
        {
            using (MemoryStream stream = CreateWordprocessingDocumentWithAltChunks())
                using (WordprocessingDocument original = WordprocessingDocument.Open(stream, false))
                {
                    XDocument flatOpcDocument = original.ToFlatOpcDocument();

                    using (WordprocessingDocument roundTripped = WordprocessingDocument.FromFlatOpcDocument(flatOpcDocument))
                    {
                        List <AlternativeFormatImportPart> altChunkParts = roundTripped.MainDocumentPart
                                                                           .GetPartsOfType <AlternativeFormatImportPart>()
                                                                           .ToList();

                        AssertXmlContentEquals(
                            altChunkParts.First(p => p.ContentType == XhtmlContentType),
                            XhtmlString);

                        AssertXmlContentEquals(
                            altChunkParts.First(p => p.ContentType == XmlContentType),
                            XmlString);

                        AssertBinaryContentEquals(
                            altChunkParts.First(p => p.ContentType == WordprocessingMLContentType),
                            WordprocessingMLBytes);
                    }
                }
        }
Esempio n. 2
0
        public void Fill(string name)
        {
            var value = name is null ? null : "TestBarCodeData012938";

            var document  = new ImageTestDocument(name, value);
            var xDocument = XDocument.Parse(Resources.ImageTestDocument);

            using (var package = WordprocessingDocument.FromFlatOpcDocument(xDocument))
            {
                var body = package.MainDocumentPart.Document.Body;

                try
                {
                    document.Fill(package.MainDocumentPart);

                    if (name == "Image")
                    {
                        var blip = body.Descendants <SdtAlias>()
                                   .FirstOrDefault(aliase => aliase.Val == name)?.Parent?.Parent
                                   .Descendants <Blip>()
                                   .SingleOrDefault();

                        Assert.That(blip, Is.Not.Null.And.InstanceOf <Blip>() | Is.Null,
                                    $"У каждого {nameof(SdtElement)} c {nameof(SdtAlias)}.{nameof(SdtAlias.Val)}={name} " +
                                    $"должен быть один вложенный элемент {nameof(Blip)}.");
                        Assert.That(
                            () => package.MainDocumentPart.GetPartById(blip.Embed),
                            Is.Not.Null.And.InstanceOf <ImagePart>() | Is.Null,
                            $"В тестовом документе должен быть объявлен элемент ImagePart с Relationship Id={blip.Embed}");

                        var imagePart = package.MainDocumentPart.GetPartById(blip.Embed);
                        Assert.NotNull(imagePart);
                        Assert.AreEqual(
                            "image/png", imagePart.ContentType, $"В тестовом документе должен быть объявлен элемент ImagePart с ContentType=image/png");

                        using (var sourceStreamReader = new StreamReader(new MemoryStream(Convert.FromBase64String(Resources.TestImageData))))
                        {
                            using (var destinationStreamReader = new StreamReader(imagePart.GetStream()))
                            {
                                Assert.That(
                                    () => destinationStreamReader.ReadToEnd(),
                                    Is.EqualTo(sourceStreamReader.ReadToEnd()),
                                    "Исходное изображение не соответствует полученному из документа.");
                            }
                        }
                    }
                }
                catch (Exception e) when(e is ArgumentNullException || e is InvalidSdtElementException)
                {
                    Assert.Pass();
                }
            }
        }
Esempio n. 3
0
        public void CanCreateFlatOpcWordprocessingDocuments1()
        {
            using (var inputStream = GetStream(TestFiles.Document))
                using (var source = WordprocessingDocument.Open(inputStream, false))
                {
                    var flatOpcDoc = source.ToFlatOpcDocument();

                    using (var dest = WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc))
                    {
                        PackageAssert.Equal(source, dest);
                    }
                }
        }
        public void CanCreateFlatOpcWordprocessingDocuments()
        {
            using (var source = WordprocessingDocument.Open(Path.Combine(TestUtil.TestResultsDirectory, DocumentPath), true))
            {
                // Test FlatOpcDocument methods.
                // Check ToFlatOpcDocument() and FromFlatOpcDocument(XDocument).
                var flatOpcDoc = source.ToFlatOpcDocument();
                using (var dest = WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc))
                    AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcDocument(XDocument, Stream, bool).
                using (Stream stream = new MemoryStream())
                    using (WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc, stream, false))
                        using (var dest = WordprocessingDocument.Open(stream, false))
                            AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcDocument(XDocument, string, bool).
                using (WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc, Path.Combine(TestUtil.TestResultsDirectory, DocumentClonePath), false))
                    using (var dest = WordprocessingDocument.Open(Path.Combine(TestUtil.TestResultsDirectory, DocumentClonePath), false))
                        AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcDocument(XDocument, Package).
                using (var stream = new MemoryStream())
                    using (var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
                        using (var dest = WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc, package))
                            AssertThatPackagesAreEqual(source, dest);

                // Test FlatOpcString methods.
                // Check ToFlatOpcString() and FromFlatOpcString(string).
                var flatOpcString = source.ToFlatOpcString();
                using (var dest = WordprocessingDocument.FromFlatOpcString(flatOpcString))
                    AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcString(string, Stream, bool).
                using (Stream stream = new MemoryStream())
                    using (WordprocessingDocument.FromFlatOpcString(flatOpcString, stream, false))
                        using (var dest = WordprocessingDocument.Open(stream, false))
                            AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcString(string, string, bool).
                using (WordprocessingDocument.FromFlatOpcString(flatOpcString, Path.Combine(TestUtil.TestResultsDirectory, DocumentClonePath), false))
                    using (var dest = WordprocessingDocument.Open(Path.Combine(TestUtil.TestResultsDirectory, DocumentClonePath), false))
                        AssertThatPackagesAreEqual(source, dest);

                // Check FromFlatOpcString(string, Package).
                using (var stream = new MemoryStream())
                    using (var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
                        using (var dest = WordprocessingDocument.FromFlatOpcString(flatOpcString, package))
                            AssertThatPackagesAreEqual(source, dest);
            }
        }
Esempio n. 5
0
        public void CanCreateFlatOpcWordprocessingDocuments4()
        {
            using (var inputStream = GetStream(TestFiles.Document))
                using (var source = WordprocessingDocument.Open(inputStream, false))
                {
                    var flatOpcDoc = source.ToFlatOpcDocument();

                    using (var stream = new MemoryStream())
                        using (var package = Package.Open(stream, FileMode.Create, FileAccess.ReadWrite))
                            using (var dest = WordprocessingDocument.FromFlatOpcDocument(flatOpcDoc, package))
                            {
                                PackageAssert.Equal(source, dest);
                            }
                }
        }
        /// <summary>
        /// Creates a new instance of DocumentType from a Flat OPC <see cref="XDocument" />.
        /// </summary>
        /// <param name="document">The Flat OPC <see cref="XDocument" />.</param>
        /// <typeparam name="TDocument">A subclass of <see cref="OpenXmlPackage" />.</typeparam>
        /// <returns>A new instance of DocumentType</returns>
        public static TDocument FromFlatOpcDocument <TDocument>(XDocument document)
            where TDocument : OpenXmlPackage
        {
            var t = typeof(TDocument);

            if (t == typeof(WordprocessingDocument))
            {
                return(WordprocessingDocument.FromFlatOpcDocument(document) as TDocument);
            }
            if (t == typeof(SpreadsheetDocument))
            {
                return(SpreadsheetDocument.FromFlatOpcDocument(document) as TDocument);
            }
            if (t == typeof(PresentationDocument))
            {
                return(PresentationDocument.FromFlatOpcDocument(document) as TDocument);
            }
            throw new OpenXmlTransformationException("Unsupported document type: " + t);
        }
Esempio n. 7
0
        public void Fill(string name, int id, string firstName, bool gender)
        {
            var row = new TestTableRow(name, id, firstName, gender);

            var document = new TableTestDocument(name, new List <object>()
            {
                row
            });

            var xDocument = XDocument.Parse(Resources.TableTestDocument);

            using (var wordPackage = WordprocessingDocument.FromFlatOpcDocument(xDocument))
            {
                var body = wordPackage.MainDocumentPart.Document.Body;

                Assert.That(() =>
                {
                    document.Fill(wordPackage.MainDocumentPart);
                }, Throws.Nothing | Throws.InstanceOf <ArgumentNullException>());
            }
        }
Esempio n. 8
0
        public string FillBookmark(string name, string value)
        {
            var    document  = new BookmarkTestDocument(name, value);
            var    xDocument = XDocument.Parse(Resources.BookmarkTestDocument);
            string actual    = null;

            using (var wordPackage = WordprocessingDocument.FromFlatOpcDocument(xDocument))
            {
                var body = wordPackage.MainDocumentPart.Document.Body;
                Assert.That(() =>
                {
                    document.Fill(wordPackage.MainDocumentPart);
                    actual = body.Descendants <BookmarkStart>().SingleOrDefault(bookmark => bookmark.Name == name)
                             ?.NextSibling()
                             ?.Descendants <Text>()
                             ?.SingleOrDefault()
                             ?.Text;
                }, Throws.Nothing | Throws.InstanceOf <ArgumentNullException>() | Throws.InstanceOf <InvalidSdtElementException>());

                return(actual);
            }
        }
Esempio n. 9
0
        public string Fill(string name, string value)
        {
            var    document  = new FormatTextTestDocument(name, value);
            var    xDocument = XDocument.Parse(Resources.RichTextTestDocument);
            string actual    = null;

            using (var wordPackage = WordprocessingDocument.FromFlatOpcDocument(xDocument))
            {
                var body = wordPackage.MainDocumentPart.Document.Body;
                Assert.That(() =>
                {
                    document.Fill(wordPackage.MainDocumentPart);
                    actual = body.Descendants <SdtElement>()
                             .Where(element => element.SdtProperties.GetFirstChild <SdtAlias>()?.Val == name)
                             .SingleOrDefault()
                             ?.Descendants <Text>()
                             ?.First()
                             ?.Text;
                }, Throws.Nothing | Throws.InstanceOf <ArgumentNullException>() | Throws.InstanceOf <InvalidSdtElementException>());

                return(actual);
            }
        }
Esempio n. 10
0
        public string Fill(string name, DateTime value)
        {
            var    document  = new DateTestDocument(name, value);
            var    xDocument = XDocument.Parse(Resources.DateTestDocument);
            string actual    = null;

            using (var wordPackage = WordprocessingDocument.FromFlatOpcDocument(xDocument))
            {
                var body = wordPackage.MainDocumentPart.Document.Body;
                Assert.That(() =>
                {
                    document.Fill(wordPackage.MainDocumentPart);
                    actual = body.Descendants <SdtElement>()
                             .Single(block => block.Descendants <SdtAlias>()
                                     .First().Val == name)
                             .Descendants <Text>()
                             .First()
                             .Text;
                }, Throws.Nothing | Throws.InstanceOf <ArgumentNullException>() | Throws.InstanceOf <InvalidSdtElementException>());

                return(actual);
            }
        }