使用預設資料載入器與 PDF 時出現 DOMMatrix 未定義的錯誤

描述問題/錯誤/問題

使用 Default Data Loader 節點載入 PDF 二進位檔案時,執行失敗並出現以下錯誤:

"errorMessage": "DOMMatrix is not defined",
"errorDescription": "DOMMatrix is not defined"

容器中還會記錄以下警告:

Warning: Cannot load "@napi-rs/canvas" package: "Error: Failed to load native binding".
Warning: Cannot polyfill `DOMMatrix`, rendering may be broken.
Warning: Cannot polyfill `ImageData`, rendering may be broken.
Warning: Cannot polyfill `Path2D`, rendering may be broken.

重現步驟

  1. 設定一個使用 PDF 二進位來源的工作流程(例如 Google Drive、Webhook、Form 節點)。
  2. 將二進位輸出連接到 Default Data Loader 節點,並將「資料類型」設定為 Binary
  3. 執行工作流程。

預期行為

Default Data Loader 應該成功解析 PDF 並將內容傳遞到下游。

實際行為

節點失敗並出現 DOMMatrix is not defined@napi-rs/canvas 套件無法載入,導致 pdfjs-dist 無法填補所需的瀏覽器原生 API。

關於我的 n8n 設定的資訊

  • n8n 版本: 2.25.7(自託管)
  • 執行 n8n 的方式: Docker
  • 二進位資料模式: filesystem

額外背景

此問題似乎在 v1.98.0 中引入,當時 pdfjs-dist 升級至依賴 Node.js 伺服器環境中不可用的瀏覽器原生 API 的版本。已由多位使用者在先前版本中回報,且在 v2.25.7 中仍然存在。

錯誤訊息是什麼(如有)?

請分享您的工作流程

分享最後一個節點返回的輸出

關於您的 n8n 設定的資訊

  • n8n 版本:
  • 資料庫(預設值:SQLite):
  • n8n EXECUTIONS_PROCESS 設定(預設值:own、main):
  • 執行 n8n 的方式(Docker、npm、n8n cloud、desktop app):
  • 作業系統:

我認為我們今天已經看過這個確切的問題了。

試試最新的測試版,它為我們解決了這個問題。

在等待 @menouaw 的測試版期間,有一個可靠的解決方法已在相關的「DOMMatrix is not defined」討論串中得到確認:在鏈中更早使用 Extract from File 節點(操作:「PDF」)將 PDF 轉換為文字再傳給 Default Data Loader,不過這本身還不夠,因為它會遇到相同的 pdfjs-dist/@napi-rs/canvas 路徑問題。

歡迎 @menouaw

最新測試版中的修正是正確的長期解決方案(BramKn 的建議)。作為在穩定版本上的臨時解決方案:使用 HTTP Request 節點來呼叫外部 PDF 轉文字 API(如 Docparser、Reducto 或任何自託管的 Tika/Unstructured 端點),而不是使用 Default Data Loader。這樣你的 PDF 文字會以純 JSON 形式抵達,無需經過導致當機的 pdfjs + @napi-rs/canvas 路徑。或者,如果你的 Docker 映像是基於 Alpine 建置,通常可以透過切換到 n8nio/n8n:latest(基於 Debian)而不是 Alpine 變體來修正遺漏的原生繫結。