使用 OpenXML SDK 创建文档时 OpenXML Powertools HtmlConverter 失败

OpenXML Powertools HtmlConverter Fails when Document created with OpenXML SDK

我使用 OpenXML SDK 2.5 编写了一个 Word 文档,当我在 MS Office 中预览时,该文档具有预期的外观和格式。

现在我需要将此文档转换为 HTML 文档,我开始了解 OpenXML Powertools 中的 HtmlConverter,并尝试使用它,使用 OpenXML 将 Docx 转换为 Html power tools 失败,NullReferenceExceptionPart 声明为空值参数。

为了调查,我创建了新的 Word 文档(在 MS Word 中),其中包含我文档的确切内容;此文件已成功转换为 Html,所以问题出在我用 C# 创建的文档上。我发现两者的文件大小各不相同(从 MS Word 创建的文档较重,而使用 OpenXML SDK 创建的文档似乎更轻);我已将这两个文件重命名为 ZIP 以检查其内容,下面用 MS office 创建的文档的 document.xml 标记在顶部,用 OpenXML SDK 创建的文档标记在底部,

我怀疑 HtmlConverter 的失败是由于这些标记更改造成的。我的假设正确吗?如果是这样如何在文档中添加这些额外的标记。这是我用来创建 Word 文件的代码。

using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(@"D:052018.docx", WordprocessingDocumentType.Document)) 
{
    MainDocumentPart mainPart = wordDocument.AddMainDocumentPart();
    mainPart.Document = new Document();
    Body body = mainPart.Document.AppendChild(new Body());
    Paragraph para = body.AppendChild(new Paragraph());
    Run run = para.AppendChild(new Run());
    RunProperties rpr = new RunProperties(new RunFonts() { Ascii = "Times New Roman" });
    run.PrependChild<RunProperties>(rpr);
    run.AppendChild(new Text("Welcome"));
    wordDocument.Save();
    wordDocument.Close();
}

对于Html转换,

using (WordprocessingDocument doc = WordprocessingDocument.Open(@"D:052018.docx", true))
{
    HtmlConverterSettings settings = new HtmlConverterSettings() { PageTitle = "My Page Title" };
    var html = HtmlConverter.ConvertToHtml(wDoc: doc, htmlConverterSettings: settings);
    File.WriteAllText(@"D:\Test1.html", html.ToStringNewLineOnAttributes());
}

要查看文件差异,我建议您将使用 SDK 创建的文件与使用 Word 创建的文件进行比较。您可以使用 Open XML 生产力工具来做到这一点。要安装该工具,请按照以下步骤操作:

  1. 转到download link
  2. 单击红色下载按钮。
  3. 在下一个屏幕上,只需单击 OpenXMLSDKToolV25.msi
  4. 旁边的框
  5. 然后单击下一步,下载将自动在您的浏览器中开始。

安装后,启动该工具。

要比较 2 个 OpenXml 文件,单击中间的“比较文件”按钮,将显示差异。

在比较模式下打开文件后,select 右侧部分 select 或区域中的主文档部分,然后单击 "View Part Diff" 按钮。

这将向您展示不同的 XML。如果单击,查看包代码,这将生成 C# 代码,如果需要,可以弥补两个文件之间的差异。

专业提示 - 要仅生成构建由 Word 创建的文件所需的代码,请使用“打开文件”按钮在快捷会议工具中以非比较模式打开它.然后单击反映代码以生成重新创建 Word 生成文件的精确克隆所需的 C# 代码。