代码之家  ›  专栏  ›  技术社区  ›  GeReV

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

  •  9
  • GeReV  · 技术社区  · 15 年前

    在我现在的公司里,我们有这十年的历史……让我们称之为 Hello World “应用程序。

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

    如果我们移动到一个更新的系统,我希望将HTML清理和过滤,以便使站点尽可能符合HTML标准。
    但是,只要像这样清除代码 Jeff Atwood described in his blog 或者以我所知的任何其他方式也会破坏样式和格式。

    现在,这可能会引起我们的用户的反感,然后所有的地狱将打破-不是一个很好的主意。

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

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

    8 回复  |  直到 15 年前
        1
  •  3
  •   Community CDub    10 年前

    有几个选项可供选择,但您当然可以使用JeffAtwood的作为一个良好的起点来编写自己的代码。如果是这样,您很可能会得到对结果的微调控制——请注意,尽管结果永远不会100%准确,因为所有额外的MS代码实际上都在那里,以确保尽可能多地与原始文档保持一致(至少在IE中用于往返)。但大多数代码保留了大部分格式。

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

    如果您只是想要批处理(并且不关心拥有代码库),那么 Office 2000 HTML Filter 2.0 可能是你最好的-在上面了解更多 TechRepublic .

        2
  •  2
  •   Steven D. Majewski    15 年前

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

    它是非常可配置的,因此对于批处理清理,它很可能 命令行工具将执行您需要的操作。你没有 给自己编一个程序。

    如果您需要做更多的内容清理工作- 不仅仅是语法-一些XSLT处理器(例如xsltproc) 有一个“--html”选项:输入文件由html解析器解析 XML解析器的。然后可以使用XSLT来转换或重新排列 内容,然后用HTML序列化程序输出。

        3
  •  2
  •   Community CDub    8 年前

    This SO question 尽管存在类似的问题,但不需要进行编程清理。

    其中一个答案提到,Office2007有一个“发布”->博客菜单项,据报道该菜单项可以产生良好的结果,而且速度很快。可以从Word创建宏来调用此命令,然后通过编程方式调用宏。可以使用com或vbscript启动Word并运行宏,或者运行 winword.exe 使用/m开关。命令行切换到 WEWORD.EXE 给出 here .

        4
  •  1
  •   scope_creep    15 年前

    一定要有预算。这可能 Work . 先试后买。

        5
  •  1
  •   Anton    15 年前

    看一看 FCKEditor 它是一个基于javascript的编辑器,因此查看源代码可能会给您很多提示,告诉您在删除Word HTML时要查找什么。

    特别是,查看文件/editor/dialog/fck_paste.html。有一个函数,“cleanword”可以完成所有的操作。我已经修改了它,以便在我自己的应用程序中使用(稍作修改,例如,不同的替换等),但是它在去除丑陋的Word HTML方面做得很好。

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

        6
  •  1
  •   McAden    15 年前

    PSPad 包括Tidy,它有一个“干净的Microsoft Word 2000”选项,我以前在Word文档中使用过它,并且它是可自定义的。

        7
  •  1
  •   Christ A    10 年前

    这个 HtmlRuleSanitizer (可用) NuGet )可以为你开箱即用。

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

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

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

    标题之一

    段落

    航向 二

    大胆的

    斜体字

    一个环节

    只有以下一组相对干净的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经常做的一些烦人的事情,如打开和关闭标签(参见示例中的跨距元素)没有完全清除。

        8
  •  0
  •   suzumakes    10 年前

    下面是一组PowerShell脚本,它们将清除Word筛选的HTML,并在95%的时间内正确标记super/subscripts。(不,你不能再好了,Word是为打印而设计的。)

    https://github.com/suzumakes/replaceit

    基本格式保持不变,标签变成标签,标签变成标签。我认为这就是您要查找的内容,即使您不应该使用regex来解析HTML,单词筛选的HTML也很难被筛选,但是在运行这些PowerShell脚本之后,它是干净的。

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