2011年3月30日

利用PHP產生writer odt檔

之前使用過學務系統中的函數產生odt文書報表,但之前的報表中都只有文字內容一直以來都可以順利產生所要的報表。從來也沒想過要在報表上加上相片…總算被我碰到了,要怎樣在odt檔中加入相片?

試了好幾天沒有進度,好吧聯絡請教了hami老師。hami 老師二話不說馬上幫忙解惑幫我改寫了相關程式碼,不但讓我可以解決我的需求也讓我多學了幾招。這兩天自已好好研究了hami老師修改的程式碼我發現又有新的解法,我的解決方法可以跳脫樣板的限制,改用外部相片插入報表。

我現在的做法是這樣的:
  1. 使用libreoffice設計好使用的樣板,在文件中安排的相片上快點兩下,在類型 / 圖定標記 項目中將其設定為當做字元。
  2. 將設計好的odt檔解壓縮,修改解壓縮後META-INF資料匣中的manifest.xml檔,將其中記錄圖檔路徑的那一行(manifest:file-entry manifest:media-type="image/jpeg" manifest:full-path="Pictures/10000000000000660000006A129905F2.jpg"/)刪掉,這一行是用來記錄圖檔儲存位置。
  3. 將解壓後的Pictures資料匣中的圖檔刪除,因為之後我們要用的是外部資料匣中的圖片所以留著也沒用。
  4. 修改content.xml,搜尋Pictures字串將Pictures/1…006A129905F2.jpg取代為變數 {photo}
  5. 有關圖檔的部份就準備就緒了,剩下來的就是組合我們要的{photo}變數,弄個圖片的url給{photo}變數,這樣在產生odt檔時就會把圖檔帶進去了。
  6. 這樣做有個風險就是下載下來的odt檔的圖片會採用連結的方式連到遠方的網站,如果網路有問題圖片也就跟著出不來。我變通的做法是,如果要永久保存這個檔案的話就把他另存為pdf一勞永逸。

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。