diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index aaf47143..ade934a2 100644 --- a/OpenXmlPowerTools/WmlToHtmlConverter.cs +++ b/OpenXmlPowerTools/WmlToHtmlConverter.cs @@ -14,6 +14,9 @@ Twitter: @EricWhiteDev Email: eric@ericwhite.com +Version : 3.1.12b ( Q2C ) +* Add page break functionality + Version: 3.1.12 * Improve layout of list items, using "display: inline-block" with a width rule. * Streamline HTML, omitting unnecessary formatting-related HTML (e.g., bold, italic). @@ -405,6 +408,17 @@ private static void SetStyleElementValue(XElement xhtml, string styleValue) } } + private static bool HasAPageBreak(XElement element) + { + if(element != null && element.Descendants() != null) + { + var validElements = element.Descendants().Where(el => el.Name == W.br).ToList(); + return validElements.Descendants().Any(dl => dl != null && dl.Attribute(W.type).Value != null && dl.Attribute(W.type).Value == "page"); + + } + return false; + } + private static object ConvertToHtmlTransform(WordprocessingDocument wordDoc, WmlToHtmlConverterSettings settings, XNode node, bool suppressTrailingWhiteSpace, @@ -478,7 +492,15 @@ private static object ConvertToHtmlTransform(WordprocessingDocument wordDoc, // Transform contents of runs. if (element.Name == W.r) { - return ConvertRun(wordDoc, settings, element); + if (HasAPageBreak(element)) //Page break must happen in the parent of the element ( in HTML). So no runs then. + { + return ProcessPageBreak(element); + } + else + { + return ConvertRun(wordDoc, settings, element); + } + } // Transform w:bookmarkStart into anchor @@ -686,6 +708,20 @@ private static object ProcessTab(XElement element) return span; } + private static object ProcessPageBreak(XElement element) + { + XElement div = new XElement(Xhtml.div); + div.SetAttributeValue(NoNamespace.style, "page-break-before:always;"); + XElement span = null; + + return new object[] + { + div, + new XEntity("#x200e"), + span + }; + } + private static object ProcessBreak(XElement element) { XElement span = null;