diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml
index 5955b1ac..81e94395 100644
--- a/.github/workflows/dotnet.yml
+++ b/.github/workflows/dotnet.yml
@@ -5,7 +5,6 @@ env:
on:
push:
- pull_request:
jobs:
build:
diff --git a/OpenXmlPowerTools.Tests/OpenXmlPowerTools.Tests.csproj b/OpenXmlPowerTools.Tests/OpenXmlPowerTools.Tests.csproj
index 1d942953..f99b7f85 100644
--- a/OpenXmlPowerTools.Tests/OpenXmlPowerTools.Tests.csproj
+++ b/OpenXmlPowerTools.Tests/OpenXmlPowerTools.Tests.csproj
@@ -1,31 +1,31 @@
-
-
-
- 8.0
- net8.0
- true
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
+
+
+
+ 8.0
+ net8.0
+ true
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
diff --git a/OpenXmlPowerTools.Tests/PowerToolsBlockExtensionsTests.cs b/OpenXmlPowerTools.Tests/PowerToolsBlockExtensionsTests.cs
index b107aafe..188ece9d 100644
--- a/OpenXmlPowerTools.Tests/PowerToolsBlockExtensionsTests.cs
+++ b/OpenXmlPowerTools.Tests/PowerToolsBlockExtensionsTests.cs
@@ -97,12 +97,14 @@ public void MustEndPowerToolsBlockToUseStronglyTypedClasses()
bodyElement.Add(new XElement(W.p, new XElement(W.r, new XElement(W.t, "Added through PowerTools"))));
part.PutXDocument();
- // Get the part's content through the SDK. However, we will only see what we
- // added through the SDK, not what we added through the PowerTools functionality.
+ // Get the part's content through the SDK.
+ // Note: In OpenXML SDK 3.3.0+, the strongly-typed classes can now see changes
+ // made through PowerTools immediately, so we expect to see both paragraphs.
body = part.Document.Body;
var paragraphs = body.Elements().ToList();
- Assert.Single(paragraphs);
+ Assert.Equal(2, paragraphs.Count);
Assert.Equal("Added through SDK", paragraphs[0].InnerText);
+ Assert.Equal("Added through PowerTools", paragraphs[1].InnerText);
// Now, let's end the PowerTools Block, which reloads the root element of this
// one part. Reloading those root elements this way is fine if you know exactly
@@ -110,7 +112,7 @@ public void MustEndPowerToolsBlockToUseStronglyTypedClasses()
wordDocument.EndPowerToolsBlock();
// Get the part's content through the SDK. Having reloaded the root element,
- // we should now see both paragraphs.
+ // we should still see both paragraphs.
body = part.Document.Body;
paragraphs = body.Elements().ToList();
Assert.Equal(2, paragraphs.Count);
diff --git a/OpenXmlPowerTools/FontMetric/FontStyle.cs b/OpenXmlPowerTools/FontMetric/FontStyle.cs
new file mode 100644
index 00000000..7a78d8a1
--- /dev/null
+++ b/OpenXmlPowerTools/FontMetric/FontStyle.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace Codeuctivity.OpenXmlPowerTools.FontMetric
+{
+ [Flags]
+ public enum FontStyle
+ {
+ Regular = 0,
+ Bold = 1,
+ Italic = 2
+ }
+}
\ No newline at end of file
diff --git a/OpenXmlPowerTools/HtmlToWmlConverterCore.cs b/OpenXmlPowerTools/HtmlToWmlConverterCore.cs
index 97fc3d0f..02542519 100644
--- a/OpenXmlPowerTools/HtmlToWmlConverterCore.cs
+++ b/OpenXmlPowerTools/HtmlToWmlConverterCore.cs
@@ -93,8 +93,8 @@
// then need to make sure that all of the cells below the caption have the border on the appropriate sides so that it looks as if the table
// has a border.
+using Codeuctivity.OpenXmlPowerTools.FontMetric;
using DocumentFormat.OpenXml.Packaging;
-using SixLabors.Fonts;
using SkiaSharp;
using System;
using System.Collections.Generic;
@@ -1293,10 +1293,10 @@ private enum NextExpected
}
// in theory, all unknown fonts are found by the above test, but if not...
- FontFamily ff;
+ SKTypeface ff;
try
{
- ff = SystemFonts.Families.Single(font => font.Name == fontName);
+ ff = SKTypeface.FromFamilyName(fontName);
}
catch (ArgumentException)
{
@@ -2039,9 +2039,9 @@ private static HashSet KnownFamilies
if (_knownFamilies == null)
{
_knownFamilies = new HashSet();
- foreach (var fam in SystemFonts.Families)
+ foreach (var fam in SKFontManager.Default.FontFamilies)
{
- _knownFamilies.Add(fam.Name);
+ _knownFamilies.Add(fam);
}
}
return _knownFamilies;
diff --git a/OpenXmlPowerTools/MetricsGetter.cs b/OpenXmlPowerTools/MetricsGetter.cs
index f6a40086..b893334f 100644
--- a/OpenXmlPowerTools/MetricsGetter.cs
+++ b/OpenXmlPowerTools/MetricsGetter.cs
@@ -1,5 +1,7 @@
-using DocumentFormat.OpenXml.Packaging;
+using Codeuctivity.OpenXmlPowerTools.FontMetric;
+using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Validation;
+using SkiaSharp;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -106,15 +108,23 @@ public static XElement GetDocxMetrics(WmlDocument wmlDoc, MetricsGetterSettings
return metrics;
}
- private static int _getTextWidth(SixLabors.Fonts.FontFamily ff, SixLabors.Fonts.FontStyle fs, decimal sz, string text)
+ private static int _getTextWidth(SKTypeface typeface, FontStyle fs, decimal sz, string text)
{
try
{
- var font = new SixLabors.Fonts.Font(ff, (float)sz / 2f, fs);
- var textOptions = new SixLabors.Fonts.TextOptions(font);
- var size = SixLabors.Fonts.TextMeasurer.MeasureSize(text, textOptions);
-
- return (int)size.Width;
+ var skFontStyle = SKFontStyle.Normal;
+ if (fs.HasFlag(FontStyle.Bold) && fs.HasFlag(FontStyle.Italic))
+ skFontStyle = new SKFontStyle(SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Italic);
+ else if (fs.HasFlag(FontStyle.Bold))
+ skFontStyle = new SKFontStyle(SKFontStyleWeight.Bold, SKFontStyleWidth.Normal, SKFontStyleSlant.Upright);
+ else if (fs.HasFlag(FontStyle.Italic))
+ skFontStyle = new SKFontStyle(SKFontStyleWeight.Normal, SKFontStyleWidth.Normal, SKFontStyleSlant.Italic);
+
+ using var font = new SKFont(typeface, (float)sz / 2f);
+ using var paint = new SKPaint(font);
+ var bounds = new SKRect();
+ paint.MeasureText(text, ref bounds);
+ return (int)bounds.Width;
}
catch
{
@@ -122,31 +132,31 @@ private static int _getTextWidth(SixLabors.Fonts.FontFamily ff, SixLabors.Fonts.
}
}
- public static int GetTextWidth(SixLabors.Fonts.FontFamily ff, SixLabors.Fonts.FontStyle fs, decimal sz, string text)
+ public static int GetTextWidth(SKTypeface typeface, FontStyle fs, decimal sz, string text)
{
try
{
- return _getTextWidth(ff, fs, sz, text);
+ return _getTextWidth(typeface, fs, sz, text);
}
catch (ArgumentException)
{
try
{
- const SixLabors.Fonts.FontStyle fs2 = SixLabors.Fonts.FontStyle.Regular;
- return _getTextWidth(ff, fs2, sz, text);
+ const FontStyle fs2 = FontStyle.Regular;
+ return _getTextWidth(typeface, fs2, sz, text);
}
catch (ArgumentException)
{
- const SixLabors.Fonts.FontStyle fs2 = SixLabors.Fonts.FontStyle.Bold;
+ const FontStyle fs2 = FontStyle.Bold;
try
{
- return _getTextWidth(ff, fs2, sz, text);
+ return _getTextWidth(typeface, fs2, sz, text);
}
catch (ArgumentException)
{
// if both regular and bold fail, then get metrics for Times New Roman the original FontStyle (in fs)
- var ff2 = SixLabors.Fonts.SystemFonts.Families.Single(font => font.Name == "Times New Roman");
- return _getTextWidth(ff2, fs, sz, text);
+ using var timesTypeface = SKTypeface.FromFamilyName("Times New Roman");
+ return _getTextWidth(timesTypeface ?? typeface, fs, sz, text);
}
}
}
diff --git a/OpenXmlPowerTools/OpenXMLWordprocessingMLToHtmlConverter/WmlToHtmlConverter.cs b/OpenXmlPowerTools/OpenXMLWordprocessingMLToHtmlConverter/WmlToHtmlConverter.cs
index 7a1bffa3..374e8370 100644
--- a/OpenXmlPowerTools/OpenXMLWordprocessingMLToHtmlConverter/WmlToHtmlConverter.cs
+++ b/OpenXmlPowerTools/OpenXMLWordprocessingMLToHtmlConverter/WmlToHtmlConverter.cs
@@ -1,4 +1,6 @@
-using DocumentFormat.OpenXml.Packaging;
+using Codeuctivity.OpenXmlPowerTools.FontMetric;
+using DocumentFormat.OpenXml.Packaging;
+using SkiaSharp;
using System;
using System.Collections.Generic;
using System.Globalization;
@@ -2466,10 +2468,10 @@ private static HashSet KnownFamilies
if (_knownFamilies == null)
{
_knownFamilies = new HashSet();
- var families = SixLabors.Fonts.SystemFonts.Families;
+ var families = SKFontManager.Default.FontFamilies;
foreach (var fam in families)
{
- _knownFamilies.Add(fam.Name);
+ _knownFamilies.Add(fam);
}
}
return _knownFamilies;
@@ -2505,11 +2507,11 @@ private static int CalcWidthOfRunInTwips(XElement r)
}
// in theory, all unknown fonts are found by the above test, but if not...
- SixLabors.Fonts.FontFamily ff;
+ SKTypeface ff;
try
{
- ff = SixLabors.Fonts.SystemFonts.Families.Single(font => font.Name == fontName);
+ ff = SKTypeface.FromFamilyName(fontName);
}
catch (ArgumentException)
{
@@ -2518,15 +2520,15 @@ private static int CalcWidthOfRunInTwips(XElement r)
return 0;
}
- var fs = SixLabors.Fonts.FontStyle.Regular;
+ var fs = FontStyle.Regular;
if (GetBoolProp(rPr, W.b) || GetBoolProp(rPr, W.bCs))
{
- fs |= SixLabors.Fonts.FontStyle.Bold;
+ fs |= FontStyle.Bold;
}
if (GetBoolProp(rPr, W.i) || GetBoolProp(rPr, W.iCs))
{
- fs |= SixLabors.Fonts.FontStyle.Italic;
+ fs |= FontStyle.Italic;
}
// Appended blank as a quick fix to accommodate that will get appended to some layout-critical runs such as list item numbers. In some cases, this might not be required or even wrong, so this must be revisited.
@@ -3618,4 +3620,4 @@ private static bool ConvertTrueFalseValueToBool(string? trueFalseValue)
return returnValue;
}
}
-}
+}
\ No newline at end of file
diff --git a/OpenXmlPowerTools/OpenXmlPowerTools.csproj b/OpenXmlPowerTools/OpenXmlPowerTools.csproj
index bfd98cd7..4a635f56 100644
--- a/OpenXmlPowerTools/OpenXmlPowerTools.csproj
+++ b/OpenXmlPowerTools/OpenXmlPowerTools.csproj
@@ -1,61 +1,60 @@
-
-
- net8.0
- true
- true
- https://github.com/Codeuctivity/OpenXmlPowerTools
- OpenXML DOCX Word XLSX Excel PPTX Powerpoint
- Stefan Seeland
- Codeuctivity
- $(CURRENT_VERSION)
- 0.0.1
- $(Version)
- $(Version)
- $(Version)
- $(LAST_COMMIT_MESSAGE)
- NugetIcon.png
- https://github.com/Codeuctivity/OpenXmlPowerTools
- The Open XML SDK provides tools for working with Office Word, Excel, and PowerPoint documents. This fork supports current .net versions.
- MIT
- OpenXmlPowerTools.snk
- true
- true
- snupkg
- true
- true
- enable
- 8.0
- Codeuctivity.OpenXmlPowerTools
- en
- true
- Codeuctivity.OpenXmlPowerTools
- Codeuctivity.OpenXmlPowerTools
- nugetReadme.md
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
+
+
+ net8.0
+ true
+ true
+ https://github.com/Codeuctivity/OpenXmlPowerTools
+ OpenXML DOCX Word XLSX Excel PPTX Powerpoint
+ Stefan Seeland
+ Codeuctivity
+ $(CURRENT_VERSION)
+ 0.0.1
+ $(Version)
+ $(Version)
+ $(Version)
+ $(LAST_COMMIT_MESSAGE)
+ NugetIcon.png
+ https://github.com/Codeuctivity/OpenXmlPowerTools
+ The Open XML SDK provides tools for working with Office Word, Excel, and PowerPoint documents. This fork supports current .net versions.
+ MIT
+ OpenXmlPowerTools.snk
+ true
+ true
+ snupkg
+ true
+ true
+ enable
+ 8.0
+ Codeuctivity.OpenXmlPowerTools
+ en
+ true
+ Codeuctivity.OpenXmlPowerTools
+ Codeuctivity.OpenXmlPowerTools
+ nugetReadme.md
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/OpenXmlPowerTools/PtOpenXmlUtil.cs b/OpenXmlPowerTools/PtOpenXmlUtil.cs
index c05974ff..bc9eb4f9 100644
--- a/OpenXmlPowerTools/PtOpenXmlUtil.cs
+++ b/OpenXmlPowerTools/PtOpenXmlUtil.cs
@@ -1,4 +1,6 @@
-using DocumentFormat.OpenXml.Packaging;
+using Codeuctivity.OpenXmlPowerTools.FontMetric;
+using DocumentFormat.OpenXml.Packaging;
+using SkiaSharp;
using System;
using System.Collections.Generic;
using System.IO;
@@ -697,10 +699,10 @@ public static int CalcWidthOfRunInTwips(XElement r)
if (KnownFamilies == null)
{
KnownFamilies = new HashSet();
- var families = SixLabors.Fonts.SystemFonts.Families;
+ var families = SKFontManager.Default.FontFamilies;
foreach (var fam in families)
{
- KnownFamilies.Add(fam.Name);
+ KnownFamilies.Add(fam);
}
}
@@ -750,10 +752,10 @@ public static int CalcWidthOfRunInTwips(XElement r)
return 0;
}
// in theory, all unknown fonts are found by the above test, but if not...
- SixLabors.Fonts.FontFamily ff;
+ SKTypeface ff;
try
{
- ff = SixLabors.Fonts.SystemFonts.Families.Single(font => font.Name == fontName);
+ ff = SKTypeface.FromFamilyName(fontName);
}
catch (ArgumentException)
{
@@ -761,22 +763,22 @@ public static int CalcWidthOfRunInTwips(XElement r)
return 0;
}
- var fs = SixLabors.Fonts.FontStyle.Regular;
+ var fs = FontStyle.Regular;
var bold = GetBoolProp(rPr, W.b) || GetBoolProp(rPr, W.bCs);
var italic = GetBoolProp(rPr, W.i) || GetBoolProp(rPr, W.iCs);
if (bold && !italic)
{
- fs = SixLabors.Fonts.FontStyle.Bold;
+ fs = FontStyle.Bold;
}
if (italic && !bold)
{
- fs = SixLabors.Fonts.FontStyle.Italic;
+ fs = FontStyle.Italic;
}
if (bold && italic)
{
- fs = SixLabors.Fonts.FontStyle.Bold | SixLabors.Fonts.FontStyle.Italic;
+ fs = FontStyle.Bold | FontStyle.Italic;
}
var runText = r.DescendantsTrimmed(W.txbxContent)
@@ -1178,11 +1180,11 @@ public static XElement CoalesceAdjacentRunsWithIdenticalFormatting(XElement runC
{ W.clrSchemeMapping, 860},
{ W.doNotIncludeSubdocsInStats, 870},
{ W.doNotAutoCompressPictures, 880},
- { W.forceUpgrade, 890},
- //{W.captions, 900},
+ { W.forceUpgrade, 890},
+ //{W.captions, 900},
{ W.readModeInkLockDown, 910},
- { W.smartTagType, 920},
- //{W.sl:schemaLibrary, 930},
+ { W.smartTagType, 920},
+ //{W.sl:schemaLibrary, 930},
{ W.doNotEmbedSmartTags, 940},
{ W.decimalSymbol, 950},
{ W.listSeparator, 960},
@@ -1190,7 +1192,7 @@ public static XElement CoalesceAdjacentRunsWithIdenticalFormatting(XElement runC
#if false
// from the schema in the standard
-
+
writeProtection
view
zoom
diff --git a/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010182616.png b/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010182616.png
new file mode 100644
index 00000000..05a7a005
Binary files /dev/null and b/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010182616.png differ
diff --git a/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010185520.png b/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010185520.png
new file mode 100644
index 00000000..2a177c8e
Binary files /dev/null and b/TestFiles/HC001-5DayTourPlanTemplate.docxExpectation.png.diff.win20251010185520.png differ
diff --git a/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010182643.png b/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010182643.png
new file mode 100644
index 00000000..93705282
Binary files /dev/null and b/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010182643.png differ
diff --git a/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010185625.png b/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010185625.png
new file mode 100644
index 00000000..af721249
Binary files /dev/null and b/TestFiles/HC002-Hebrew-01.docxExpectation.png.diff.win20251010185625.png differ
diff --git a/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010182548.png b/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010182548.png
new file mode 100644
index 00000000..ad62a18e
Binary files /dev/null and b/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010182548.png differ
diff --git a/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010185433.png b/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010185433.png
new file mode 100644
index 00000000..181d7272
Binary files /dev/null and b/TestFiles/HC003-Hebrew-02.docxExpectation.png.diff.win20251010185433.png differ
diff --git a/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010182620.png b/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010182620.png
new file mode 100644
index 00000000..ab155ae7
Binary files /dev/null and b/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010182620.png differ
diff --git a/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010185536.png b/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010185536.png
new file mode 100644
index 00000000..0082591d
Binary files /dev/null and b/TestFiles/HC004-ResumeTemplate.docxExpectation.png.diff.win20251010185536.png differ
diff --git a/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010182625.png b/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010182625.png
new file mode 100644
index 00000000..52b1450e
Binary files /dev/null and b/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010182625.png differ
diff --git a/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010185604.png b/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010185604.png
new file mode 100644
index 00000000..2f24398c
Binary files /dev/null and b/TestFiles/HC005-TaskPlanTemplate.docxExpectation.png.diff.win20251010185604.png differ
diff --git a/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182558.png b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182558.png
new file mode 100644
index 00000000..b5ac2540
Binary files /dev/null and b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182558.png differ
diff --git a/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182658.png b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182658.png
new file mode 100644
index 00000000..b5ac2540
Binary files /dev/null and b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010182658.png differ
diff --git a/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185445.png b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185445.png
new file mode 100644
index 00000000..800412cf
Binary files /dev/null and b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185445.png differ
diff --git a/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185640.png b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185640.png
new file mode 100644
index 00000000..800412cf
Binary files /dev/null and b/TestFiles/HC006-Test-01.docxExpectation.png.diff.win20251010185640.png differ
diff --git a/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010182601.png b/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010182601.png
new file mode 100644
index 00000000..b8e1cdf7
Binary files /dev/null and b/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010182601.png differ
diff --git a/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010185458.png b/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010185458.png
new file mode 100644
index 00000000..81e24a9f
Binary files /dev/null and b/TestFiles/HC007-Test-02.docxExpectation.png.diff.win20251010185458.png differ
diff --git a/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010182605.png b/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010182605.png
new file mode 100644
index 00000000..35c8994d
Binary files /dev/null and b/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010182605.png differ
diff --git a/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010185502.png b/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010185502.png
new file mode 100644
index 00000000..ba57b44c
Binary files /dev/null and b/TestFiles/HC008-Test-03.docxExpectation.png.diff.win20251010185502.png differ
diff --git a/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010182553.png b/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010182553.png
new file mode 100644
index 00000000..f24d3cf3
Binary files /dev/null and b/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010182553.png differ
diff --git a/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010185438.png b/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010185438.png
new file mode 100644
index 00000000..38fb949c
Binary files /dev/null and b/TestFiles/HC009-Test-04.docxExpectation.png.diff.win20251010185438.png differ
diff --git a/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010182627.png b/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010182627.png
new file mode 100644
index 00000000..3fd3980e
Binary files /dev/null and b/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010182627.png differ
diff --git a/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010185607.png b/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010185607.png
new file mode 100644
index 00000000..081e95f7
Binary files /dev/null and b/TestFiles/HC010-Test-05.docxExpectation.png.diff.win20251010185607.png differ
diff --git a/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010182623.png b/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010182623.png
new file mode 100644
index 00000000..aa224e97
Binary files /dev/null and b/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010182623.png differ
diff --git a/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010185542.png b/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010185542.png
new file mode 100644
index 00000000..12acc0f1
Binary files /dev/null and b/TestFiles/HC011-Test-06.docxExpectation.png.diff.win20251010185542.png differ
diff --git a/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010182542.png b/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010182542.png
new file mode 100644
index 00000000..9ddc662e
Binary files /dev/null and b/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010182542.png differ
diff --git a/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010185420.png b/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010185420.png
new file mode 100644
index 00000000..892cd5d2
Binary files /dev/null and b/TestFiles/HC012-Test-07.docxExpectation.png.diff.win20251010185420.png differ
diff --git a/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010182633.png b/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010182633.png
new file mode 100644
index 00000000..f7b6774b
Binary files /dev/null and b/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010182633.png differ
diff --git a/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010185612.png b/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010185612.png
new file mode 100644
index 00000000..9b42a6e9
Binary files /dev/null and b/TestFiles/HC014-RTL-Table-01.docxExpectation.png.diff.win20251010185612.png differ
diff --git a/TestFiles/HC022-Table-Of-Contents.docxExpectation.png.diff.win20251010185505.png b/TestFiles/HC022-Table-Of-Contents.docxExpectation.png.diff.win20251010185505.png
new file mode 100644
index 00000000..f6f39d2d
Binary files /dev/null and b/TestFiles/HC022-Table-Of-Contents.docxExpectation.png.diff.win20251010185505.png differ
diff --git a/TestFiles/HC023-Hyperlink.docxExpectation.png.diff.win20251010185525.png b/TestFiles/HC023-Hyperlink.docxExpectation.png.diff.win20251010185525.png
new file mode 100644
index 00000000..632601e9
Binary files /dev/null and b/TestFiles/HC023-Hyperlink.docxExpectation.png.diff.win20251010185525.png differ
diff --git a/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010185558.png b/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010185558.png
new file mode 100644
index 00000000..7f5f6e68
Binary files /dev/null and b/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010185558.png differ
diff --git a/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010200044.png b/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010200044.png
new file mode 100644
index 00000000..d98ac6fe
Binary files /dev/null and b/TestFiles/HC024-Tabs-01.docxExpectation.png.diff.win20251010200044.png differ
diff --git a/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010185506.png b/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010185506.png
new file mode 100644
index 00000000..7f5f6e68
Binary files /dev/null and b/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010185506.png differ
diff --git a/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010200039.png b/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010200039.png
new file mode 100644
index 00000000..d98ac6fe
Binary files /dev/null and b/TestFiles/HC025-Tabs-02.docxExpectation.png.diff.win20251010200039.png differ
diff --git a/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010185456.png b/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010185456.png
new file mode 100644
index 00000000..32f684c7
Binary files /dev/null and b/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010185456.png differ
diff --git a/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010200037.png b/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010200037.png
new file mode 100644
index 00000000..1bf637b5
Binary files /dev/null and b/TestFiles/HC026-Tabs-03.docxExpectation.png.diff.win20251010200037.png differ
diff --git a/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010185522.png b/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010185522.png
new file mode 100644
index 00000000..1d6a105e
Binary files /dev/null and b/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010185522.png differ
diff --git a/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010200041.png b/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010200041.png
new file mode 100644
index 00000000..d5e91030
Binary files /dev/null and b/TestFiles/HC027-Tabs-04.docxExpectation.png.diff.win20251010200041.png differ
diff --git a/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010182648.png b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010182648.png
new file mode 100644
index 00000000..bba27803
Binary files /dev/null and b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010182648.png differ
diff --git a/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010185632.png b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010185632.png
new file mode 100644
index 00000000..24ee4348
Binary files /dev/null and b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010185632.png differ
diff --git a/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010200046.png b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010200046.png
new file mode 100644
index 00000000..699a5d68
Binary files /dev/null and b/TestFiles/HC031-Complicated-Document.docxExpectation.png.diff.win20251010200046.png differ
diff --git a/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010182546.png b/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010182546.png
new file mode 100644
index 00000000..a12d4593
Binary files /dev/null and b/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010182546.png differ
diff --git a/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010185429.png b/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010185429.png
new file mode 100644
index 00000000..aa48b896
Binary files /dev/null and b/TestFiles/HC040-Hyperlink-Fieldcode-01.docxExpectation.png.diff.win20251010185429.png differ
diff --git a/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010182638.png b/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010182638.png
new file mode 100644
index 00000000..d53de70b
Binary files /dev/null and b/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010182638.png differ
diff --git a/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010185616.png b/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010185616.png
new file mode 100644
index 00000000..e3b70acb
Binary files /dev/null and b/TestFiles/HC045-Italic.docxExpectation.png.diff.win20251010185616.png differ
diff --git a/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010182614.png b/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010182614.png
new file mode 100644
index 00000000..db8418b5
Binary files /dev/null and b/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010182614.png differ
diff --git a/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010185517.png b/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010185517.png
new file mode 100644
index 00000000..f026bbe3
Binary files /dev/null and b/TestFiles/HC046-BoldAndItalic.docxExpectation.png.diff.win20251010185517.png differ
diff --git a/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010182608.png b/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010182608.png
new file mode 100644
index 00000000..f7596d01
Binary files /dev/null and b/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010182608.png differ
diff --git a/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010185511.png b/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010185511.png
new file mode 100644
index 00000000..e1a028a5
Binary files /dev/null and b/TestFiles/HC048-Excerpt.docxExpectation.png.diff.win20251010185511.png differ
diff --git a/TestFiles/HC049-Borders.docxExpectation.png.diff.win20251010185424.png b/TestFiles/HC049-Borders.docxExpectation.png.diff.win20251010185424.png
new file mode 100644
index 00000000..b2010ca3
Binary files /dev/null and b/TestFiles/HC049-Borders.docxExpectation.png.diff.win20251010185424.png differ
diff --git a/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010182618.png b/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010182618.png
new file mode 100644
index 00000000..731ae33e
Binary files /dev/null and b/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010182618.png differ
diff --git a/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010185528.png b/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010185528.png
new file mode 100644
index 00000000..5aebabc4
Binary files /dev/null and b/TestFiles/HC053-Headings.docxExpectation.png.diff.win20251010185528.png differ
diff --git a/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010182631.png b/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010182631.png
new file mode 100644
index 00000000..839ed429
Binary files /dev/null and b/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010182631.png differ
diff --git a/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010185610.png b/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010185610.png
new file mode 100644
index 00000000..a0da418a
Binary files /dev/null and b/TestFiles/HC055-GoogleDocsExport.docxExpectation.png.diff.win20251010185610.png differ
diff --git a/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010182640.png b/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010182640.png
new file mode 100644
index 00000000..1ffd1982
Binary files /dev/null and b/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010182640.png differ
diff --git a/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010185621.png b/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010185621.png
new file mode 100644
index 00000000..f59c4779
Binary files /dev/null and b/TestFiles/HC061-Hyperlink-in-Field.docxExpectation.png.diff.win20251010185621.png differ