:::

9-5 word.php

<?php
include "header.php";
require_once XOOPS_ROOT_PATH . '/modules/tadtools/vendor/autoload.php';
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$phpWord->setDefaultFontName('標楷體'); //設定預設字型
$phpWord->setDefaultFontSize(9); //設定預設字型大小

$sectionStyle = array(
    // 'orientation'        => 'portrait', //landscape(橫);portrait(直)
    'marginTop'          => \PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5),
    'marginLeft'          => \PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5),
    'marginRight'          => \PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5),
    'marginBottom'          => \PhpOffice\PhpWord\Shared\Converter::cmToTwip(2.5),
    // 'colsNum'            => 2, //幾欄
    // 'pageNumberingStart' => 1, //第幾頁
    // 'borderTopSize'      => 2, //上邊框
    // 'borderTopColor'     => '0000FF', //上邊框顏色
    // 'lineNumbering'      => array('start' => 1, 'increment' => 1), //行號設定
);
$section = $phpWord->addSection($sectionStyle); //建立一個區域

$sn=(int)$_GET['sn'];
if($sn){
    $filename=snews_word($sn);
}else{
    $filename=snews_word_list();
}


// $cellStyle      = array('bgColor' => 'ffffff'); //正常格子
// $cellRowSpan  = array('vMerge' => 'restart'); //垂直合併
// $cellContinue = array('vMerge' => 'continue'); //略過
// $cellColSpan  = array('gridSpan' => 2); //水平合併
// $tableStyle = array('borderColor' => '000000', 'borderSize' => 6, 'cellMargin' => 80);

// $table      = $section->addTable($tableStyle);
// $table->addRow();
// $table->addCell(2000, $cellColSpan)->addText('A');
// $table->addCell(1000, $cellRowSpan)->addText('B');

// $table->addRow();
// $table->addCell(1000, $cellRowSpan)->addText('C');
// $table->addCell(1000, $cellStyle)->addText('D');
// $table->addCell(1000, $cellContinue);

// $table->addRow();
// $table->addCell(1000, $cellContinue);
// $table->addCell(2000, $cellColSpan)->addText('E');


$filename  = iconv("UTF-8", "Big5", $filename);

if($_GET['type']=="odt"){
    //輸出 odt
    $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'ODText');
    header('Content-Type: application/vnd.oasis.opendocument.text');
    header("Content-Disposition: attachment;filename={$filename}.odt");
}else{
    //輸出 docx
    $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');


function snews_word($sn){
    global $xoopsDB, $section,$phpWord;
    $myts = MyTextSanitizer::getInstance();

    $tbl    = $xoopsDB->prefix('snews');
    $sql    = "SELECT * FROM `$tbl` WHERE `sn` = '{$sn}'";
    $result = $xoopsDB->query($sql) or web_error($sql);
    $snews  = $xoopsDB->fetchArray($result);

    // $content  = $myts->displayTarea($snews['content'], 1, 0, 0, 0, 0);
    $word_title= $myts->htmlSpecialChars($snews['title']);
    $username = $myts->htmlSpecialChars($snews['username']);

    $fontStyle      = array('color' => '000000', 'size' => 24, 'bold' => true);
    $paragraphStyle = array('align' => 'center', 'valign' => 'center','spaceAfter'=>500);
    $phpWord->addTitleStyle(1, $fontStyle, $paragraphStyle); //設定標題N樣式
    $section->addTitle( $word_title, 1 ); //新增標題
    

    $fontStyle      = array('color' => '000000', 'size' => 14, 'bold' => false);
    $paragraphStyle = array('align' => 'center');
    $section->addText($username, $fontStyle, $paragraphStyle);

    $fontStyle      = array('color' => '000000', 'size' => 12, 'bold' => false);
    $paragraphStyle = array('align' => 'both');
    
    $images=linkExtractor($snews['content']);
    $snews['content']=replace_images($snews['content']);

    $content = strip_tags($snews['content']);
    $contents = explode("\n",$content);

    $i=0;
    // die(var_export($contents));
    foreach($contents as $content){
        // $content = str_replace(array("\n", "\r", "&nbsp;"), '', strip_tags($content));
        if(strpos($content,'巷談集圖片')!==false){
            $style=array('width'=>600);
            $section->addImage( $images[$i], $style );
            $i++;
        }else{
            $content = $myts->htmlSpecialChars($content);
            $section->addText($content, $fontStyle, $paragraphStyle);
        }
    }

    $word_title= str_replace(array(" "), '' , $word_title);
    return $word_title;
}

function snews_word_list(){
    global $xoopsDB, $section,$phpWord;
    $topic['1'] = '街巷故事';
    $topic['2'] = '市井觀點';
    $topic['3'] = '私房知識塾';

    $word_title="所有文章";
    $fontStyle      = array('color' => '000000', 'size' => 24, 'bold' => true);
    $paragraphStyle = array('align' => 'center', 'valign' => 'center','spaceAfter'=>500);
    $phpWord->addTitleStyle(1, $fontStyle, $paragraphStyle); //設定標題N樣式
    $section->addTitle( $word_title, 1 ); //新增標題

    $tableStyle = array('borderColor' => '000000', 'borderSize' => 6, 'cellMargin' => 80);
    $table      = $section->addTable($tableStyle);

    $rowStyle   = array('cantSplit' => true, 'tblHeader' => true);
    $table->addRow(10, $rowStyle);

    $cellStyle      = array('bgColor' => 'CFCFCF');
    $fontStyle      = array('size' => 12, 'bold' => true);
    $paragraphStyle = array('alignment' => \PhpOffice\PhpWord\SimpleType\Jc::CENTER);
    $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(2), $cellStyle)->addText('分類', $fontStyle, $paragraphStyle);
    $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText('日期', $fontStyle, $paragraphStyle);
    $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(6), $cellStyle)->addText('標題', $fontStyle, $paragraphStyle);
    $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText('作者', $fontStyle, $paragraphStyle);

    $myts = MyTextSanitizer::getInstance();

    $tbl = $xoopsDB->prefix('snews');
    $sql = "SELECT * FROM `$tbl` ORDER BY `topic_sn`, `update_time` DESC";
    $result = $xoopsDB->query($sql) or web_error($sql);
 
    $cellStyle      = array('bgColor' => 'FFFFFF');
    $fontStyle      = array('size' => 12, 'bold' => false);

    $cellRowSpan  = array('vMerge' => 'restart'); //垂直合併
    $cellContinue = array('vMerge' => 'continue'); //略過
    $cellColSpan  = array('gridSpan' => 2); //水平合併

    $old_topic_sn = '';
    while ($snews = $xoopsDB->fetchArray($result)) {
        $topic_sn=$snews['topic_sn'];
        $snews['update_time']    = $myts->htmlSpecialChars($snews['update_time']);
        $snews['title']    = $myts->htmlSpecialChars($snews['title']);
        $snews['username'] = $myts->htmlSpecialChars($snews['username']);

        if($topic_sn != $old_topic_sn){
            $topicStyle = $cellRowSpan;
        }else{
            $topicStyle =$cellContinue;
        }
        $old_topic_sn=$topic_sn;

        $table->addRow(10, $rowStyle);
    
        $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(2), $topicStyle)->addText($topic[$topic_sn], $fontStyle);
        $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText($snews['update_time'], $fontStyle);
        $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(6), $cellStyle)->addText($snews['title'], $fontStyle);
        $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText($snews['username'], $fontStyle);

        // $all_news[$topic_sn][]=$snews;
    }


    // foreach($all_news as $topic_sn=>$topic_snews){
    //     $i=0;
    //     foreach($topic_snews as $snews){
    //         $table->addRow(10, $rowStyle);

    //         $topicStyle = $i?$cellContinue:$cellRowSpan;

    //         $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(2), $topicStyle)->addText($topic[$topic_sn], $fontStyle);
    //         $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText($snews['update_time'], $fontStyle);
    //         $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(6), $cellStyle)->addText($snews['title'], $fontStyle);
    //         $table->addCell(\PhpOffice\PhpWord\Shared\Converter::cmToTwip(4), $cellStyle)->addText($snews['username'], $fontStyle);
    //         $i++;
    //     }
    // }
    
    return $word_title;
}

//從網頁語法中抓出圖片連結的函數
function linkExtractor($html){
    $linkArray = array();
    if (preg_match_all('/<img\s+.*?src=[\"\']?([^\"\' >]*)[\"\']?[^>]*>/i', $html, $matches, PREG_SET_ORDER)) {
        foreach ($matches as $match) {
            array_push($linkArray, $match[1]);
        }
    }
    return $linkArray;
}
//將網頁語法中的圖片語法取代為自訂文字,
function replace_images($html){
    $html = preg_replace('/<img\s+.*?src=[\"\']?([^\"\' >]*)[\"\']?[^>]*>/i', '巷談集圖片', $html);
    return $html;
}

 


:::

搜尋

QR Code 區塊

https%3A%2F%2Ftad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1503%26tbsn%3D44

書籍目錄

展開 | 闔起

線上使用者

29人線上 (13人在瀏覽線上書籍)

會員: 0

訪客: 29

更多…