[1042] XOOPS模組開發進階
一、 關於phpWord(http://phpword.codeplex.com)
- PHPWord和PHPExcel是同一個單位所寫出的PHP物件,可用來產生docx檔。
- 需要的環境如下:PHP 5.2.x 以上、ZipArchive、xmllib等PHP衍生函式庫
- 若是您的Office是2007以下,那麼可能需要Microsoft Office Compatibility Pack(http://www.microsoft.com/zh-tw/download/details.aspx?id=3)才能開啟之(共37.2MB)。PHPWord無法產生2003的doc檔(因為非公開格式)。
- 建立一個word檔的基本結構如下:
<?php
include_once "header.php";
require_once TADTOOLS_PATH . "/PHPWord.php";
$PHPWord = new PHPWord();
//內容設定
header('Content-Type: application/vnd.ms-word');
header('Content-Disposition: attachment;filename=通訊錄.docx');
header('Cache-Control: max-age=0');
$objWriter = PHPWord_IOFactory::createWriter($PHPWord, 'Word2007');
$objWriter->save('php://output');
- 若有用到長度,其單位為twip,1twip=1/1440英吋,1 cm=0.4 in=576 twip
- 一些預設及建立頁面設定功能
$PHPWord->setDefaultFontName('微軟正黑體'); //設定預設字型
$PHPWord->setDefaultFontSize(10); //設定預設字型大小
$sectionStyle = array('orientation' => null, 'marginLeft' => 900); //頁面設定
$section = $PHPWord->createSection($sectionStyle); //建立一個頁面
- (1) orientation 的值可以是橫向landscape或直向portrait。設定項目有:orientation、 marginTop、marginLeft、marginRight、marginBottom、borderTopSize、borderTopColor、borderLeftSize、borderLeftColor、borderRightSize、borderRightColor、borderBottomSize、borderBottomColor
- 新增標題($titleCount 是指標題N,$depth會對應$titleCount)
$fontStyle = array('color'=>'006699', 'size'=>18, 'bold'=>true); //文字樣式設定
$PHPWord->addTitleStyle( $titleCount, $fontStyle, $styleParagraph); //設定標題樣式
$section->addTitle( '通訊錄', $depth ); //新增標題
- (1) 可用的文字設定:size(文字大小)、name(字型)、bold(粗體)、italic(斜體)、superScript(上標)、subScript(下標)、 underline(底線)、strikethrough(刪除線)、Color(文字顏色)、fgColor(背景色)
- underline 底線可用的常數:
PHPWord_Style_Font::UNDERLINE_NONE = 'none';
PHPWord_Style_Font::UNDERLINE_DASH = 'dash';
PHPWord_Style_Font::UNDERLINE_DASHHEAVY = 'dashHeavy';
PHPWord_Style_Font::UNDERLINE_DASHLONG = 'dashLong';
PHPWord_Style_Font::UNDERLINE_DASHLONGHEAVY = 'dashLongHeavy';
PHPWord_Style_Font::UNDERLINE_DOUBLE = 'dbl';
PHPWord_Style_Font::UNDERLINE_DOTHASH = 'dotDash';
PHPWord_Style_Font::UNDERLINE_DOTHASHHEAVY = 'dotDashHeavy';
PHPWord_Style_Font::UNDERLINE_DOTDOTDASH = 'dotDotDash';
PHPWord_Style_Font::UNDERLINE_DOTDOTDASHHEAVY = 'dotDotDashHeavy';
PHPWord_Style_Font::UNDERLINE_DOTTED = 'dotted';
PHPWord_Style_Font::UNDERLINE_DOTTEDHEAVY = 'dottedHeavy';
PHPWord_Style_Font::UNDERLINE_HEAVY = 'heavy';
PHPWord_Style_Font::UNDERLINE_SINGLE = 'single';
PHPWord_Style_Font::UNDERLINE_WAVY = 'wavy';
PHPWord_Style_Font::UNDERLINE_WAVYDOUBLE = 'wavyDbl';
PHPWord_Style_Font::UNDERLINE_WAVYHEAVY = 'wavyHeavy';
PHPWord_Style_Font::UNDERLINE_WORDS = 'words';
- fgColor 背景色可用的常數
PHPWord_Style_Font::FGCOLOR_YELLOW = 'yellow';
PHPWord_Style_Font::FGCOLOR_LIGHTGREEN = 'green';
PHPWord_Style_Font::FGCOLOR_CYAN = 'cyan';
PHPWord_Style_Font::FGCOLOR_MAGENTA = 'magenta';
PHPWord_Style_Font::FGCOLOR_BLUE = 'blue';
PHPWord_Style_Font::FGCOLOR_RED = 'red';
PHPWord_Style_Font::FGCOLOR_DARKBLUE = 'darkBlue';
PHPWord_Style_Font::FGCOLOR_DARKCYAN = 'darkCyan';
PHPWord_Style_Font::FGCOLOR_DARKGREEN = 'darkGreen';
PHPWord_Style_Font::FGCOLOR_DARKMAGENTA = 'darkMagenta';
PHPWord_Style_Font::FGCOLOR_DARKRED = 'darkRed';
PHPWord_Style_Font::FGCOLOR_DARKYELLOW = 'darkYellow';
PHPWord_Style_Font::FGCOLOR_DARKGRAY = 'darkGray';
PHPWord_Style_Font::FGCOLOR_LIGHTGRAY = 'lightGray';
PHPWord_Style_Font::FGCOLOR_BLACK = 'black';
- 新增文字及相關文字設定
$paragraphStyle=array('align' => 'both', 'spaceAfter'=>300); //段落設定
$section->addText('內容', $fontStyle, $paragraphStyle); //新增文字段落
- (1) 可用段落設定:align、spaceBefore、spaceAfter、spacing
- 換行及換頁
$section->addTextBreak(2); //換行,可指定換幾行
$section->addPageBreak(); //換頁
- 插入連結和圖片,$style 可用設定:width、height、align,單位為px
$section->addLink( $linkSrc, $linkName, $fontStyle, $paragraphStyle); //加入連結
$section->addImage( $src, $style ); //插入圖片
- 插入有序或無序清單, 設定有序(TYPE_NUMBER)或無序(TYPE_BULLET_FILLED)清單,$depth為階層,從0開始。
$listStyle = array('listType' => PHPWord_Style_ListItem::TYPE_NUMBER);
$section->addListItem( $text, $depth, $fontStyle, $listStyle, $paragraphStyle ); //新增清單項目
- 插入表格
$styleTable=array('borderColor' => '006699', 'borderSize' => 6, 'cellMargin' => 50); //表格樣式
$styleFirstRow = array('bgColor' => '66BBFF'); //首行樣式
$PHPWord->addTableStyle('myTable', $styleTable, $styleFirstRow); //建立表格樣式
$table = $section->addTable('myTable'); //建立表格
$cellStyle = array('textDirection' => PHPWord_Style_Cell::TEXT_DIR_BTLR, 'bgColor' => 'C0C0C0'); //儲存格樣式
$table->addRow(); //新增一列
$table->addCell(2000, [$cellStyle])->addText('內容'); //新增一格
- (1) 表格可用設定:cellMarginTop、cellMarginLeft、cellMarginRight、cellMarginBottom、cellMargin、bgColor、borderTopSize、borderTopColor、borderLeftSize、borderLeftColor、borderRightSize、borderRightColor、borderBottomSize、borderBottomColor、borderInsideHSize、borderInsideHColor、borderInsideVSize、borderInsideVColor、borderSize、borderColor
- (2) 儲存格可用設定:valign、textDirection、bgColor、borderTopSize、borderTopColor、borderLeftSize、borderLeftColor、borderRightSize、borderRightColor、borderBottomSize、borderBottomColor
- 垂直合併除存格
$table = $section->addTable();
$table->addRow();
$table->addCell(100,array('vMerge' => 'restart'))->addText('1');
$table->addCell(100)->addText('2');
$table->addRow();
$table->addCell(100,array('vMerge' => 'fusion'));
$table->addCell(100)->addText('3');
看起來會像這樣:
1 2 3 -
水平合併儲存格
$table = $section->addTable(); $table->addRow(); $table->addCell(100,array('gridSpan' => '2'))->addText('1'); $table->addRow(); $table->addCell(100)->addText('2'); $table->addCell(100)->addText('3');看起來會像這樣:
1 2 3
- 使用PHP中GD函式庫:http://php.net/manual/en/ref.image.php
- 基本產生圖檔方法:
header("Content-type: image/png");
$im = @imagecreatetruecolor(400, 100) or die("無法建立GD圖片");
imagepng($im, XOOPS_ROOT_PATH . "/uploads/{$sn}.png");
imagedestroy($im);
- (1) resource imagecreatetruecolor(int $寬 , int $高) //建立全彩畫布
- (2) bool imagepng(resource $im [, string $檔名 [, int $品質 [, int $濾鏡]]])//產生png
- (3) bool imagedestroy(resource $im) //釋放記憶體
- 產生透明背景
imagesavealpha($im, true);
$trans_colour = imagecolorallocatealpha($im, 255, 255, 255, 127);
imagefill($im, 0, 0, $trans_colour);
- (1) bool imagesavealpha ( resource $im , bool $是否保存alpha channel ) //透明色版
- (2) int imagecolorallocatealpha ( resource $ im , int $紅 , int $綠 , int $ 藍 , int $透明 )//設定含透明度的顏色,顏色值從1~255,透明值從0(不透明)~127(透明)
- (3) bool imagefill ( resource $im , int $x , int $y , int $顏色設定 )//填滿顏色
- 產生文字(各式字體練習素材:http://soft.aizhan.com/xtmh/ziti/)範例字型
$text_color = imagecolorallocatealpha($im, 0, 0, 0, 50);
$gd = gd_info();
if ($gd['JIS-mapped Japanese Font Support']) {
$name = iconv("UTF-8", "shift_jis", $name);
}
imagettftext($im, 20, 0, 0, 60, $text_color, "font.ttf", $name);
- (1) array gd_info ( void ) //用來取得GD函式庫的各種支援情形,若伺服器設定成支援日文編碼,那就必須進行文字的轉碼,以避免中文變成亂碼。
- (2) array imagettftext(resource $im , float $大小 , float $角度 , int $x , int $y , xint $顏色 , string $字型檔 , string $文字) //若要置中x大約是「(圖寬-字數x字尺寸x1.5)/2」,而y則是「(圖高-字尺寸)/2+字尺寸」
- 製作縮圖(或加入為背景圖):https://pixabay.com/
$bg_im = imagecreatefromjpeg("images/bg.jpg");
imagecopyresampled($im, $bg_im, 0, 0, 0, 0, 400, 100, 1024, 768);
- (1) resource imagecreatefromjpeg ( string $jpg圖檔來源 ) //讀入某張圖
- (2) bool imagecopyresampled(resource $目的 , resource $來源 , int $目的_x , int $目的_y , int $來源_x , int $來源_y , int $目的寬 , int $目的高 , int $來源寬 , int $來源高) //縮放圖檔並產生新圖,若是不想讓底圖變形,來源寬和來源高可以指定成和目的寬、目的高一致,這樣就只會擷取局部,而不會使之變形。