由於Libreofffice 5.3 版以後無法讀取原來ooo 2.x版產生的writer 檔,必須找尋可以解讀Libreoffice 5.3以後的odt, ods檔案的zip處理程式。
tbszip 就是被選中。
tbszip 的來源 https://www.tinybutstrong.com/apps/tbszip/tbszip_help.html
新的ezTable使用tbszip (x_base/lib/tbszip.php),在這裡已經提過了
新版的ooo樣板處理規劃,先完成上傳和檢視tag的動作
更改了 sxsprint_class.php pr_person.php 和 view_tag.php
其中從 ooo 讀取 content.xml 的方式是
include_once(XOOPS_ROOT_PATH."/modules/x_base/lib/tbszip.php");
$zip = new clsTbsZip();
$zip->Open($path);
$buffer = $zip->FileRead('content.xml');
$zip->Close();
寫入 content.xml的方式是 (原地置換)
include_once(XOOPS_ROOT_PATH."/modules/x_base/lib/tbszip.php");
$zip = new clsTbsZip();
$zip->Open($path);
$zip->FileReplace('content.xml', $buffer, TBSZIP_STRING);
$zip->Flush(TBSZIP_FILE, $path.'.zip');
$zip->Close();
unlink($path);
rename($path.'.zip',$path);
置換後下載的方式是 (這種方式就可以匯出writer擋了)
include_once(XOOPS_ROOT_PATH."/modules/x_base/lib/tbszip.php");
$zip = new clsTbsZip();
$zip->Open($path);
$zip->FileReplace('content.xml', $buffer, TBSZIP_STRING);
$zip->Flush(TBSZIP_DOWNLOAD, $filename, 'application/vnd.oasis.opendocument.text');
$zip->Close();
成績單的處理也採用了,用法如下
include_once(XOOPS_ROOT_PATH."/modules/x_base/lib/tbszip.php");
$ttt = new clsTbsZip();
$ttt->Open($ooo_path.'.odt');
$data = $ttt->FileRead('content.xml');
接下來拆解 $data 為 $con_head, $con_body, $con_foot
其中$con_body是要不斷重複的部分
不斷重複多次後產生 $new_data
$replace = $con_head.$new_data.$con_foot
然後用
$ttt->FileReplace('content.xml',$replace_data, TBSZIP_STRING);
更新content.xml
接下來如有圖片就必須處理圖片
if ($ooo_pic['counter']>0) {
$uf = new myuploads();
$uf->readydir('tycx/stamp');
$uf->setpath('tycx/stamp');
$t_path = $uf->getpath() . '/';
for($ii=1;$ii<=$ooo_pic['counter'];$ii++) {
$ttt>FileAdd("Pictures/".$ooo_pic[$ii], $t_path.$ooo_pic[$ii], TBSZIP_FILE);
}
}
最後輸出串流檔案
$ttt->Flush(TBSZIP_DOWNLOAD, $filename, 'application/vnd.oasis.opendocument.text');
$ttt->Close();
考慮 sxs_ooo 和 tbszip的一致性,要將兩者的函數(方法) 統一。
沒有留言:
張貼留言