歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

用低代價的服務器過程將文檔處理自動化

  首先是最簡單的  首先,對於快速的人可讀性、粗略的字數統計等而言,用字符串掃描 .DOC 文檔通常是足夠了。像    strings something.doc wc -w    這樣的命令返回的字數統計值通常誤差在 10% 以內。    對這樣粗糙的方法進行改進會非常困難。問題的核心在於 .DOC 作為一種格式,在這些年裡已經進行了很大的更改。難於跟蹤。    相關的 .RTF 有幾個優勢:它用 ASCII 進行編碼,幾乎具有人工可讀性,並且它不太可能被病毒傳染。而且,這些年裡它已經顯得穩定多了;1997 年的閱讀器多半能理解今年編寫的 .RTF,反之也是。在我所管理的一些網絡上,我進行了流量限制:把 .DOC 排除在外,而贊成使用 .RTF,以預防惡意代碼。原則上說,這剝奪了用戶使用某些字處理特性的權利,而這些特性只能從 .DOC 獲得。實際情況是,我從未遇到過一個這樣的用戶:他(或她)真正使用了一種用 .RTF 無法達到的效果。    下面的參考資料一節,列出了幾個輕量級 Word 閱讀器:wvWare、catdoc 等。這些通常能快速簡便地進行安裝和使用。大多數 UNIX 桌面用戶現在都知道,UNIX 上的 OpenOffice 完全可以用來替代 Windows Word 的常見用途,而且非常擅長讀和寫 .DOC 文檔。OpenOffice 公開了可編制腳本的接口,這使得它可以用 Java、C++、Python、OpenOffice.org Basic、StarScript、CORBA 或 OLE Automation 對文檔內容進行編程。OpenOffice 還集成了使用這種技術的宏錄制。本質上需要商業許可證的產品 StarOffice(TM)也是如此。    事實上,盡管 StarOffice 在形式上與 OpenOffice 是有區別的,本專欄文章完全著重於描述後者,因為根據後者的網站,“StarOffice 軟件的未來版本,從 6.0 開始,將使用 OpenOffice.org 源代碼、API(應用程序編程接口)、文件格式和參考實現進行構建”(請參閱參考資料)。在今後的 OpenOffice 實現中,“UNO(通用網絡對象,Universal Network Object)是個基於接口的組件模型”。    可是,OpenOffice 是處理 Word 文檔相當“笨重的”方式。它至少需要圖形用戶界面(GUI)服務,通常還需要相當細致的安裝和多個編程的過程。面向 XML 的“格式化對象”(FO)與它非常相像:盡管功能很強大,但是它在開始工作之前需要進行許多工作。如果您不想進行這些我常常碰到的簡單操作 - 生成固定格式的 .RTF 發票、“擦掉”收入狀況周報表、用特定於閱讀器的信息定制 Web 下載等等這類的事 - 那麼您應該研究 .RTF 庫的直接語言綁定。其中最好的是 Robert Rothenburg 的 Perl API。    RTF::Document  對於最簡單的 .RTF 生成過程來說,進行簡單的剪貼就夠了。您可以用 shell 腳本,用參數表示象圖 1 這樣的生成。    清單 1. invoice.sh 的源代碼(部分)    #!/bin/sh    AMOUNT="1234.56"  DATE="06 October 2002"  NUMBER="9999/3333"  PO="6543"    FORM="{\rtf1\ansi\deff0\deftab720{\fonttbl...  \par \pard\plain\f3\fs20   \par \pard\qr\plain\f2\fs24\cf0 $DATE  \par \pard\plain\f2\fs24\cf0 Phaseit, Inc.  \par #$NUMBER  \par   \par Please pay \$$AMOUNT to  ...  圖 1. 在 Linux 服務器上生成的簡單 Word 文檔的抓屏     為了使編程更加結構化、可伸縮和可維護,請使用 Perl 的 RTF 模塊。這些模塊使得有可能編寫出像清單 2 中所示的代碼。    清單 2. invoice.pl 的源代碼(部分)     use RTF::Document;      $rtf = new RTF::Document({     doc_page_width => '8.5in',     doc_page_height => '11in'   });            $fCourier = $rtf->add_font ("Courier",     { family=>monospace, pitch=>fixed,      alternates=>["Courier New", "American Typewriter"]     }   );    $fTime s= $rtf->add_font ("Times New Roman",     { default => 1     }   );       $rtf->add_text( $rtf->root(), "Invoice", ...       當然,用這個辦法,我手頭立即擁有了 Perl 的所有功能和生產,可以“接進”外部數據源、轉換內容等。    結束語  別指望問題能自己解決。作為服務器端開發人員,部分責任就是檢查身邊的操作中的矛盾。如果有報表頻繁丟失或編碼錯誤,那麼有個方法,就是勸誡雇員工作得久一些或更細心點。有時這很管用。但您可以用自動化工具系統地設計有效的過程。    自動化不僅僅只是能減少錯誤。將內容生成或處理過程自動化時,在定制和更佳質量的服務方面,會出現新的可能性。挑選下列參考資料中最符合您情況的內容,用它們解決那些在組織中已經消耗了很多時間的問題,並繼續接受更有趣更有益的挑戰。




Copyright © Linux教程網 All Rights Reserved