Skip to content

錯誤與疑難排解

套件例外都實作 OfficeConverterException,應用程式可以統一捕捉轉換錯誤,也可以分別處理特定分類。 Storage 與目的地錯誤刻意保留不同的契約。

處理轉換失敗

php
use InvalidArgumentException;
use Mattmy\OfficeConverter\Contracts\OfficeConverterException;
use Mattmy\OfficeConverter\Exceptions\UnsupportedConversion;

try {
    $stored = $document->convertTo($format)->storeAs('converted');
} catch (UnsupportedConversion $exception) {
    return back()->withErrors(['format' => '此輸入不支援指定的輸出格式。']);
} catch (InvalidArgumentException $exception) {
    return back()->withErrors(['destination' => '請選擇安全的 Storage 目的地。']);
} catch (OfficeConverterException $exception) {
    report($exception);
}

請勿直接向終端使用者顯示例外細節。訊息已有長度限制並移除 workspace 路徑,但用途仍是 server-side 診斷。

例外分類

例外代表意義
EnvironmentUnavailable設定無效,或找不到/無法啟動 configured executable
InvalidOfficeInput來源、副檔名、大小、upload 或最低格式結構不被接受
UnsupportedConversion輸入家族沒有提供指定的 Format
ConversionFailedLibreOffice 失敗、timeout,或沒有產生唯一且有效的有界產物
AlreadyConsumedOfficeDocumentConvertedOffice 在第一次操作後再次使用

AlreadyConsumed 也繼承 LogicExceptionstoreAs() 另可能因目的地拋出 InvalidArgumentException, 也會原樣拋出 Laravel Storage 或 Flysystem 例外。Storage driver 也可能回傳 false

找不到 LibreOffice

請確認 Windows 的 soffice.com 或其他平台的 soffice 位於 PATH,或將 LIBREOFFICE_BINARY 設為 executable 絕對路徑。

支援格式仍然失敗

套件沒有 LibreOffice 數字版本 gate。某個發行版可能缺少或變更必要 filter。請使用 configured executable 直接確認相同轉換,並查看去敏後的 server-side 錯誤。實際 command capability 才是相容性 判準,因此這類失敗仍是 ConversionFailed

含圖片的 HTML 轉換失敗

HTML 輸出必須是單一檔案。LibreOffice 另寫入圖片 sidecars 時,套件會拒絕整次轉換,避免回傳含有 失效引用的 HTML。請改用 PDF 或其他單檔目標。

Storage 回傳 false 或拋出例外

覆寫與失敗行為由所選 disk 決定。結果已被消費且暫存 workspace 已清理,因此重試前必須重新建立 輸入並再次執行轉換。

Last updated:

使用 MIT License 發布。