diff --git a/OpenXmlPowerTools/FormattingAssembler.cs b/OpenXmlPowerTools/FormattingAssembler.cs index 9cb85d92..ed5db85a 100644 --- a/OpenXmlPowerTools/FormattingAssembler.cs +++ b/OpenXmlPowerTools/FormattingAssembler.cs @@ -2014,8 +2014,8 @@ private static IEnumerable ParaStyleParaPropsStack(XDocument stylesXDo while (localParaStyleName != null) { XElement paraStyle = stylesXDoc.Root.Elements(W.style).FirstOrDefault(s => - s.Attribute(W.type).Value == "paragraph" && - s.Attribute(W.styleId).Value == localParaStyleName); + s.Attribute(W.type)?.Value == "paragraph" && + s.Attribute(W.styleId)?.Value == localParaStyleName); if (paraStyle == null) { yield break; diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index 8c908cfd..19a870ef 100644 --- a/OpenXmlPowerTools/WmlToHtmlConverter.cs +++ b/OpenXmlPowerTools/WmlToHtmlConverter.cs @@ -8,6 +8,7 @@ using System.Globalization; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Xml.Linq; using DocumentFormat.OpenXml.Packaging; @@ -1520,9 +1521,20 @@ private static Dictionary DefineRunStyle(XElement run) private static decimal? GetFontSize(string languageType, XElement rPr) { if (rPr == null) return null; - return languageType == "bidi" - ? (decimal?) rPr.Elements(W.szCs).Attributes(W.val).FirstOrDefault() - : (decimal?) rPr.Elements(W.sz).Attributes(W.val).FirstOrDefault(); + var strVal = languageType == "bidi" + ? rPr.Elements(W.szCs).Attributes(W.val).FirstOrDefault()?.Value + : rPr.Elements(W.sz).Attributes(W.val).FirstOrDefault()?.Value; + + if (string.IsNullOrEmpty(strVal)) + { + return null; + } + + //if size is set as pt we should multiply it to compensate future division by 2 + var multiplicator = strVal.ToLower().Contains("pt") ? 2m : 1m; + + strVal = Regex.Replace(strVal, @"[^\d\.,]", "").Replace(",", "."); + return decimal.TryParse(strVal, NumberStyles.Any, CultureInfo.InvariantCulture, out var parsed) ? (decimal?) multiplicator * parsed : null; } private static void DetermineRunMarks(XElement run, XElement rPr, Dictionary style, out XEntity runStartMark, out XEntity runEndMark)