Posts RSS Comments RSS  

PastyConvertor 0.01

PastyConvertor是我用Microsoft Word裡的Visual Basic寫的小程式,可以把Word文件轉換成HTML格式。

程式(壓縮檔就有三個檔案:安裝說明、一個.BAS模組、一個.FRM表單)可以從OSSF的OpenFoundry取得,請按這裡下載。另外還有程式專案摘要,以及程式介紹及安裝說明

先別幻想太多,這是0.01版的程式,功能相當地簡單:把你選取的文件段落,直接在螢幕上輸出成加註HTML標籤的文字檔(輸出到另一個視窗中,你可以將輸出結果剪貼到你的HTML檔或常用的編輯器內)。目前支援(亦即可以轉換)的Word格式不多,只有粗體、斜體,及所有使用者自訂的字元樣式(需修改原始程式碼)。支援表格處理,但僅處理最簡單方正的表格。沒有處理段落樣式和非本文部份(例如註腳)的能力。

嗯?你可能會問,Word不是已經有「另存成Web畫面」的功能了嗎?為什麼要重新發明輪子呢?

需要是發明之母,不爽是發明之父。(你如果認為發明有兩個爸爸或媽媽,當然也行……)如果再加上一點點好奇心驅使,懶人也會(或者說也得)自己開始翻土播種。PastyConvertor其實就是這樣誕生的。

我長時間使用Word寫東西,但是我也有相當數量的HTML文件(例如自己的網頁、你現在看的blog等等、交給別人的文件)。將Word轉成HTML是件相當頭疼的問題,因為Word自家的「另存成Web畫面」,有幾個大缺點:

  • 首先,轉出的HTML文件相當「不乾淨」,裡面充滿了微軟自家的HTML hack,及太多不必要的樣式修訂。
  • 另外,「智慧引號」轉出來的結果是一項災難,例如:Two pairs of so-called smart quotes and smart quotes. Its a disaster. 在Word,如果轉出的是編碼為中文的文件,會變成:Two pairs of so-called “smart qutoes” and ‘smart quotes.’It’s a disaster. 原本是半形的引號,竟然轉成了全形的!
  • 最後,Word是依照文件當前的樣式,以及樣式的look-and-feel,直接硬轉成HTML。但是這樣一來,HTML的stylesheet就等於是沒有意義的了 -- 簡單地說,如果我在文件裡設定字元樣式為”emphasis_remark”,那麼我希望產出的HTML,是利用到我所指定的這個style的。而這個style,我可以另外在stylesheet中設定。但Word等於毀了這項設計。

當然,我可以理解,對一般使用者來說,如果轉出來的HTML檔能和Word長得一模一樣,應該是最自然不過了。另外,我用的Word 2000,我不知道後來的XP, 2002, 2003版,轉出來的HTML是不是仍然一樣髒。我知道大多數人會做的事情是,把轉出的HTML檔丟進像DreamWeaver那樣的工具,把多餘的HTML檔「清乾淨」,但如此一來所有的格式設定也都不見了。至於,智慧引號的問題,嚴格說來不是微軟的錯:因為在Unicode裡,上例的兩組引號(雙引號、單引號),竟然全形和半形都是同一組Unicode碼。瀏覽器其實是依照當時的編碼(例如英文或中文)來決定將引號顯示為全形或半形的(至少這是IE和Mozilla的implementation)。

但是重點來了:我不喜歡DreamWeaver幫我把所有的HTML標籤清乾淨(而且也不是真的很乾淨),可是我又不喜歡Word把HTML檔轉得跟Word文件一模一樣。正好相反:我希望轉出來的HTML和原始文件不一樣,只留下「格式的設定命令」(style commands),卻不要轉「格式的內容」(style contents)。

簡單地說是這樣子的:我希望能有一套簡單的轉換程式,可以只轉我想要的段落,而且最好直接輸出到螢幕上,這樣我就可以直接把轉出來的碼,貼到我的blog程式(我用的是Moveable Type的管理介面)。我只要留少數的格式,例如粗體、斜體、自定樣式,以及簡單的段落及表格處理能力就行了。轉換完之後,HTML文件的樣式,則由blog決定。等於是說,Word只是我的「文字處理器」,並用Word做簡單的格式「加註」(mark-up),但是最後文件的長相 -- 亦即「組版」的過程 -- 是由例如像Moveable Type來完成的

另外,我也希望轉換的過程,能不影響我文件中的夾雜的各種外語。

你現在看到的這篇blog,就是我在Word上寫完,然後用PastyConvertor轉成HTML然後貼到Moveable Type裡的。我唯一加工的只有項目符號的部份(因為我還沒加入這種格式的轉換 :Q)以及兩個超連結(我也還沒加入)。

剛剛說過了,需要是發明之母,不爽是發明之母。(嗯?怎麼變成了兩個媽媽?你以為現代家庭一定只能由爸爸和媽媽組成嗎?別鬧了!)那麼好奇心呢?嗯,其實我很久以前就一直在玩弄(tinkering with)Word的Visual Basic了,但是一直參不透Word層層疊疊的物件模型。我對Word的內部格式沒興趣(微軟也從來沒正式發佈過,雖然另外有RTF這樣的半公開格式),但覺得把Word當做是一種application service,直接跟它要文件內容,這種物件導向式的思考,蠻有趣的。趁這次寫PastyConvertor的機會,總算是稍微對Word文件的內部組織方式(或者說是對外呈現的物件組織),有了多一點的瞭解。這個程式目前最大的缺點是慢:不知道是OLE的問題,還是Visual Basic的問題。有朝一日我想應該會改用C++或Perl重寫 -- 或者,有朝一日,我將把我全部的文件作業,搬到其他的編輯程式上。PastyConvertor成為遺跡的那一天,是我移植成功的日子。The day PastyConvertor becomes a legacy is the day my porting efforts bear their fruits.

歡迎大家一起來搞搞Word內部的東西,「挪用」Word變成自己的HTML/XML editor,並且產製出自己喜歡、合宜好看的HTML檔。不要再忍受醜醜的「另存成Web畫面」的結果了!

Comments are closed.