【问题标题】:How to convert Word to HTML same as Word print format如何将 Word 转换为与 Word 打印格式相同的 HTML
【发布时间】:2016-05-05 11:24:49
【问题描述】:

我正在将.doc 文件转换为 HTML 文件,这工作得非常好,但我需要实现的一件事是 HTML 文件的格式必须与“打印”中 Word 文件的格式相同布局”格式。

如果我能以某种方式将页脚信息(即每页的页码)添加到转换后的 HTML 文件中,那么我的工作就完成了。

Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();

        oWord.Documents.Open(ref FileName, ref ReadOnly, ref MissingType,
                                       ref MissingType, ref MissingType, ref MissingType,
                                       ref MissingType, ref MissingType, ref MissingType,
                                       ref MissingType, ref IsVisible, ref MissingType,
                                       ref MissingType, ref MissingType, ref MissingType,
                                       ref MissingType);
 var oWordDoc = oWord.ActiveDocument;
        oWordDoc.SaveAs(ref HtmlDirectoryPath, ref DocumentFormat, ref MissingType, ref MissingType,
            ref MissingType, ref MissingType, ref MissingType, ref MissingType, ref MissingType,
            ref MissingType, ref MissingType, ref MissingType, ref MissingType, ref MissingType,
            ref MissingType, ref MissingType);

当我看到HTML文件时,它与Word的“Web Layout”模式相同,我不想要。

我正在使用 C# 和 Microsoft.Office.Interop.Word 库进行此转换。

更新 1:如您所见,查看 Word 文档文件有三种模式 - 阅读模式、打印布局和 Web 布局。但是当我使用上述代码转换文件时,生成的 HTML 文件内容与 Word 文档的 Web 布局模式相同。因此,当有人阅读该 HTML 文件并想向起草文件的人报告一些错误或错误时,有一个不正确的日期并且您必须更新它,那么就不知道在哪个页面上正是错误/错误。因为在 HTML 格式中没有显示页面信息。

所以我的工作是按照pagewise在转换后的HTML中添加一些页面信息,以便验证者可以很容易地告诉起草者我已经浏览了文件并且在Page No X上有一个日期更正。

我尝试将页码添加到文档页脚中,但是当我将其转换为 HTML 时,没有页脚信息随之转换。

【问题讨论】:

  • "当我看到HTMl文件时,和word的"Web Layout"模式一样。"请说明你的意思,不清楚
  • 嗯,HTML 没有“页面”的概念,因此要求与技术的设计工作方式不一致。因此,将 Word 文档另存为 HTML 不会生成任何页码或其他页脚内容,也无法强制 SaveAs 这样做。解决方案将涉及您的代码“遍历”文档,并以某种方式将来自页脚的信息放入页面末尾的文档中。由于这会改变页面流程,因此您需要从文档末尾开始工作。然后保存文档。

标签: c#-4.0 office-interop


【解决方案1】:

这是一个很老的问题,但对某些人来说仍然很重要。

默认情况下,HTML 没有页面的概念,但可以通过使用 Word 部分来实现,默认情况下,这些部分被转换为 HTML 作为易于访问的元素(来自 C# 和 HTML / CSS)。

不幸的是,Word 部分不是在每页末尾添加,而是只有在下一页有一些其他设置(边距布局等)时才手动添加,并且可能很少有其他情况。

您可以手动或以编程方式在 Word 中添加分节符。 要以编程方式进行,转到最后一页(第 1 代码行)可以很好地工作;然后为每一页添加分节符并转到上一页(for循环中的第一个和第二个代码行),从最后一个开始,到第二个结束:

YourWordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage, Word.WdGoToDirection.wdGoToLast);
for (int pageNum = pageCount; pageNum >= 2 ; pageNum--)
{
   YourWordApp.Selection.InsertBreak(Word.WdBreakType.wdSectionBreakContinuous);
   YourWordApp.Selection.GoToPrevious(Word.WdGoToItem.wdGoToPage);
}

您可以使用适合您需要的任何其他分节符(来自 Word.WdBreakType)。

您可以通过以下方式获取 pageCount:

int pageCount = YourWordDoc.Content.Information[Word.WdInformation.wdNumberOfPagesInDocument];

您可以从开始(第 2 页)迭代到结束,对于某些文档可能会更混乱(更多额外的空行),而对于其他文档则不那么混乱。

您可能还希望(可能不会让您的文档变得混乱)在页面末尾添加分节符 - 然后您必须从第一页到倒数第二页进行迭代。

此方法将在 HTML 中为您提供一些模仿 Word 页面的内容,但只有在您只有一个部分时才有效 - 文档中没有分节符,这是不可能的。 如果您的部分不止一个(至少一个分节符),您将不得不以某种方式处理它们 - 删除它们(不删除它们的内容)或与前面步骤中添加的不同,然后继续在接下来的过去。 此外 - 它几乎总是会将一些内容移动到上一页/下一页,因此最终编号可能与原始编号不同。

当您获得页面时,您可以通过在每个部分的末尾或开头插入一些 div 或其他包含数字的元素来获得编号,并为这些元素赋予独特的类 - 以样式进行格式化 - 使它们清晰可辨作为编号。

如果您想以更好的方式或更多的方式获得页脚,而不仅仅是编号 - 您可能会发现 mvark blog post 很有用。

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 2014-04-26
    • 1970-01-01
    • 2021-06-10
    • 2016-02-13
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多