Linux
使用 Perl CGI 將 Excel 文件轉換為 PDF
我正在嘗試使用 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_GROUP
和APACHE_RUN_USER
- 使用SuEXEC