编辑

编辑

我正在尝试使用 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错误,我手动创建了它所抱怨的目录树并将其 chowned 给 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 文件。

答案1

您收到此错误是因为 Apache 运行的用户与在命令行上运行此脚本的用户不同。这些天我不会使用 CGI。我将设置 Mason 与 FastCGI 一起运行。天哪,我什至会放弃 Apache 并使用 NGINX。要解决这个问题,你要么必须

  • 使该目录归同一用户所有,或者可由运行 Apache 的用户写入。 Apache 产生 CGI 进程,因此它具有与运行脚本的用户不同的权限。查看文件/etc/apache2/envvars并检查变量APACHE_RUN_GROUPAPACHE_RUN_USER
  • 使用苏执行

答案2

unoconv --listener在操作之前手动启动,可以解决我的问题。正在创建 PDF 文件。

相关内容