【问题标题】:Convert from Word document to HTML从 Word 文档转换为 HTML
【发布时间】:2011-01-16 23:45:03
【问题描述】:

我想使用 Word Viewer 将 Word 文档保存为 HTML 格式,而无需在我的机器上安装 Word。有什么办法可以在 C# 中实现这一点吗?

【问题讨论】:

  • 这是一个练习,还是你只是想从 .doc 翻译成 .html 而方法并不重要?
  • 不,我想添加描述 - 在客户端没有安装 MS-Word,所以我必须只使用单词查看器组件来完成工作 -

标签: c# html ms-word


【解决方案1】:

我相信,您需要安装 MS Word 才能执行此操作。

查看this article 了解有关实施的详细信息。

【讨论】:

  • 感谢您的回复。但是我没有在机器上安装 MS Word。所以我只能使用 Word 查看器来完成此操作
【解决方案2】:

根据this Stack Overflow question,使用文字查看器是不可能的。您将需要 Word 使用 COM Interop 与 Word 进行交互。

【讨论】:

  • 感谢您的回复。但是我没有在机器上安装 MS Word。所以我只能使用 Word 查看器来完成此操作
  • 这就是我要说的——我不相信没有完整版的单词是可能的。您可以尝试使用 ZombieSheep 的答案,但我怀疑您会走得很远。购买一份 Word 并使用 COM 互操作会更有意义。
  • 是的,在客户端没有安装 MS-Word,所以我必须只使用单词查看器组件来完成这项工作
  • 不能用文字查看器做到这一点。期间。
【解决方案3】:

我认为这将取决于 Word 文档的版本。如果您有 docx 格式的文件,我相信它们会以 XML 数据的形式存储在文件中(但自从我查看规范以来已经很久了,我很高兴能够对此进行更正)。

【讨论】:

  • 正确,docx 文件是 XML。格式与 Word 2003 到 2007 不同,使用起来非常痛苦!
  • 是的,将 .docx 扩展名重命名为 .zip,您就可以访问构成该文档的所有文件。但是如果没有完整版本的 word 和 COM 互操作,他将很难尝试从 XML 中实现他的目标。 +1 顺便说一句,因为这是他在没有 Word 的情况下要做的唯一方法。
  • 是的,在客户端没有安装 MS-Word,所以我只能使用单词查看器组件来完成这项工作
  • 如果它以 docx 格式存储,您可以在不使用 Word 查看器或 COM 互操作的情况下打开和操作 XML,否则如果没有 Word,这将无法完成。 @Bryan FYI,docx 2003 不是 zip 存档,它只是一个带有 base64 编码图像的 XML 文件。
  • @Rory Fitzpatrick,尝试将 .docx 重命名为 .zip 并自行查看。 google.co.uk/search?q=.docx+rename+to+.zip
【解决方案4】:

如果您愿意不使用 C#,您可以使用PrimoPDF 执行诸如打印到文件之类的操作(这会将 .doc 更改为 .pdf),然后使用 PDF 到 HTML 转换器来完成其余部分方式。之后,您可以随心所欲地编辑您的 html。

【讨论】:

    【解决方案5】:

    使用 OpenOffice.org 中提供的文档转换工具可能是唯一可能的选择 - .doc 格式仅设计为通过 Microsoft 产品打开,因此任何处理它的库都需要对整个格式进行逆向工程。

    【讨论】:

      【解决方案6】:

      要将 .docx 文件转换为 HTML 格式,您可以使用OpenXmlPowerTools。确保添加对 OpenXmlPowerTools.dll 的引用。

      using OpenXmlPowerTools;
      using DocumentFormat.OpenXml.Wordprocessing;
      
      byte[] byteArray = File.ReadAllBytes(DocxFilePath);
      using (MemoryStream memoryStream = new MemoryStream())
      {
           memoryStream.Write(byteArray, 0, byteArray.Length);
           using (WordprocessingDocument doc = WordprocessingDocument.Open(memoryStream, true))
           {
                HtmlConverterSettings settings = new HtmlConverterSettings()
                {
                     PageTitle = "My Page Title"
                };
                XElement html = HtmlConverter.ConvertToHtml(doc, settings);
      
                File.WriteAllText(HTMLFilePath, html.ToStringNewLineOnAttributes());
           }
      }
      

      【讨论】:

      • PowerTools for Open XML 刚刚发布了一个新的 HtmlConverter 模块,该模块包含一个开源的、免费的从 DOCX 到使用 CSS 格式化的 HTML 的转换实现。 HtmlConverter.cs 模块支持所有段落、字符和表格样式、字体和文本格式、编号和项目符号列表、图像等。见bit.ly/1bclyg9
      【解决方案7】:

      我写了Mammoth for .NET,这是一个将docx文件转换为HTML的库,是available on NuGet

      Mammoth 试图通过查看语义信息来生成干净的 HTML,例如,将 Word 中的段落样式(例如 Heading 1)映射到 HTML/CSS 中的适当标签和样式(例如 <h1>)。如果您想要产生精确视觉副本的东西,那么猛犸象可能不适合您。如果您有一些已经结构良好的内容并希望将其转换为整洁的 HTML,那么 Mammoth 可能会成功。

      【讨论】:

      • Michael,我希望您不打算在 Stack Overflow 上为每个“.docx to html”问题发布相同的答案。
      • 这为我节省了很多时间!特别是javascript版本。伟大的工作迈克尔!
      【解决方案8】:

      我得到的另一个类似主题是Convert Word to HTML then render HTML on webpage。我认为如果您仍在使用它,您可能会发现这很有帮助。为此有一个免费分发的 dll。我已经给出了那里的链接。

      【讨论】:

        【解决方案9】:

        您可以尝试使用 Microsoft.Office.Interop.Word;

           using Word = Microsoft.Office.Interop.Word;
        
            public static void ConvertDocToHtml(object Sourcepath, object TargetPath)
            {
        
                Word._Application newApp = new Word.Application();
                Word.Documents d = newApp.Documents;
                object Unknown = Type.Missing;
                Word.Document od = d.Open(ref Sourcepath, ref Unknown,
                                         ref Unknown, ref Unknown, ref Unknown,
                                         ref Unknown, ref Unknown, ref Unknown,
                                         ref Unknown, ref Unknown, ref Unknown,
                                         ref Unknown, ref Unknown, ref Unknown, ref Unknown);
                object format = Word.WdSaveFormat.wdFormatHTML;
        
        
        
                newApp.ActiveDocument.SaveAs(ref TargetPath, ref format,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown, ref Unknown,
                            ref Unknown, ref Unknown);
        
                newApp.Documents.Close(Word.WdSaveOptions.wdDoNotSaveChanges);
        
        
            }
        

        【讨论】:

        • 这个对我来说非常有用,但是,在保存文档时,它会创建一个文件夹,其中包含打开生成的 html 所需的信息。对此有什么想法吗?
        • 这对我很有用,但是,请注意,如果您正在处理许多文档,则只能使用 Application 对象的一个​​实例,每次创建该对象几乎浪费了一秒钟。此外,完全摆脱这个过程并不容易,所以对你的 RAM 来说越少越好
        • 另外,这需要安装 Word,不是吗? OP专门问了,没有字。
        【解决方案10】:

        Gembox 工作得很好。它甚至可以将 Word 文档中的图像转换为 img 标签中的 base64 编码字符串。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-02
          • 2014-07-25
          • 1970-01-01
          • 1970-01-01
          • 2011-04-27
          相关资源
          最近更新 更多