2009-10-20 169 views
12

我偶爾會收到一個Word文檔,我必須將其顯示爲網頁。我目前正在使用Django的flatpages通過抓取由MS Word生成的html內容來實現此目的。生成的html非常混亂。有沒有更好的方法,可以生成非常簡單的HTML來解決這個問題,使用Python?如何將Word文檔轉換爲Python中非常簡單的html?

回答

6

一個好的解決方案包括上傳到Google文檔並從中導出html版本。 (必須有一個API?)

它做了很多「清理」;在適當的情況下,路線上的Beautiful Soup可用於做出任何進一步的更改。它是這個星球上最強大和最優雅的html解析庫。

這是記者公司已知的標準。

+1

但是,您是如何從Google文檔執行該操作的?我上傳MSWord文檔並選擇轉換選項 - 它會丟失所有圖表 – likejiujitsu 2012-03-03 19:43:42

2

這取決於你處理的格式和圖像的數量。我做的幾件事情之一:

  • 谷歌文檔:可能是最接近你會得到原來的格式和可用的HTML。
  • Markdown:放棄格式化。將其粘貼到純文本編輯器中,通過Markdown運行並手動修復其餘部分。
+1

如何從Google Doc中獲取HTML?它是下載爲HTML選項嗎? – 2009-10-20 20:44:11

+1

+1:Word Doc文件非常難以使用。許多工具將轉換它們,包括Open Office。 Google Docs有一個簡單的API,因爲它是一個HTTP Web服務。 – 2009-10-20 21:21:02

+3

MS Word - > HTML只是簡單的邪惡。我有一個客戶遞給我一個包含數百個「需要看的地方」的95(!)頁面文字文檔,並且說:「應該很容易將其輸入到數據庫中。」 Arrggghh!我做了這件事,並以100美元/小時的價格收取了特權,但我認爲由於痛苦的原因,我的收入不足。 HTML是我所不得不與之合作的最糟糕的東西。 – 2009-10-21 00:14:35

2

您還可以使用Abiword/wvWare到Word文檔轉換爲XHTML,然後用BeautifulSoup/ElementTree的/ etc解析它。如果您需要預處理它。根據我的經驗,Abiword在轉換Word文件和生成相對乾淨的XHTML文件方面做得很好。

我應該提到Abiword可以在命令行上運行,因此很容易將它集成到自動過程中。

3

我的超簡單應用程序WordOff有一個API用於清除Word導出的HTML文件。您可以重寫您的flatpages模型的保存方法,以便在第一次保存時通過API管理您的HTML。類似這樣的:

import urllib 
import urllib2 

def decruft(html): 
    data = urllib.urlencode({'html' : html}) 
    req = urllib2.Request('http://wordoff.org/api/clean', data) 
    response = urllib2.urlopen(req) 
    return response.read() 

def save(self, **kwargs): 
    if not self.pk: # only de-cruft when content is first added 
     self.content = decruft(self.content) 
    super(FlatPage, self).save(**kwargs) 
+0

WordOff在這種事情上非常整潔 – 2010-12-20 10:40:18

+2

如果你想在本地使用wordoff,你可以下載模塊並使用它的「superClean」方法獲得相同的結果:https://raw.github.com/tomdyson/wordoff/ master/wordoff.py – 2012-08-03 12:55:23

+4

嗨tomd,WordOff.org已過期 – fedmich 2013-08-22 02:16:43

2

Word 2010能夠「保存爲過濾的網頁」。這將消除Word插入的絕大多數HTML。

4

,我發現這個網頁:http://www.textfixer.com/html/convert-word-to-html.php

它轉換成一個格式化文本簡單 HTML標記,保留粗體,斜體,鏈接和段落,但不會增加對字體大小和麪孔標籤。正是我需要節省一些時間。

+0

這真是太神奇了!完全按照我想要的那樣工作。 – Justin 2014-04-14 22:15:40