星期四, 5月 24, 2007

使用 OpenOffice.org 建立 PDF 電子表單

上週,在學校的校友信箱中,收到了系上某位自稱是負責校友會校友資料更新的學妹寄來的 e-mail,信中附上了一個叫『校友更新資料表』的 Word 檔,希望我填完以後寄回去。

基本上看到是 Word 檔,想填的意願就已經不高了,又不是每個人都會裝 MS Office,也不是每個人都用死微軟的暈倒系統啊!不過由於之前似乎系上也寄過相同的調查表的紙本到台灣的家裏,所以還是打開看看。打開一看,果然是用 Word 畫的表格。這到還好,雖然填起來不是那麼方便,但還可以接受。直到我看到了某個讓我受不了的東西 -- 使用『□』符號做出來的 checkbox--我決定不填了。使用『□』符號來『畫』checkbox 是在製作紙本表格時,蠻多人會用的方法。問題是在電子表格裡面,這種作法實在很糟:填表人還要想辦法去找到『■』符號來把原來的『□』取代掉!這是相當不專業的方法。

在現在,電子表單逐漸成為無紙作業中,相當重要的一個基本工具。不過以往看到的 PDF 電子表單,大都是使用一些昂貴的 Windows 平台軟體製作的。至於使用 FS/OSS 製作 PDF 表單的方法倒不是沒有,我第一個可以想到的,是使用 pdfTeX 搭配 hyperref 等 package 來達成,不過這種製作方式對於不懂 LaTeX 的人來說,相當不方便。那是否有更方便的方法呢?

其實是有的,OpenOffice.org(以下簡稱 OOo) 目前已經支援 PDF 表單的製作了。OOo 的英文版目前最新版本是 2.2,而中文版則是 2.1。以中文版為例,要製作 PDF 表單,基本的步驟如下:
  1. 啟動 OpenOffice.org Writer
  2. 在 [檔案]->[開啟新檔] 中,選取『XML 表單文件』
  3. 使用提供的元件設計想要的表單。各個元件都有一些設定項目可以設定,只要 double click 該元件,就可以開啟設定視窗。設計完畢存檔。
  4. 使用 [檔案]->[匯出成 PDF...] 將 XML 表單轉換為 PDF 表單
就只要這幾個步驟,可直接填寫的 PDF 表單就完成了,而且中文的支援也沒有明顯的問題。各個元件也可以設定是否在列印時會被印出來,因此對於表單的列印輸出,也可以有不錯的控制。

OOo 實在是越來越強悍了,搭配蓬勃發展的其他各種自由軟體,使用電腦而不必被 MS 綁死的難度直線下降,尤其是對末端使用者來說,實在是一大福音。

7 則留言:

bbbush 提到...

是不是可以说多一点怎么做表单…… 老外用了很多年的功能,很少有中文文档。

Shang-Feng Yang 提到...

有關用 OOo 製作表單的方式,依照文章中提到的步驟去操作,就可以製作成功。至於透過 LaTeX 製作表單,這比較複雜,也不是三言兩語就可以說清楚的。有興趣的話,請參考 LaTeX 的 hyperref package 的相關文件,例如 TUG 上的 hyperref 手冊

jay 提到...

您好:
最近也在找OO.o如何製作表單!!
請問一下,可否有詳細的表單製作過程?
目前想連上DB抓些資料到表單當作選項,不知道該怎麼下手?

Shang-Feng Yang 提到...

如果你的資料庫是使用 OOo base 建立的話,在建立 XML 表單時,應該可以選擇『資料來源』,透過資料來源應該就可以從 .odb 檔案中抽取資料來建立選項。不過如果資料庫來源是其他資料庫系統的話,那可能要透過 odbc 去存取。

至於 PDF 表單,我沒有仔細研究過 PDF 的規格,但是 PDF 表單應該是提供離線填寫用的,因此 PDF 表單我想可能無法做即時資料庫查詢來動態建立選項。

Unknown 提到...

您好:
我是參照http://forge.mysql.com/wiki/Connector_OpenOffice這篇文章,的確可以連上mysql並且產生一個base的DB.
我是想使用calc或writer來做一個表單,不過遇到一些問題,我利用表單控制項,拉出一個ComboBox,可以撈到某個我要的資料,但是當我再做第二個ComboBox,我希望做到假設第一個欄位我選擇jay,第二個欄位就可以帶出jay的Email,不知道這是要透過巨集來寫還是怎樣?
而請表單控制項裡面有很多參數不是很懂,例如如何選擇兩個Table過濾出想要的值...等!
我想做出類似網頁可以選擇DB裡面資料那種感覺,但在OOO上面好像不太一樣.
麻煩您了...小弟也對OOO與opensource有興趣可以跟您討教一下.
http://jayclub.no-ip.org

Shang-Feng Yang 提到...

Hello,

我沒有實際試過透過 ODBC/JDBC 或其他的 connector 從其他 RDBMS 撈資料到 OOo 過,不過依照你說想要達到的效果,似乎是要透過巨集才做得到,不過我沒有實際試過,不能很明確告訴你要怎麼做,要找時間實際測試過才行。

不過我想說的是,如果你的最終目的是輸出成 PDF 表單的話,那即使你用 OOo 建立的表單可以即時從 MySQL 資料庫讀取資料產生表單選項,同樣的效果很可能沒辦法用 PDF 達成。此外,PDF 雖然允許內嵌 JavaScript (不過據說 DOM 和一般 webpage 用的差很多),但我不確定 OOo 把 XML 表單匯出為 PDF 時會自動轉換巨集成相對應的 JavaScript。即使 OOo 真的做轉換了,但是 PDF 表單『恐怕』沒辦法即時從 MySQL 資料庫撈資料,所有資料可能要在匯出成 PDF 前先由 MySQL 資料庫取出並內嵌於 XML 表單中。說『恐怕』是因為我沒有實際試過,不敢打包票。

關於 PDF 的內嵌 JavaScript 的部分,有興趣的話可以看看『LaTeX的時鐘』的這個討論串,果正兄有提供一些連結可以參考看看。

jay 提到...

恩...
感謝您熱心回覆....
其實我只是想用在write或是calc,用來做從資料庫抓一些資料完成一個表單,除非固定了不再編輯才轉成PDF,所以想了解一下,google一下對於OO.o的資源不算多(就我想要知道的部分)
有機會一起研究看看吧,還盼您能指導一下!