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

Linux 環境下 PHP 實現 Office 文件線上預覽:DOC → PDF → SWF 完整方案

     編輯:PHP 綜合知識

專案背景

OA 系統需求:文件一鍵上傳、線上預覽(類似百度文庫)。環境:CentOS 5.5,技術棧:OpenOffice 3 + Pdf2Swf + JODConverter + FlexPaper。

整體架構流程

  1. 用戶上傳 DOC/DOCX/XLS/PPT 等文件
  2. OpenOffice (JODConverter) 轉換為 PDF
  3. Pdf2Swf (SWFTools) 將 PDF 轉為 SWF
  4. FlexPaper 前端載入 SWF 實現線上閱讀

詳細安裝步驟

1. 安裝 OpenOffice 3.3

tar zxvf OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_zh-CN.tar.gz
cd RPMS
rpm -ivh *.rpm --nodeps --force

預設安裝至 /opt/openoffice.org3/。

2. 啟動 OpenOffice 無頭模式服務

/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

加入 /etc/rc.local 實現開機自啟。

3. 補充中文字體(解決亂碼)

將 Windows C:\Windows\Fonts\simhei.ttf(黑體)、simsun.ttc(宋體)複製至:

/opt/openoffice.org/basis3.3/share/fonts/truetype/

重啟 OpenOffice 服務生效。

4. 安裝 OpenOffice SDK 3.3

tar zxvf OOo-SDK_3.3.0_Linux_x86-64_install-rpm_en-US.tar.gz
cd OOO330_m20_native_packed-1_en-US.9567/RPMS/
rpm -ivh *.rpm

5. 安裝 JODConverter 2.2.2

# 解壓後直接使用 lib/jodconverter-cli-2.2.2.jar
java -jar /usr/local/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /tmp/1.doc /tmp/1.pdf

測試成功即完成 DOC→PDF 轉換環境。

6. 安裝 Pdf2Swf (SWFTools)

# 編譯安裝或使用 rpm
yum install swftools  # 若有可用源
# 或從源碼編譯(需 zlib、libjpeg、freetype 開發包)

轉換指令:

pdf2swf /tmp/1.pdf -o /tmp/1.swf -T 9 -f

7. 前端整合 FlexPaper

  • 下載 FlexPaper,配置 FlexPaperViewer.swf、js/FlexPaperViewer.js
  • 頁面嵌入 JS 初始化,指定 SWF 路徑、尺寸、工具列等參數

PHP 呼叫轉換流程範例

<?php
function convertToSwf($sourcePath, $outputDir) {
    $pdfPath = $outputDir . '/' . basename($sourcePath, '.doc') . '.pdf';
    $swfPath = $outputDir . '/' . basename($sourcePath, '.doc') . '.swf';

    // 1. DOC -> PDF
    $cmd1 = "java -jar /usr/local/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar " .
            escapeshellarg($sourcePath) . " " . escapeshellarg($pdfPath);
    exec($cmd1, $out1, $ret1);
    if ($ret1 !== 0) throw new Exception("DOC->PDF 轉換失敗");

    // 2. PDF -> SWF
    $cmd2 = "pdf2swf " . escapeshellarg($pdfPath) . " -o " . escapeshellarg($swfPath) . " -T 9 -f";
    exec($cmd2, $out2, $ret2);
    if ($ret2 !== 0) throw new Exception("PDF->SWF 轉換失敗");

    return $swfPath;
}

常見問題與解決

  • 轉換卡住:OpenOffice 單執行緒,高併發需部署多實例或使用轉換隊列。
  • 字體缺失:確保中文字體安裝正確,重啟服務。
  • 權限問題:Apache 用戶需有執行 java、pdf2swf 權限,目錄可寫。
  • 大文件超時:調整 PHP max_execution_time、nginx proxy_read_timeout。

現代替代方案提示

現今建議考慮:

  • LibreOffice 替代 OpenOffice(更活躍維護)
  • PDF.js 直接前端渲染 PDF,免去 SWF 轉換與 Flash 依賴
  • OnlyOffice / Collabora Online 提供完整線上編輯預覽方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved