public static void TransformToSingleCharacterRuns(WordprocessingDocument doc) { if (RevisionAccepter.HasTrackedRevisions(doc)) { throw new OpenXmlPowerToolsException( "Transforming a document to single character runs is not supported for " + "a document with tracked revisions."); } foreach (var part in doc.ContentParts()) { TransformPartToSingleCharacterRuns(part); } }
public static void SimplifyMarkup(WordprocessingDocument doc, SimplifyMarkupSettings settings) { if (settings.RemoveMarkupForDocumentComparison) { settings.RemoveRsidInfo = true; RemoveElementsForDocumentComparison(doc); } if (settings.RemoveRsidInfo) { RemoveRsidInfoInSettings(doc); } if (settings.AcceptRevisions) { RevisionAccepter.AcceptRevisions(doc); } foreach (var part in doc.ContentParts()) { SimplifyMarkupForPart(part, settings); } if (doc.MainDocumentPart.StyleDefinitionsPart != null) { SimplifyMarkupForPart(doc.MainDocumentPart.StyleDefinitionsPart, settings); } if (doc.MainDocumentPart.StylesWithEffectsPart != null) { SimplifyMarkupForPart(doc.MainDocumentPart.StylesWithEffectsPart, settings); } if (settings.RemoveComments) { var commentsPart = doc.MainDocumentPart.WordprocessingCommentsPart; if (commentsPart != null) { doc.MainDocumentPart.DeletePart(commentsPart); } var commentsExPart = doc.MainDocumentPart.WordprocessingCommentsExPart; if (commentsExPart != null) { doc.MainDocumentPart.DeletePart(commentsExPart); } } }
public static void SearchAndReplace(WordprocessingDocument wordDoc, string search, string replace, bool matchCase) { if (RevisionAccepter.HasTrackedRevisions(wordDoc)) { throw new InvalidDataException( "Search and replace will not work with documents " + "that contain revision tracking."); } XDocument xDoc; xDoc = wordDoc.MainDocumentPart.DocumentSettingsPart.GetXDocument(); if (xDoc.Descendants(W.trackRevisions).Any()) { throw new InvalidDataException("Revision tracking is turned on for document."); } xDoc = wordDoc.MainDocumentPart.GetXDocument(); WmlSearchAndReplaceInXDocument(xDoc, search, replace, matchCase); wordDoc.MainDocumentPart.PutXDocument(); foreach (var part in wordDoc.MainDocumentPart.HeaderParts) { xDoc = part.GetXDocument(); WmlSearchAndReplaceInXDocument(xDoc, search, replace, matchCase); part.PutXDocument(); } foreach (var part in wordDoc.MainDocumentPart.FooterParts) { xDoc = part.GetXDocument(); WmlSearchAndReplaceInXDocument(xDoc, search, replace, matchCase); part.PutXDocument(); } if (wordDoc.MainDocumentPart.EndnotesPart != null) { xDoc = wordDoc.MainDocumentPart.EndnotesPart.GetXDocument(); WmlSearchAndReplaceInXDocument(xDoc, search, replace, matchCase); wordDoc.MainDocumentPart.EndnotesPart.PutXDocument(); } if (wordDoc.MainDocumentPart.FootnotesPart != null) { xDoc = wordDoc.MainDocumentPart.FootnotesPart.GetXDocument(); WmlSearchAndReplaceInXDocument(xDoc, search, replace, matchCase); wordDoc.MainDocumentPart.FootnotesPart.PutXDocument(); } }
public static WmlDocument AssembleDocument(WmlDocument templateDoc, XElement data, out bool templateError) { var byteArray = templateDoc.DocumentByteArray; using var mem = new MemoryStream(); mem.Write(byteArray, 0, byteArray.Length); using (var wordDoc = WordprocessingDocument.Open(mem, true)) { if (RevisionAccepter.HasTrackedRevisions(wordDoc)) { throw new OpenXmlPowerToolsException("Invalid DocumentAssembler template - contains tracked revisions"); } var te = new TemplateError(); foreach (var part in wordDoc.ContentParts()) { ProcessTemplatePart(data, te, part); } templateError = te.HasError; } var assembledDocument = new WmlDocument("TempFileName.docx", mem.ToArray()); return(assembledDocument); }