PHP+匯出word功能實現
阿新 • • 發佈:2019-02-06
基於專案需求,匯出word檔案。
此功能實現是基於ThinkPHP框架,需要引入一個原生的php檔案word.class.php,將此引入:如圖目錄之下:
專案名稱/Application/Common/Common/word.class.php
如圖中所示的function.php中任何函式方法,在框架內控制器中都可以直接呼叫,所以,在function.php中引入word.class.php,並呼叫此類,生成word檔案程式碼
include_once("word.class.php");
function getWordDocument($content, $absolutePath = "", $isEraseLink = true) {
$mht = new MhtFileMaker();
if ($isEraseLink)
$content = preg_replace('/<a\s*.*?\s*>(\s*.*?\s*)<\/a>/i', '$1', $content); //去掉連結
$images = array();
$files = array();
$matches = array();
//這個演算法要求src後的屬性值必須使用引號括起來
if (preg_match_all('/<img[.\n]*?src\s*?=\s*?[\"\'](.*?)[\"\'](.*?)\/>/i', $content, $matches)) {
$arrPath = $matches[1];
for ($i = 0; $i < count($arrPath); $i++) {
$path = $arrPath[$i];
$imgPath = trim($path);
if ($imgPath != "") {
$files[] = $imgPath;
if (substr($imgPath, 0, 7) == 'http://') {
//絕對連結,不加字首
} else {
$imgPath = $absolutePath . $imgPath;
}
$images[] = $imgPath;
}
}
}
$mht->AddContents("tmp.html", $mht->GetMimeType("tmp.html"), $content);
for ($i = 0; $i < count($images); $i++) {
$image = $images[$i];
if (@fopen($image, 'r')) {
$imgcontent = @file_get_contents($image);
if ($content)
$mht->AddContents($files[$i], $mht->GetMimeType($image), $imgcontent);
}
else {
echo "file:" . $image . " not exist!<br />";
}
}
return $mht->GetFile();
}
function WordBirth($applyid,$username,$context){
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
$id = rand(1, 527);
//$wordStr = file_get_contents("http://www.sucaihuo.com/js/" . $id . ".html");
$fileContent = getWordDocument($context);
$fileName = iconv("utf-8", "GBK", '協議' . '_' . $applyid . '_' .$username);
header("Content-Type: application/doc");
header("Content-Disposition: attachment; filename=" . $fileName . ".doc");
echo $fileContent;
}
最終在框架中呼叫此方法WordBirth,就可以達到生成word的目的
溫馨提示:關於word.class.php,已上傳我的資源庫。