public MemoryStream ReplaceTexts() { if (_rep.TextPlaceholders == null || _rep.TextPlaceholders.Count == 0) { return(null); } using (var doc = WordprocessingDocument.Open(_docxMs, true)) { CleanMarkup(doc); // Search in body, headers and footers var documentTexts = doc.MainDocumentPart.Document.Descendants <Text>(); var headerTexts = doc.MainDocumentPart.HeaderParts.SelectMany(h => h.Header.Descendants <Text>()); var footerTexts = doc.MainDocumentPart.FooterParts.SelectMany(f => f.Footer.Descendants <Text>()); foreach (var text in documentTexts.Concat(headerTexts).Concat(footerTexts)) // <<< Here { foreach (var replace in _rep.TextPlaceholders) { if (text.Text.Contains(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag)) { if (!string.IsNullOrEmpty(replace.Value) && replace.Value.Contains(_rep.NewLineTag))//If we have line breaks present { string[] repArray = replace.Value.Split(new string[] { _rep.NewLineTag }, StringSplitOptions.None); var lastInsertedText = text; Break lastInsertedBreak; for (var i = 0; i < repArray.Length; i++) { if (i == 0)//The text is only replaced with the first part of the replacement array { text.Text = text.Text.Replace(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag, repArray[i]); } else { var tmpText = new Text(repArray[i]); var tmpBreak = new Break(); text.Parent.InsertAfter(tmpBreak, lastInsertedText); lastInsertedBreak = tmpBreak; text.Parent.InsertAfter(tmpText, lastInsertedBreak); lastInsertedText = tmpText; } } } else { text.Text = text.Text.Replace(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag, replace.Value ?? string.Empty); } } } } } _docxMs.Position = 0; return(_docxMs); }
public MemoryStream ReplaceTexts() { if (_rep.TextPlaceholders.Count == 0 || _rep.TextPlaceholders == null) { return(null); } using (WordprocessingDocument doc = WordprocessingDocument.Open(_docxMs, true)) { CleanMarkup(doc); var document = doc.MainDocumentPart.Document; foreach (var text in document.Descendants <Text>()) // <<< Here { foreach (var replace in _rep.TextPlaceholders) { if (text.Text.Contains(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag)) { if (replace.Value.Contains(_rep.NewLineTag))//If we have line breaks present { string[] repArray = replace.Value.Split(new string[] { _rep.NewLineTag }, StringSplitOptions.None); var lastInsertedText = text; var lastInsertedBreak = new Break(); for (var i = 0; i < repArray.Length; i++) { if (i == 0)//The text is only replaced with the first part of the replacement array { text.Text = text.Text.Replace(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag, repArray[i]); } else { var tmpText = new Text(repArray[i]); var tmpBreak = new Break(); text.Parent.InsertAfter(tmpBreak, lastInsertedText); lastInsertedBreak = tmpBreak; text.Parent.InsertAfter(tmpText, lastInsertedBreak); lastInsertedText = tmpText; } } } else { text.Text = text.Text.Replace(_rep.TextPlaceholderStartTag + replace.Key + _rep.TextPlaceholderEndTag, replace.Value); } } } } } _docxMs.Position = 0; return(_docxMs); }
private static IEnumerable <LineElement> CreateParagraphElements( this Word.Run run, IImageAccessor imageAccessor, IStyleFactory styleAccessor) { var textStyle = styleAccessor.EffectiveTextStyle(run.RunProperties); var elements = run .ChildElements .Where(c => c is Word.Text || c is Word.TabChar || c is Word.Drawing || c is Word.Break || c is Word.CarriageReturn) .SelectMany(c => { return(c switch { Word.Text t => t.SplitTextToElements(textStyle), Word.TabChar t => new LineElement[] { new TabElement(textStyle) }, Word.Drawing d => d.CreateInlineDrawing(imageAccessor), Word.CarriageReturn _ => new LineElement[] { new NewLineElement(textStyle) }, Word.Break b => b.CreateBreakElement(textStyle), _ => throw new RendererException("unprocessed child") }); })
public static void Insert(string fullPathToDocument, string fullPathToImageFile) { List <KeyValuePair <string, string> > keyValuePairs = new List <KeyValuePair <string, string> >(); keyValuePairs.Add(new KeyValuePair <string, string>("Deponi", "Picture 1")); keyValuePairs.Add(new KeyValuePair <string, string>("Deponi", "Picture 2")); keyValuePairs.Add(new KeyValuePair <string, string>("Deponi", "Picture 3")); keyValuePairs.Add(new KeyValuePair <string, string>("Have", "Picture 4")); keyValuePairs.Add(new KeyValuePair <string, string>("Metal", "Picture 5")); keyValuePairs.Add(new KeyValuePair <string, string>("Metal", "Picture 6")); using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(fullPathToDocument, true)) { string currentHeader = ""; foreach (var keyValuePair in keyValuePairs) { if (currentHeader != keyValuePair.Key) { if (!string.IsNullOrEmpty(currentHeader)) { // insert pakebreak Body body = wordDoc.MainDocumentPart.Document.Body; Paragraph para = body.AppendChild(new Paragraph()); Run run = para.AppendChild(new Run()); Break pageBreak = run.AppendChild(new Break()); pageBreak.Type = BreakValues.Page; } InsertHeader(keyValuePair.Key, wordDoc, currentHeader); currentHeader = keyValuePair.Key; } InsertPicture(keyValuePair.Value, wordDoc); } } }
public static OpenXmlElement GenerateBreak(Break _break) { var b = new W.Break(); if (_break.Type.HasValue) { switch (_break.Type.Value) { case BreakType.Column: b.Type = W.BreakValues.Column; break; case BreakType.Page: b.Type = W.BreakValues.Page; break; case BreakType.TextWrapping: b.Type = W.BreakValues.TextWrapping; break; } } return(new W.Run(b)); }
public MemoryStream ReplaceTableRows() { if (_rep.TablePlaceholders.Count == 0 || _rep.TablePlaceholders == null) { return(null); } using (WordprocessingDocument doc = WordprocessingDocument.Open(_docxMs, true)) { CleanMarkup(doc); var document = doc.MainDocumentPart.Document; foreach (var trDict in _rep.TablePlaceholders) //Take a Row (one Dictionary) at a time { var trCol0 = trDict.First(); // Find the first text element matching the search string // where the text is inside a table cell --> this is the row we are searching for. var textElement = document.Body.Descendants <Text>() .FirstOrDefault(t => t.Text == _rep.TablePlaceholderStartTag + trCol0.Key + _rep.TablePlaceholderEndTag && t.Ancestors <DocumentFormat.OpenXml.Wordprocessing.TableCell>().Any()); if (textElement != null) { var newTableRows = new List <TableRow>(); var tableRow = textElement.Ancestors <TableRow>().First(); for (var j = 0; j < trCol0.Value.Length; j++) //Lets create row by row and replace placeholders { newTableRows.Add((TableRow)tableRow.CloneNode(true)); var tableRowCopy = newTableRows[newTableRows.Count - 1]; foreach (var text in tableRow.Descendants <Text>() ) //Cycle through the cells of the row to replace from the Dictionary value ( string array) { for (var index = 0; index < trDict.Count; index++) //Now cycle through the "columns" (keys) of the Dictionary and replace item by item { var item = trDict.ElementAt(index); if (text.Text.Contains(_rep.TablePlaceholderStartTag + item.Key + _rep.TablePlaceholderEndTag)) { if (item.Value[j].Contains(_rep.NewLineTag)) //If we have line breaks present { string[] repArray = item.Value[j].Split(new string[] { _rep.NewLineTag }, StringSplitOptions.None); var lastInsertedText = text; var lastInsertedBreak = new Break(); for (var i = 0; i < repArray.Length; i++) { if (i == 0 ) //The text is only replaced with the first part of the replacement array { text.Text = text.Text.Replace( _rep.TablePlaceholderStartTag + item.Key + _rep.TablePlaceholderEndTag, repArray[i]); } else { var tmpText = new Text(repArray[i]); var tmpBreak = new Break(); text.Parent.InsertAfter(tmpBreak, lastInsertedText); lastInsertedBreak = tmpBreak; text.Parent.InsertAfter(tmpText, lastInsertedBreak); lastInsertedText = tmpText; } } } else { text.Text = text.Text.Replace( _rep.TablePlaceholderStartTag + item.Key + _rep.TablePlaceholderEndTag, item.Value[j]); } break; } } } if (j < trCol0.Value.Length - 1) { tableRow.Parent.InsertAfter(tableRowCopy, tableRow); tableRow = tableRowCopy; } } } } } _docxMs.Position = 0; return(_docxMs); }
public void ReplaceString(OpenXmlElement element, string val) { var text = element.Descendants <Word.Text>().FirstOrDefault(); var run = text == null?element.Descendants <Word.Run>().FirstOrDefault() : FindParent <Word.Run>(text); var runp = run.Parent; var paragraph = FindParent <Word.Paragraph>(runp); run.RsidRunProperties = null; run.RemoveAllChildren <Word.Text>(); run.RemoveAllChildren <Word.RunProperties>(); runp.RemoveAllChildren <Word.Run>(); runp.RemoveAllChildren <Word.Break>(); if (paragraph.ParagraphProperties?.ParagraphMarkRunProperties != null) { run.RunProperties = new Word.RunProperties(); foreach (var item in paragraph.ParagraphProperties.ParagraphMarkRunProperties) { run.RunProperties.AppendChild(item.CloneNode(true)); } } if (text == null) { text = new Word.Text(); } else if (text.Parent != null) { text.Remove(); } string[] pagesplit = val.TrimEnd("\r\n".ToCharArray()).Split("\f".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); for (int p = 0; p < pagesplit.Length; p++) { var lineSpit = pagesplit[p].Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); if (lineSpit.Length > 0) { for (int i = 0; i < lineSpit.Length; i++) { if (p == 0 && i == 0) { text.Text = lineSpit[0]; text.Space = SpaceProcessingModeValues.Preserve; run.Append(text); runp.Append(run); continue; } Word.Run r = run.Clone() as Word.Run; r.RemoveAllChildren <Word.Text>(); r.Append(new Word.Text(lineSpit[i]) { Space = SpaceProcessingModeValues.Preserve }); Word.Paragraph pr = (Word.Paragraph)paragraph.Clone(); pr.RemoveAllChildren <Word.Run>(); pr.RemoveAllChildren <Word.Break>(); pr.RemoveAllChildren <Word.SdtBlock>(); pr.RemoveAllChildren <Word.SdtRun>(); pr.Append(r); paragraph.Parent.InsertAfter <Word.Paragraph>(pr, paragraph); paragraph = pr; } } if (p < pagesplit.Length - 1) { var bp = new Word.Break() { Type = Word.BreakValues.Page }; paragraph.AppendChild(bp); } } }
public Wordprocessing.Body insertinform() { Wordprocessing.Body body = new Wordprocessing.Body(); //Параграф1 Wordprocessing.Paragraph paragraph1 = new Wordprocessing.Paragraph(); Wordprocessing.ParagraphProperties paragraphProperties1 = new Wordprocessing.ParagraphProperties(); Wordprocessing.SpacingBetweenLines spacingBetweenLines1 = new Wordprocessing.SpacingBetweenLines() { After = "0" }; Wordprocessing.Justification justification1 = new Wordprocessing.Justification() { Val = Wordprocessing.JustificationValues.Center }; paragraphProperties1.Append(spacingBetweenLines1); paragraphProperties1.Append(justification1); Wordprocessing.Run run1 = new Wordprocessing.Run(); Wordprocessing.RunProperties runProperties1 = new Wordprocessing.RunProperties(); Wordprocessing.RunFonts runFonts2 = new Wordprocessing.RunFonts() { Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" }; Wordprocessing.Bold bold2 = new Wordprocessing.Bold(); Wordprocessing.FontSize fontSize2 = new Wordprocessing.FontSize() { Val = "24" }; runProperties1.Append(runFonts2); runProperties1.Append(bold2); runProperties1.Append(fontSize2); Wordprocessing.Text text1 = new Wordprocessing.Text(); text1.Text = "ФГБОУВПО \"ПЕРМСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ\""; run1.Append(runProperties1); run1.Append(text1); paragraph1.Append(paragraphProperties1); paragraph1.Append(run1); //Параграф2 Wordprocessing.Paragraph paragraph2 = new Wordprocessing.Paragraph(); Wordprocessing.ParagraphProperties paragraphProperties2 = new Wordprocessing.ParagraphProperties(); Wordprocessing.SpacingBetweenLines spacingBetweenLines2 = new Wordprocessing.SpacingBetweenLines() { After = "0" }; Wordprocessing.Justification justification2 = new Wordprocessing.Justification() { Val = Wordprocessing.JustificationValues.Center }; paragraphProperties2.Append(spacingBetweenLines2); paragraphProperties2.Append(justification2); Wordprocessing.Run run2 = new Wordprocessing.Run(); Wordprocessing.RunProperties runProperties2 = new Wordprocessing.RunProperties(); Wordprocessing.RunFonts runFonts4 = new Wordprocessing.RunFonts() { Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" }; Wordprocessing.FontSize fontSize4 = new Wordprocessing.FontSize() { Val = "24" }; runProperties2.Append(runFonts4); runProperties2.Append(fontSize4); Wordprocessing.Text text2 = new Wordprocessing.Text(); text2.Text = "Механико-математический факультет "; run2.Append(runProperties2); run2.Append(text2); Wordprocessing.Run run3 = new Wordprocessing.Run(); Wordprocessing.RunProperties runProperties3 = new Wordprocessing.RunProperties(); Wordprocessing.RunFonts runFonts5 = new Wordprocessing.RunFonts() { Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" }; Wordprocessing.FontSize fontSize5 = new Wordprocessing.FontSize() { Val = "24" }; runProperties3.Append(runFonts5); runProperties3.Append(fontSize5); Wordprocessing.Break break1 = new Wordprocessing.Break(); Wordprocessing.Text text3 = new Wordprocessing.Text(); text3.Text = "очная форма обучения"; run3.Append(runProperties3); run3.Append(break1); run3.Append(text3); paragraph2.Append(paragraphProperties2); paragraph2.Append(run2); paragraph2.Append(run3); //Параграф2 Wordprocessing.Paragraph paragraph3 = new Wordprocessing.Paragraph() { RsidParagraphAddition = "004D49E1", RsidParagraphProperties = "004D49E1", RsidRunAdditionDefault = "004D49E1" }; Wordprocessing.ParagraphProperties paragraphProperties3 = new Wordprocessing.ParagraphProperties(); Wordprocessing.SpacingBetweenLines spacingBetweenLines3 = new Wordprocessing.SpacingBetweenLines() { After = "0" }; Wordprocessing.Justification justification3 = new Wordprocessing.Justification() { Val = Wordprocessing.JustificationValues.Center }; paragraphProperties3.Append(spacingBetweenLines3); paragraphProperties3.Append(justification3); Wordprocessing.Run run4 = new Wordprocessing.Run(); Wordprocessing.RunProperties runProperties4 = new Wordprocessing.RunProperties(); Wordprocessing.RunFonts runFonts7 = new Wordprocessing.RunFonts() { Ascii = "Times New Roman", HighAnsi = "Times New Roman", ComplexScript = "Times New Roman" }; Wordprocessing.Bold bold4 = new Wordprocessing.Bold(); runProperties4.Append(runFonts7); runProperties4.Append(bold4); Wordprocessing.Text text4 = new Wordprocessing.Text(); text4.Text = "ЭКЗАМЕНАЦИОННАЯ ВЕДОМОСТЬ"; run4.Append(runProperties4); run4.Append(text4); Wordprocessing.Run run5 = new Wordprocessing.Run(); Wordprocessing.Break break2 = new Wordprocessing.Break(); run5.Append(break2); paragraph3.Append(paragraphProperties3); paragraph3.Append(run4); paragraph3.Append(run5); body.Append(paragraph1); body.Append(paragraph2); body.Append(paragraph3); return body; }