diff --git a/OpenXmlPowerTools/OpenXmlPowerTools.csproj b/OpenXmlPowerTools/OpenXmlPowerTools.csproj index c7220506..8ec9f317 100644 --- a/OpenXmlPowerTools/OpenXmlPowerTools.csproj +++ b/OpenXmlPowerTools/OpenXmlPowerTools.csproj @@ -21,4 +21,4 @@ - \ No newline at end of file + diff --git a/OpenXmlPowerTools/WmlToHtmlConverter.cs b/OpenXmlPowerTools/WmlToHtmlConverter.cs index 8c908cfd..f0fd89f1 100644 --- a/OpenXmlPowerTools/WmlToHtmlConverter.cs +++ b/OpenXmlPowerTools/WmlToHtmlConverter.cs @@ -10,6 +10,8 @@ using System.Text; using System.Xml.Linq; using DocumentFormat.OpenXml.Packaging; +using DocumentFormat.OpenXml.Wordprocessing; +using FontFamily = System.Drawing.FontFamily; // 200e lrm - LTR // 200f rlm - RTL @@ -405,19 +407,25 @@ private static object ConvertToHtmlTransform(WordprocessingDocument wordDoc, { return ProcessParagraph(wordDoc, settings, element, suppressTrailingWhiteSpace, currentMarginLeft); } - + // Transform hyperlinks to the XHTML h:a element. if (element.Name == W.hyperlink && element.Attribute(R.id) != null) { try { - var a = new XElement(Xhtml.a, - new XAttribute("href", - wordDoc.MainDocumentPart + var preFragmentUrl = wordDoc.MainDocumentPart .HyperlinkRelationships .First(x => x.Id == (string)element.Attribute(R.id)) - .Uri - ), + .Uri.AbsoluteUri; + var anchor = wordDoc.MainDocumentPart.Document + .Descendants() + .First(x => x.Id == (string)element.Attribute(R.id)) + .Anchor; + var fullUrl = preFragmentUrl; + if (anchor != null) + fullUrl += "#" + anchor; + var a = new XElement(Xhtml.a, + new XAttribute("href",fullUrl), element.Elements(W.r).Select(run => ConvertRun(wordDoc, settings, run)) ); if (!a.Nodes().Any()) @@ -2972,7 +2980,7 @@ private static object ConvertContentThatCanContainFields(WordprocessingDocument var content = g.DescendantsAndSelf(W.r).Select(run => ConvertRun(wordDoc, settings, run)); var a = parsed.Arguments.Length > 0 - ? new XElement(Xhtml.a, new XAttribute("href", parsed.Arguments[0]), content) + ? new XElement(Xhtml.a, new XAttribute("href", string.Join("#", parsed.Arguments)), content) : new XElement(Xhtml.a, content); var a2 = a as XElement; if (!a2.Nodes().Any()) diff --git a/TestFiles/HC023-Hyperlink.docx b/TestFiles/HC023-Hyperlink.docx index ba2b2449..5e500926 100644 Binary files a/TestFiles/HC023-Hyperlink.docx and b/TestFiles/HC023-Hyperlink.docx differ