3

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

现在我需要将此文档转换为 HTML 文档,我在 OpenXML Powertools 中了解到HtmlConverter,并尝试使用它,使用 OpenXML 电动工具的 Docx 到 Html 转换失败,NullReferenceException并声明Part为空值参数。

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

在此处输入图像描述

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

using (WordprocessingDocument wordDocument = WordprocessingDocument.Create(@"D:\15052018.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:\15052018.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());
}
4

1 回答 1

2

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

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

安装后,启动该工具。

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

在此处输入图像描述

在比较模式下打开文件后,在右侧部分选择器区域中选择主文档部分,然后单击“查看部分差异”按钮。

在此处输入图像描述

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

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

于 2018-02-15T08:54:46.607 回答