2019年1月27日 星期日

tbszip用法

由於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的一致性,要將兩者的函數(方法) 統一。



沒有留言:

張貼留言