:::

9. 輸出Word檔及圖片檔

一、 關於phpWord(http://phpword.codeplex.com)

  1. PHPWord和PHPExcel是同一個單位所寫出的PHP物件,可用來產生docx檔。
  2. 需要的環境如下:PHP 5.2.x 以上、ZipArchive、xmllib等PHP衍生函式庫
  3. 若是您的Office是2007以下,那麼可能需要Microsoft Office Compatibility Pack(http://www.microsoft.com/zh-tw/download/details.aspx?id=3)才能開啟之(共37.2MB)。PHPWord無法產生2003的doc檔(因為非公開格式)。
  4. 建立一個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');

     

  5. 若有用到長度,其單位為twip,1twip=1/1440英吋,1 cm=0.4 in=576 twip
  6. 一些預設及建立頁面設定功能
    $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
  7. 新增標題($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(背景色)
  8. 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';

     

  9. 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';

     

  10. 新增文字及相關文字設定
    $paragraphStyle=array('align' => 'both', 'spaceAfter'=>300);  //段落設定
    $section->addText('內容', $fontStyle, $paragraphStyle);  //新增文字段落

     

    • (1)  可用段落設定:align、spaceBefore、spaceAfter、spacing
  11. 換行及換頁
    $section->addTextBreak(2); //換行,可指定換幾行
    $section->addPageBreak();  //換頁

     

  12. 插入連結和圖片,$style 可用設定:width、height、align,單位為px
    $section->addLink( $linkSrc, $linkName, $fontStyle, $paragraphStyle); //加入連結
    $section->addImage( $src, $style ); //插入圖片

     

  13. 插入有序或無序清單, 設定有序(TYPE_NUMBER)或無序(TYPE_BULLET_FILLED)清單,$depth為階層,從0開始。
    $listStyle = array('listType' => PHPWord_Style_ListItem::TYPE_NUMBER);
    $section->addListItem( $text, $depth, $fontStyle, $listStyle, $paragraphStyle ); //新增清單項目

     

  14. 插入表格
    $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
  15. 垂直合併除存格
    $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

     

  16. 水平合併儲存格

    $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

     

二、 無中生有產生圖片

  1. 使用PHP中GD函式庫:http://php.net/manual/en/ref.image.php
  2. 基本產生圖檔方法:
    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) //釋放記憶體
  3. 產生透明背景
    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 $顏色設定 )//填滿顏色
  4. 產生文字(各式字體練習素材: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+字尺寸」
  5. 製作縮圖(或加入為背景圖):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 $來源高) //縮放圖檔並產生新圖,若是不想讓底圖變形,來源寬和來源高可以指定成和目的寬、目的高一致,這樣就只會擷取局部,而不會使之變形。

:::

搜尋

QR Code 區塊

https%3A%2F%2Fwww.tad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D39%26tbdsn%3D1211

書籍目錄

展開 | 闔起

線上使用者

57人線上 (38人在瀏覽線上書籍)

會員: 0

訪客: 57

更多…