Estou tentando converter um arquivo xlsx para pdf usando Perl CGI (Mason).
Como não encontrei uma forma de converter um arquivo usando perl puro, estou usando soffice
para realizar o trabalho.
Isso funciona bem até que eu faça isso através do navegador.
O código responsável pela conversão é bem simples:
my @cmd = ( "soffice", "--headless", "--convert-to", "pdf", $filename );
system(@cmd);
Isso funciona bem na linha de comando, quando executado por um usuário comum, mas executá-lo como usuário Apache (Mason on Apache), gera um erro:
(process:14954): dconf-CRITICAL **: 14:28:42.846: unable to create directory '/usr/share/httpd/.cache/dconf': Permission denied. dconf will not work properly.
Alguém pode me indicar a direção certa?
Existe uma maneira de converter xlsx em pdf usando apenas perl, não comandos do sistema?
Editar
Para passar dconf
o erro, criei manualmente a árvore de diretórios da qual ela está reclamando e a chown para o usuário do apache, no entanto, há o próximo erro:
[Java framework] Error in function createSettingsDocument (elements.cxx).
javaldx failed!
Warning: failed to read path from javaldx
O mesmo acontece se eu tentar unoconv
:
Error: Unable to connect or start own listener. Aborting.
Solução
Iniciando unoconv --listener
manualmente antes da operação, faz o truque e resolve meu problema. Os arquivos PDF estão sendo criados.
Você está recebendo este erro porque o Apache não está sendo executado como o mesmo usuário que está executando este script na linha de comando. Eu não usaria CGI hoje em dia. Eu configuraria o Mason para rodar com FastCGI. Inferno, eu até me afastaria do Apache e usaria o NGINX. Para resolver isso você tem que
/etc/apache2/envvars
e verifique as variáveisAPACHE_RUN_GROUP
eAPACHE_RUN_USER
Iniciando
unoconv --listener
manualmente antes da operação, faz o truque e resolve meu problema. Os arquivos PDF estão sendo criados.