)才能開啟之。PHPWord無法產生2003的doc檔(因為非公開格式)。
6. 建立一個word檔的基本結構如下: ```
require_once XOOPS_ROOT_PATH . '/modules/tadtools/vendor/autoload.php';
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$filename = iconv("UTF-8", "Big5", $filename);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007');
header('Content-Type: application/vnd.ms-word');
header("Content-Disposition: attachment;filename={$filename}.docx");
header('Cache-Control: max-age=0');
$objWriter->save('php://output');
```
7. 亦可輸出成開放格式odt檔 ```
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'ODText');
header('Content-Type: application/vnd.oasis.opendocument.text');
header("Content-Disposition: attachment;filename={$filename}.odt");
```
8. 一些預設及建立頁面、設定頁面邊界功能 ```
$phpWord->setDefaultFontName('標楷體'); //設定預設字型
$phpWord->setDefaultFontSize(9); //設定預設字型大小
```
9. 設定頁面邊界功能並新增編輯區域 ```
$sectionStyle = array(
'orientation' => 'portrait', //landscape(橫);portrait(直)
'marginTop' => 1133.858268, //上邊界 2cm*566.929134
'colsNum' => 2, //幾欄
'pageNumberingStart' => 1, //第幾頁
'borderTopSize' => 2, //上邊框
'borderTopColor' => '0000FF', //上邊框顏色
'lineNumbering' => array('start' => 1, 'increment' => 1), //行號設定
);
$section = $phpWord->addSection($sectionStyle); //建立一個區域
```
- (1) 樣式參數可參考:
- (2) 其中有方向性的分別還有Top、Bottom、Left、Right,自行新增或修改即可。
- (3) 若有用到長度,其單位為twip,1 cm = 566.929134 twip,1 twip = 0.001764 cm,亦可用底下方式將公分轉換為twip ```
\PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5)
```
### 二、 phpword的各種元件
1. 可用元件可參考:
2. 新增文字及相關文字設定,可用設定詳細請看 ```
$fontStyle = array('color' => '000000', 'size' => 10, 'bold' => false);
$paragraphStyle = array('align' => 'both', 'valign' => 'center');
$section->addText($title, $fontStyle, $paragraphStyle);
$textrun = $section->addTextRun($paragraphStyle);
```
- (1) `addTextRun()`用來將同一段落中的文字,分別套用不同文字設定,為物件。
3. 新增標題(`$depth` 是指標題N) ```
$phpWord->addTitleStyle( $depth, $fontStyle, $paragraphStyle); //設定標題N樣式
$section->addTitle( '標題文字', $depth ); //新增標題
```
4. 換行及換頁 ```
$section->addTextBreak(2, $fontStyle, $paragraphStyle); //換行,可指定換幾行
$section->addPageBreak(); //換頁
```
5. 插入連結和圖片,`$style` 可用設定:`width`、`height`、`align`,單位為px ```
$section->addLink( $linkSrc, $linkName, $fontStyle, $paragraphStyle); //加入連結
$section->addImage( $src, $style ); //插入圖片
```
6. 若要將HTML轉為word檔,圖檔部份會用到的函數: ```
//從網頁語法中抓出圖片連結的函數
function linkExtractor($html){
$linkArray = array();
if (preg_match_all('/]*)[\"\']?[^>]*>/i', $html, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
array_push($linkArray, $match[1]);
}
}
return $linkArray;
}
//將網頁語法中的圖片語法取代為自訂文字,
function replace_images($html){
$html = preg_replace('/]*)[\"\']?[^>]*>/i', '圖片', $html);
return $html;
}
```
- (1) preg系列函數,支援的是Perl-Compatible Regular Expression(PCRE) 表達示
- (2) 關於正規表達式的用法可參考:
- (3) 想要練習或測試可利用此工具:
7. 插入有序或無序清單, 設定有序(`TYPE_NUMBER`)或無序(`TYPE_BULLET_FILLED`)清單,`$depth`為階層,從`0`開始。 ```
$listStyle = array('listType' => PHPWord_Style_ListItem::TYPE_NUMBER);
$section->addListItem( $text, $depth, $fontStyle, $listStyle, $paragraphStyle );
```
### 三、 表格
1. 建立表格 ```
$tableStyle = array('borderColor' => '000000', 'borderSize' => 6, 'cellMargin' => 80);
$table = $section->addTable($tableStyle);
```
2. 建立一個橫列 ```
$rowStyle = array('cantSplit' => true, 'tblHeader' => true);
$table->addRow(10, $rowStyle);
```
3. 建立儲存格 ```
$cellStyle = array('bgColor' => 'CFCFCF');
$fontStyle = array('size' => 12, 'bold' => true);
$paragraphStyle = array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER);
$table->addCell(2000, $cellStyle)->addText('分類', $fontStyle, $paragraphStyle);
```
4. 合併儲存格(套用不同儲存格樣式即可達成) ```
$cellRowSpan = array('vMerge' => 'restart'); //垂直合併
$cellContinue = array('vMerge' => 'continue'); //略過
$cellColSpan = array('gridSpan' => 2); //水平合併
```
### 四、 頁首頁尾
1. 加入頁首或頁尾 ```
//$header = $section->addHeader(); //頁首
$footer = $section->addFooter(); //頁尾
$footer->addPreserveText('{PAGE} / {NUMPAGES}', $fontStyle, $paragraphStyle);
```
### 五、 用pclzip壓縮及解壓縮
1. 官網:
2. 請下載解壓後,將`pclzip.lib.php`複製到class目錄下
3. 將多個目錄壓縮(亦可單一目錄) ```
create($bak_dir, PCLZIP_OPT_REMOVE_PATH, $remove_path);
if ($zip_list == 0) {
die("Error : " . $zipfile->errorInfo(true));
} else {
header("location: {$bak_file_url}");
exit;
}
```
- (1) 需要修改的部份僅有`$bak_dir`(可用字串或陣列),亦即需要加入壓縮檔的目錄或檔案
- (2) `$remove_path`意思是去掉壓縮檔中的路徑,避免解壓縮後會有好幾層目錄
- (3) `$bak_file`是壓縮檔要存放的主機實體位置
- (4) `$bak_file_url`是壓縮檔的下載網址,壓縮完可以直接下載。
4. 將上傳的zip檔解壓縮(上傳表單的`name='zipfile'`) ```
$extract_path = XOOPS_ROOT_PATH . "/uploads/";
$decompress = new PclZip($_FILES['zipfile']['tmp_name']);
$decompress->extract($extract_path);
```
- (1) 一樣要先引入`pclzip.lib.php` 物件檔
- (2) 直接從表單上傳的暫存檔案(`$_FILES['zipfile']['tmp_name']`)解壓縮
- (3) `$extract_path`是設定要解壓縮的實體路徑
### [六、下載最後的模組完整包](https://www.tad0616.net/uploads/tad_book3/file/44/snews_9.zip)