首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 生成 Word 文件三大方案:COM 元件、MHT 封裝與 HTML 直接輸出比較

     編輯:PHP 相關知識

前言

PHP 專案常需匯出 Word 報表、合約、證書。主流有三種方案:Windows COM 自動化、MHT (MIME HTML) 封裝、純 HTML 輸出並另存為 .doc。本文深度比較三者優劣與適用場景。

方案一:Windows COM 自動化 (word.application)

$word = new COM("word.application") or die("無法啟動 Word");
$word->Visible = 0;
$word->Documents->Add();
$word->Selection->TypeText("這是測試內容");
$word->Documents[1]->SaveAs("C:/temp/test.doc");
$word->Quit();
$word = null;
優點缺點
完整支援 Word 所有功能 (分頁、目錄、追蹤修訂)僅限 Windows Server + 安裝 Office
可精確控制版面、列印輸出需啟動 Word 進程,資源佔用大、速度慢、併發極差
無程式碼提示,開發體驗差;Office 版本升級易相容性問題

結論:不推薦用於 Web 生產環境,僅適合內部低頻批次腳本。

方案二:MHT (MIME HTML) 封裝 —— 含圖片、樣式完整封裝

原理:將 HTML + 所有外部資源 (圖片、CSS) 打包成單一 .mht 檔,副檔名改為 .doc,Word 可直接開啟並完整還原。

核心類 MhtFileMaker (摘要)

class MhtFileMaker {
    private $files = [], $boundary, $headers = [];
    public function AddContents($filepath, $mimetype, $content, $encoding='base64') { ... }
    public function GetFile() { ... } // 組裝 MIME multipart/related
    public function GetMimeType($filename) { ... }
}

使用流程

  1. 分析 HTML 中 <img src="...">,下載圖片二進位內容。
  2. 呼叫 AddContents 加入主 HTML 與各圖片資源。
  3. GetFile() 取得完整 MHT 內容,寫入 .doc 檔或直接輸出下載。
優點缺點
跨平台 (Linux/Windows 皆可)單次請求只能輸出一份 (Header 限制),難以批量生成多檔下載
圖片、樣式內嵌,離線可見需解析 HTML 下載資源,耗時;相對路徑處理易出錯
無需 Office 授權複雜 CSS (Flex/Grid) 在 Word 中渲染可能異常

方案三:純 HTML 輸出並另存為 .doc (最推薦 Web 方案)

原理:輸出帶有 Word 命名空間的 HTML,瀏覽器/Word 以 .doc 開啟時自動解析渲染。

class WordExporter {
    public function start() {
        ob_start();
        echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
              xmlns:w="urn:schemas-microsoft-com:office:word"
              xmlns="https://www.w3.org/TR/REC-html40">';
    }
    public function save($filename) {
        echo '</html>';
        $data = ob_get_clean();
        file_put_contents($filename, $data);
    }
}

// 批量生成範例
for ($i=1; $i<=3; $i++) {
    $exporter = new WordExporter();
    $exporter->start();
    echo "<h1>報表 $i</h1><p>內容...</p>";
    $exporter->save("report_$i.doc");
}
優點缺點
程式碼極簡、效能最高、支援批量生成圖片需為絕對 URL 或 base64 內嵌,否則離線斷圖
完整支援 HTML/CSS (Word 會盡力渲染)複雜版面 (分欄、頁碼、頁眉頁腳) 控制力弱
跨平台、無外部依賴非標準 .docx 格式,相容性視 Word 版本而定

綜合選型建議

場景推薦方案備註
內部低頻、需精確版面、Windows 伺服器COM啟用 DCOM 權限、設定互動式使用者
需離線完整保真 (含圖片)、單檔下載MHT資源下載耗時,注意相對路徑
Web 高併發、批量下載、主要文字/表格、圖片可用 CDN 絕對路徑HTML .doc最輕量、最穩定、易維護
現代專案、需標準 .docx、支援複雜樣式PhpOffice/PHPWordComposer 安裝,物件導向 API,生成真正 OOXML

總結

Web 環境下,HTML 輸出 .doc 是最務實的選擇:零依賴、高效能、批量友好。若需真正 .docx 格式與豐富排版功能,請直接使用 PHPWord (PhpOffice) 庫,避免自行造輪子。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved