/// <summary>
        /// Create builder for template
        /// </summary>
        /// <param name="docxDocument">Template document</param>
        /// <param name="tagVisibilityOptions">List of tags for show and hide</param>
        public DocxDocumentBuilder(DocxDocument docxDocument, TagVisibilityOptions tagVisibilityOptions = null)
            : base(docxDocument.GetWordDocument())
        {
            this.docxDocument = docxDocument;
            this.tagVisibilityOptions = tagVisibilityOptions;

            MergeVanishedRuns();
        }
        public void PlaceholderGettingWhichNotExistsReturnsEmpty()
        {
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var placeholders = DocumentPlaceholder.Get(document.GetWordDocument(), "NON_EXISTING");

                Assert.Empty(placeholders);
            }
        }
        public void TagGettingWhichNotExistsReturnsEmpty()
        {
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var tags = DocumentTag.Get(document.GetWordDocument(), "NON_EXISTING");

                Assert.Empty(tags);
            }
        }
        public void ManyPlaceholdersGettingFromDocumentCorrect()
        {
            using (var document = new DocxDocument(Resources.WithManyPlaceholders))
            {
                var placeholders = DocumentPlaceholder.Get(document.GetWordDocument(), "INNER");

                Assert.NotNull(placeholders);
                Assert.Equal(3, placeholders.Count());
            }
        }
        public void ManyTagsGettingFromDocumentCorrect()
        {
            using (var document = new DocxDocument(Resources.WithManyTags))
            {
                var tags = DocumentTag.Get(document.GetWordDocument(), "SUB");

                Assert.NotNull(tags);
                Assert.Equal(3, tags.Count());
            }
        }
        public void AppendParagraphAddsNewParagraphToTheEndOfDocument()
        {
            using (var expected = new DocxDocument(Resources.DocumentWithAddedParagraph))
            using (var document = new DocxDocument(Resources.DocumentWithoutParagraph))
            {
                document.AppendParagraph("New paragraph content");

                Assert.Equal(GetParagraphs(expected).Count(), GetParagraphs(document).Count());
                Assert.Equal(GetParagraphs(expected).Last().InnerText, GetParagraphs(document).Last().InnerText);
            }
        }
        public void CanSetContentToInlineFieldConsistingOfTwoRuns()
        {
            using (var expected = new DocxDocument(Resources.WithTwoRunsInInlineField))
            using (var document = new DocxDocument(Resources.WithSdtElements))
            {
                var builder = new DocxDocumentBuilder(document);

                builder.InlineField("InlineField", x => x.Text("Первый").Text("Второй"));

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void PropertiesAppliedToBlockFieldShouldPersistAfterSettingContent()
        {
            using (var expected = new DocxDocument(Resources.WithStyledSdtElementsContentInserted))
            using (var document = new DocxDocument(Resources.WithStyledSdtElements))
            {
                var builder = new DocxDocumentBuilder(document);

                builder.BlockField("BlockField", x => x.Paragraph("Первый").Paragraph("Второй"));

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void PropertiesAppliedToInlineFieldInHeadersAndFooters()
        {
            using (var expected = new DocxDocument(Resources.FieldsInHeadersAndFootersReplaced))
            using (var document = new DocxDocument(Resources.FieldsInHeadersAndFooters))
            {
                var builder = new DocxDocumentBuilder(document);

                builder.InlineField("Signer.ShortNameThisOrSubstitute", x => x.Text("Первый").Text("Второй"));

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void PropertiesAppliedToInlineFieldShouldPersistAfterSettingContent()
        {
            using (var expected = new DocxDocument(Resources.WithStyledInlineSdtElementContentInserted))
            using (var document = new DocxDocument(Resources.WithStyledInlineSdtElement))
            {
                var builder = new DocxDocumentBuilder(document);

                builder.InlineField("InlineField", x => x.Text("Первый").Text("Второй"));

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void CanSetContentToBlockFieldConsistingOfTwoParagraphs()
        {
            using (var expected = new DocxDocument(Resources.WithTwoParagraphsInBlockField))
            using (var document = new DocxDocument(Resources.WithSdtElements))
            {
                var builder = new DocxDocumentBuilder(document);

                builder.BlockField("BlockField", x => x.Paragraph("Первый").Paragraph("Второй"));

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public byte[] GenerateCardReports(List<Card> cards, List<List> lists)
        {
            using (var docxDocument = new DocxDocument(SimpleTemplate.EmptyWordFile))
            {
                var builder = new DocxDocumentBuilder(docxDocument);
                builder.Tag(SimpleTemplate.HeaderTagName,
                            x => x.Paragraph(z => z.Bold.Text("X. etap - 2012.03.18 - 29 - várható fejlesztések")));

                builder.Tag(SimpleTemplate.ContentTagName,
                            x => FoxbyWordServiceHelper.AddHeadline(x, 12).AddReports(cards, lists));

                return docxDocument.ToArray();
            }
        }
        public void AppendHiddenParagraph()
        {
            using (var expected = new DocxDocument(Resources.DocumentWithAddedParagraph))
            using (var document = new DocxDocument(Resources.DocumentWithoutParagraph))
            {
                var paragraphsCount = GetParagraphs(document).Count;

                document.AppendParagraph("New paragraph content", false);

                var paragraphs = GetParagraphs(document);
                Assert.Equal(paragraphsCount + 1, paragraphs.Count);
                Assert.Equal(GetParagraphs(expected).Last().InnerXml, paragraphs.Last().InnerXml);
            }
        }
        public void CanInsertActionToCells()
        {
            using (var expected = new DocxDocument(Resources.WithCellWithPlaceholder))
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var builder = CreateBuilder(document);

                builder.Tag("MAIN_CONTENT", x => x.Table(y => y.Column("Наименование")
                                                              	.Column("Адрес"),
                                                         y => y.Row(z => z.Left.Cell(c => c.Placeholder("somePlaceholder", "hello world!")))
                                                 	));
                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void CanInsertJpegImageIntoParagraph()
        {
            using (var expected = new DocxDocument(Resources.WithMainContentTag))
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var builder = DocxDocumentBuilder.Create(document);

                var content = File.ReadAllBytes("Resources/Images/apple.jpg");
                builder
                    .Tag("MAIN_CONTENT",
                         x => x.Paragraph(z => z.Image(content, "image/jpeg")));

                SaveDocxFile(document, "WithImageInserted");
            }
        }
        public void AppendReplacementOpenCloseTagAddsTagsForReplacementsToTheEndOfTheDocument()
        {
            using (var document = new DocxDocument(Resources.DocumentWithoutParagraph))
            {
                var initialCount = GetParagraphs(document).Count;

                document.AppendTag("Test");

                var paragraphs = GetParagraphs(document);

                Assert.Equal("{/Test}", paragraphs.Last().InnerText);
                Assert.Equal("{Test}", paragraphs.Skip(paragraphs.Count - 2).First().InnerText);
                Assert.Equal(initialCount + 2, paragraphs.Count);
            }
        }
        public void AppendHiddenSingleReplacementTagAddsTagForReplacementToTheEndOfTheDocument()
        {
            using (var document = new DocxDocument(Resources.DocumentWithoutParagraph))
            {
                var initialCount = GetParagraphs(document).Count;

                document.AppendSelfclosingTag("Test", false);

                var paragraphs = GetParagraphs(document);

                var insertedParagraph = paragraphs.Last();
                Assert.Equal("{{Test}}", insertedParagraph.InnerText);
                Assert.NotEmpty(insertedParagraph.ParagraphProperties);
                Assert.Equal(initialCount + 1, paragraphs.Count);
            }
        }
        public void CallToNonExistingPlaceholderDoesNotChangeDocument()
        {
            using (var expected = new DocxDocument(Resources.WithTitlePlaceholder))
            using (var document = new DocxDocument(Resources.WithTitlePlaceholder))
            {
                var builder = CreateBuilder(document);

                builder
                    .Placeholder("NON_EXISTING", x => x.EditableStart()
                                                      	.Text("Тест")
                                                      	.Placeholder("NEW")
                                                      	.Text("Тест")
                                                      	.EditableEnd());

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void CallToNonExistingTagDoesNotChangeDocument()
        {
            using (var expected = new DocxDocument(Resources.WithMainContentTag))
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var builder = CreateBuilder(document);

                builder
                    .Tag("NON_EXISTING", x => x.Paragraph("Тест")
                                              	.AppendTag("NEW", z => { })
                                              	.OrderedList(z => z.Item("Элемент 1").Item("Элемент 2"))
                                              	.EditableStart()
                                              	.Table(z => z.Column("Колонки"), z => z.Row("Строка"))
                                              	.Paragraph(z => z.Placeholder("TEST"))
                                              	.EditableEnd());

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
        public void CanAccessNewlyCreatedTagViaTagAndChangeItsContent()
        {
            using (var expected = new DocxDocument(Resources.WithMainContentAndNewTag))
            using (var document = new DocxDocument(Resources.WithMainContentTag))
            {
                var builder = CreateBuilder(document);

                builder
                    .Tag("MAIN_CONTENT",
                         x => x.AppendTag("NEW_TAG", z => { })
                              	.EditableStart()
                              	.Indent.Paragraph("Тестовый 1")
                              	.EditableEnd())
                    .Tag("NEW_TAG",
                         x => x.EditableStart()
                              	.Indent.Paragraph("Тестовый в новом теге 1")
                              	.Indent.Paragraph("Тестовый в новом теге 2 строка 1", "Тестовый в новом теге 2 строка 2")
                              	.EditableEnd());

                Assert.Equal(expected, document, new DocxDocumentEqualityComparer());
            }
        }
 public OpenCloseTagReplacer(string name, DocxDocument document)
     : base(name, document)
 {
 }
        public void SetCustomPropertyToDocumentIfItAlreadyHasProperties()
        {
            using (var withTwoAttributes = new DocxDocument(Resources.DocumentWithTwoAttributes))
            using (var withAttribute = new DocxDocument(Resources.DocumentWithAttribute))
            {
                withAttribute.SetCustomProperty("customAttributes2", "Working2");

                DocumentFormat.OpenXml.CustomProperties.Properties propertiesWithTwoAttributes = withTwoAttributes.GetWordDocument().CustomFilePropertiesPart.Properties;
                DocumentFormat.OpenXml.CustomProperties.Properties propertiesWithAttribute = withAttribute.GetWordDocument().CustomFilePropertiesPart.Properties;

                Assert.Equal(propertiesWithTwoAttributes.First(x => x.LocalName == "property").OuterXml,
                             propertiesWithAttribute.First(x => x.LocalName == "property").OuterXml);
                Assert.Equal(propertiesWithTwoAttributes.Last(x => x.LocalName == "property").OuterXml,
                             propertiesWithAttribute.Last(x => x.LocalName == "property").OuterXml);
            }
        }
 private static void SaveDocxFile(DocxDocument document, string fileName)
 {
     File.WriteAllBytes(string.Format(@"D:\{0}.docx", fileName), document.ToArray());
 }
 public void TestCleanContent()
 {
     using (var withParagraph = new DocxDocument(Resources.DocumentWithParagraph))
     using (var withOutParagraph = new DocxDocument(Resources.DocumentWithoutParagraph))
     {
         withParagraph.CleanContent("Edit");
         Assert.Equal(withOutParagraph, withParagraph, new DocxDocumentEqualityComparer());
     }
 }
 public SingleTagReplacer(string name, DocxDocument document)
     : base(name, document)
 {
 }
Example #26
0
 protected TagReplacer(string name, DocxDocument document)
 {
     Document = document;
     Name = name;
 }
 public void UnprotectRemovesWrightProtectionFromFile()
 {
     using (var @protected = new DocxDocument(Resources.Protected))
     using (var @unprotected = new DocxDocument(Resources.Unprotected))
     {
         @protected.Unprotect();
         Assert.Equal(@unprotected.GetWordDocument().MainDocumentPart.DocumentSettingsPart.Settings.OuterXml, @protected.GetWordDocument().MainDocumentPart.DocumentSettingsPart.Settings.OuterXml, StringComparer.InvariantCultureIgnoreCase);
     }
 }
 public void VisibilityContentInTag()
 {
     using (var initialDocument = new DocxDocument(Resources.DocumentWithHideContentInTag))
     using (var expectedDocument = new DocxDocument(Resources.DocumentWithVisibilityContentInTag))
     {
         initialDocument.SetTagVisibility("Tag", true);
         Assert.Equal(expectedDocument, initialDocument, new DocxDocumentEqualityComparer());
     }
 }
 private static ICollection<Paragraph> GetParagraphs(DocxDocument document)
 {
     return document.GetWordDocument().MainDocumentPart.Document.Descendants().OfType<Paragraph>().ToArray();
 }
        public void AppendSingleReplacementTagAddsTagForReplacementToTheEndOfTheDocument()
        {
            using (var document = new DocxDocument(Resources.DocumentWithoutParagraph))
            {
                var initialCount = GetParagraphs(document).Count;

                document.AppendSelfclosingTag("Test");

                var paragraphs = GetParagraphs(document);

                Assert.Equal("{{Test}}", paragraphs.Last().InnerText);
                Assert.Equal(initialCount + 1, paragraphs.Count);
            }
        }