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一勞永逸。

2011年3月29日

PHP函數 str_replace

string str_replace (string needle, string str, string haystack)
回傳字串
將字串haystack中的needle字串取代為str字串

$bodytag = str_replace ("body", "black", "body text=body");
echo '$bodytag='.$bodytag;
輸出結果:$bodytag=black text=black

2011年3月9日

Postgresql中的sum函數

在sql中看似簡單的sum函數到了Postgresql卻發生了一些狀況,而且到現在我還沒發現到底那邊出了問題,怎麼看都覺得原來不能執行的句子跟現行可運作的句子都是一樣的,後來我是這樣決解的
$query="SELECT sum(agday) AS day FROM agent_tbl GROUP BY pid HAVING pid='$_GET[pid]'";
$sql =pg_query($query) or die($query);
$row =pg_fetch_array($sql);
echo $row[agday];
後來我發現了在AS day的地方改為AS DAY大寫就會出錯算不出來,這大概是我自已觀念不清楚造成的

2011年3月7日

在phppgadmin中匯入CSV資料

在phppgadmin可以很方便使用匯入的功能將CSV格式的資料匯進資料表,但我發現他不會同步更新主鍵的序列數,當我新增資料表並匯入800筆資料後,主鍵的序列數還是停在1的位置,並沒有跟著新增到800,這樣會造成後續資料表讀寫錯誤。
目前我不知道怎麼同步解決這個問題,只能在匯入資料後到序列數選項選取對應主鍵設定其序列數值,這樣資料表就可以正確運作。

2011年3月2日

指定文字顏色

指定文字顏色
<span style="color: #bd211f;">█</span>