From 75115a1f0818d657add54322503a8f69d23fef7d Mon Sep 17 00:00:00 2001 From: Nico Sap Date: Thu, 6 Sep 2018 13:45:48 +0200 Subject: [PATCH 1/2] Process page breaks --- OpenXmlPowerTools/WmlToHtmlConverter.cs | 32 ++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index aaf47143..6f94bc57 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,11 @@ private static void SetStyleElementValue(XElement xhtml, string styleValue) } } + private static bool HasAPageBreak(XElement element) + { + return element.Descendants().Any(dl => dl.Name == W.br && dl.Attribute(W.type).Value == "page"); + } + private static object ConvertToHtmlTransform(WordprocessingDocument wordDoc, WmlToHtmlConverterSettings settings, XNode node, bool suppressTrailingWhiteSpace, @@ -478,7 +486,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 +702,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; From 8902e377f4dbed007a6d2bd5e94785876598a674 Mon Sep 17 00:00:00 2001 From: Nico Sap Date: Thu, 6 Sep 2018 16:43:13 +0200 Subject: [PATCH 2/2] Fix after testing Some tests seem to fail ( null reference) - fixed now --- OpenXmlPowerTools/WmlToHtmlConverter.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index 6f94bc57..ade934a2 100644 --- a/OpenXmlPowerTools/WmlToHtmlConverter.cs +++ b/OpenXmlPowerTools/WmlToHtmlConverter.cs @@ -408,9 +408,15 @@ private static void SetStyleElementValue(XElement xhtml, string styleValue) } } - private static bool HasAPageBreak(XElement element) + private static bool HasAPageBreak(XElement element) { - return element.Descendants().Any(dl => dl.Name == W.br && dl.Attribute(W.type).Value == "page"); + 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,