Linux

使用 Perl CGI 將 Excel 文件轉換為 PDF

  • July 12, 2019

我正在嘗試使用 Perl CGI (Mason) 將 xlsx 文件轉換為 pdf。

由於我沒有找到使用純 perl 轉換文件的方法,所以我正在使用soffice它來執行這項工作。

這工作正常,直到我通過瀏覽器完成。

負責轉換的程式碼非常簡單:

my @cmd = ( "soffice", "--headless", "--convert-to", "pdf", $filename );
system(@cmd);

這在命令行上執行良好,當由普通使用者執行時,但以 Apache 使用者(Apache 上的 Mason)執行它,會引發錯誤:

(process:14954): dconf-CRITICAL **: 14:28:42.846: unable to create directory '/usr/share/httpd/.cache/dconf': Permission denied.  dconf will not work properly.

誰能指出我正確的方向?

有沒有辦法只使用 perl 而不是系統命令將 xlsx 轉換為 pdf?

編輯

為了傳遞dconf錯誤,我手動創建了它抱怨的目錄樹並將其分配給 apache 使用者,但是,出現了下一個錯誤:

[Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx

如果我嘗試也一樣unoconv

Error: Unable to connect or start own listener. Aborting.

解決方案

unoconv --listener在操作之前手動啟動,可以解決我的問題。正在創建 PDF 文件。

unoconv --listener在操作之前手動啟動,可以解決我的問題。正在創建 PDF 文件。

您收到此錯誤是因為 Apache 未作為在命令行上執行此腳本的同一使用者執行。這些天我不會使用CGI。我會設置 Mason 以使用 FastCGI 執行。地獄,我什至會離開 Apache 並使用 NGINX。要解決這個問題,你要麼必須

  • 使目錄歸同一使用者所有,或者由執行 Apache 的使用者可寫。Apache 生成 CGI 程序,因此它與執行腳本的使用者具有不同的權限。查看文件/etc/apache2/envvars並檢查變數APACHE_RUN_GROUPAPACHE_RUN_USER
  • 使用SuEXEC

引用自:https://unix.stackexchange.com/questions/529841