我使用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以及其检查内容,在MS Office创建的文档下方捕获的document.xml
标记位于顶部,而使用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());
}
答案 0 :(得分:2)
要查看文件差异,我建议您将使用SDK创建的文件与使用Word创建的文件进行比较。您可以使用Open XML Productivity Tool执行此操作。要安装该工具,请按照下列步骤操作:
安装完成后,启动该工具。
要比较2个OpenXml文件,请单击中间的“比较文件”按钮,将显示差异。
在比较模式下打开文件后,选择右侧部件选择器区域中的主文档部件,然后单击&#34;查看部件差异&#34;按钮。
这将向您显示不同的XML。如果单击,查看包代码,这将生成C#代码,如果需要,可以弥补两个文件之间的差异。
专业提示 - 仅生成构建由Word创建的文件所需的代码,使用“打开文件”按钮在非比较模式下在“生产力工具”中打开它。然后单击“反映代码”以生成重新生成Word生成文件的精确克隆所需的C#代码。