将HTML文本转换为MS Word

6

我试图将HTML(来自CK Editor)转换为MS Word:

wordDoc = new ActiveXObject("Word.Application");

但结果显示在 Word 文档中出现了所有的 HTML 标签(如 spanstrong)。
我该如何解决这个问题?

你可以发布完整的代码吗? - Danny Beckett
https://dev59.com/92cs5IYBdhLWcg3wYy9T - Rohit Kumar
如果您能够将CK编辑器输出转换为格式良好的XHTML,并且熟练使用Java,那么docx4j可能会有所帮助。 - JasonPlutext
有趣的事实:如果将名为test.html的文件重命名为test.doc,并且它是一个完整的HTML文档,则双击该文件将像预期的那样在Word中打开它,包括格式、所见即所得和所有内容。 - dandavis
重要的是你所针对的 MS Word 版本。如果你的用户使用的是 > 2007,@dandavis 是正确的。 - Boggin
5个回答

0

Pandoc 允许在多种格式之间进行转换,包括 HTML 和 Word 文档。 Pandoc 是一个 Haskell 库,但是也有适用于所有平台的捆绑安装程序。要转换您的文档,您需要使用以下命令。

pandoc -o file.doc file.html

0

0

如果您正在寻找WORD解决方案,那么PDF解决方案是否也可以?如果是这样,请尝试http://www.fpdf.org。但是,如果您绝对需要WORD作为最终结果,则此方法无效。除非您需要用户在文档上键入内容,否则通常情况下PDF更好,因为它们可以防止用户进行修改。


0
根据你的问题,我理解你想要将HTML转换为带有所有样式(应用CSS)的Word文档。
我有类似的需求,我已经实现了下面的代码,它对我来说完美地工作。请查看下面的代码,它可能对你有所帮助。
在这里,我从GridView创建了一个Word文件,并对该表格应用了样式。它在Word文件中创建了与浏览器中显示的相同的表格。你只需要更改与你的工作相关的样式(CSS)标签即可。
Protected Sub CreateHTMlToWord()
        Try

            Dim sHtml As New StringBuilder
            Dim htmlForm As New HtmlForm
            grdHTMLData.GridLines = GridLines.Both 'Grid View Fill with data

            Response.ClearContent()
            Response.AddHeader("content-disposition", "attachment; filename=estPage.doc")
            Response.ContentType = "application/vnd.doc"

            Dim str As New IO.StringWriter
            Dim htex As New HtmlTextWriter(str)
            htmlForm.Controls.Add(grdHTMLData)
            htmlForm.EnableViewState = False
            Me.Controls.Add(htmlForm)
            htmlForm.RenderControl(htex)

            sHtml.Append("<html>")
            sHtml.Append("<head>")
            sHtml.Append("<style type='text/css'>")
            sHtml.Append(".mGrid{width: 100%; background-color: #F8FCFE; margin: 5px 0 10px 0; border-collapse: collapse;}")
            sHtml.Append(".mGrid td{ padding: 2px; color: black;} .mGrid td a:link{ color: #000;}")
            sHtml.Append(".mGrid th{ padding: 4px 2px; color: #fff; background: #4A7298; font-size: 0.9em;}")
            sHtml.Append(".mGrid th a:link{ color: #fff; font-weight: bold;} .mGrid .alt{ background-color: #E1EEF7;}")
            sHtml.Append(".mGrid .pgr{ background: #E1EEF7;} .mGrid .pgr table{ margin: 5px 0;}")
            sHtml.Append(".mGrid .pgr td span{ border-width: 0; font-weight: bold; color: #666; line-height: 12px;}")
            sHtml.Append(".mGrid .pgr td a{ color: #666;} .mGrid .pgr td a:link{ color: #4A7298; padding: 0 5px; text-decoration: underline;}")
            sHtml.Append(".mGrid .pgr td a:active{ text-decoration: none; font-weight: bold;}")
            sHtml.Append(".mGrid .pgr td a:hover{ color: #fff; background-color: #4A7298; text-decoration: none;} .mGrid a:hover{ text-decoration: underline;}")
            sHtml.Append(".mGridHdr th{ text-align: left;}")
            sHtml.Append("</style>")
            sHtml.Append("</head>")
            sHtml.Append("<body>")
            sHtml.Append(str.ToString)
            sHtml.Append("</body>")
            sHtml.Append("</html>")

            Response.Write(sHtml.ToString)
            Response.Flush()
            Response.Close()

        Catch ex As Exception

        End Try
    End Sub

0
我能想象的步骤如下:
  1. 将您的HTML转换为OpenXML,
  2. 然后创建与Word文档结构相对应的文件,
  3. 压缩成docx格式。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接