以编程方式清理Word生成的HTML,同时保留样式?

时间:2010-05-10 21:46:41

标签: .net html xhtml ms-word

在我现在的公司,我们已经有十年了......我们称之为“Hello World”申请。

虽然想要创建它的新版本,但我们还希望保留较旧的条目。这些较旧的条目包含可怕的Word生成的HTML,以前从未过滤过。

如果我们迁移到更新的系统,我希望清理和过滤该HTML,以使网站尽可能符合HTML标准。
但是,仅仅清除Jeff Atwood described in his blog之类的代码或我所知道的任何其他方式也会破坏样式和格式。

现在,这可能会导致我们的用户反抗,然后一切都会破裂 - 这不是一个好主意。

所以问题是: 可以在保留基本格式的同时清理Word的HTML吗? (例如:着色,斜体,粗体文本等)

最好使用公开的代码或库,例如HTML Tidy,C#中的示例将非常感谢。

8 个答案:

答案 0 :(得分:3)

有几个选项可供选择,但你可以肯定使用Jeff Atwood作为编写自己代码的好起点。如果是这样,您可能会对结果进行微调控制 - 请注意,结果将永远不会100%准确,因为所有额外的ms代码实际上都是为了确保尽可能保持原始文档的保真度(至少在IE中用于往返目的)。但大多数代码确实保留了大部分格式。

以下是一些可能有用的代码库:

如果您只是想进行批处理(并且不关心拥有代码库),Office 2000 HTML Filter 2.0可能是您最好的 - 请在TechRepublic上详细了解它。

答案 1 :(得分:2)

整理可以很好地清理和规范html语法。

它是非常可配置的,因此对于批量清理,它很可能 命令行工具将满足您的需求。你没有 自己编程tidylib。

如果你需要做更多涉及清理的内容 - 不只是语法 - 一些xslt处理器(xsltproc,一个) 有一个'--html'选项:输入文件由html解析器解析 一个xml解析器。然后,您可以使用xslt来转换或重新排列 内容,然后使用html序列化程序输出。

答案 2 :(得分:2)

This SO question提出了类似的问题,尽管如此,不需要进行程序化清理。

其中一个答案提到Office 2007有一个Publish-> Blog菜单项,据说可以产生良好的效果并且速度很快。您可以从Word创建一个宏来调用此命令,然后以编程方式调用该宏。您可以使用COM或VBScript启动单词并运行宏,或使用/ m开关运行winword.exe。命令行切换到winword.exe here

答案 3 :(得分:1)

确实有预算。这可能是Work。先试后买。

答案 4 :(得分:1)

看看FCKEditor,它是一个基于javascript的编辑器,所以查看源代码可能会给你提供很多关于删除单词HTML时要查找的内容的提示。

请特别注意文件/editor/dialog/fck_paste.html。有一个功能,“CleanWord”做到了这一切。我已将其修改为在我自己的应用程序中使用(稍作修改,即不同的替换等等),但它可以很好地摆脱丑陋的Word HTML。

它使用正则表达式来查找和替换它,这意味着您可以轻松地添加正则表达式并将其导入到您选择的另一种编程语言中以运行批处理作业。

答案 5 :(得分:1)

PSPad包括整洁,它有一个“Clean Microsoft Word 2000”选项,我以前用过word文档并且可以自定义。

答案 6 :(得分:1)

HtmlRuleSanitizerNuGet上提供)可以为您提供开箱即用的功能。

它使用HTML Agility Pack来解析HTML代码,并使用一组基于白名单的规则来保留格式。默认规则集将删除几乎所有详细的MS Word HTML代码,同时保留基本文档结构,如标题标记,粗体,斜体等。

如果要保留特定的MS Word样式,则必须为用例创建或修改规则集。

例如,它可以轻松转换MS Word为包含以下内容的文档生成的数百行HTML代码:

  

标题

     

段落

标题   2

     

粗体 <强>

     

斜体

链接

仅限以下一组相对干净的HTML:

<html>
<body>
<h1><span>Heading</span> <span>one</span></h1>
<p><span>Paragraph</span></p>
<h2><span>Heading</span> <span>two</span></h2>
<p><span><strong>Bold</strong></span><strong></strong></p>
<p><span><i>Italic</i></span><i></i></p>
<p><i><a href="http://www.google.com/" target="_blank" rel="nofollow">Link</a></i></p>
</body>
</html>

请注意,MS Word经常打开和关闭标签的一些烦人的东西(参见示例中的span元素)并未完全清除。

答案 7 :(得分:0)

以下是一组PowerShell脚本,它们将清除Word-Filtered HTML并在95%的时间内正确标记超级/下标。 (不,你不能比这更好,Word是为了打印而制作的。)

https://github.com/suzumakes/replaceit

基本格式保持不变,标签变为标签,标签变为标签。我认为这正是您正在寻找的,即使您不应该使用正则表达式解析HTML,但很难过滤Word-Filtered HTML,但在运行这些PowerShell脚本后它很干净。< / p>

自述文件中有说明,如果您碰巧遇到任何需要捕获的其他字符或进行任何调整/改进,我很乐意看到您的请求。