我正在尝试使用 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 文件。
您收到此错误是因为 Apache 未作为在命令行上运行此脚本的同一用户运行。这些天我不会使用CGI。我会设置 Mason 以使用 FastCGI 运行。地狱,我什至会离开 Apache 并使用 NGINX。要解决这个问题,你要么必须
/etc/apache2/envvars
并检查变量APACHE_RUN_GROUP
和APACHE_RUN_USER
unoconv --listener
在操作之前手动启动,可以解决我的问题。正在创建 PDF 文件。