通过 Symphony Process Component 使用 unoconv 将文档转换为 pdf
Convert documents into pdf using unoconv through Symphony Process Component
我正在尝试使用 PHP 中的 unoconv 将 word 文档转换为 PDF。当我 运行 在 CLI 中执行以下命令时,它可以正常工作,没有任何错误:
export HOME=/tmp/converts && unoconv -f pdf -o ~/da063764384fb612971bfc92c52c40fc.pdf ~/da063764384fb612971bfc92c52c40fc.docx
但问题是当我尝试在 PHP 中 运行 时,如下所示:
$env = ['PATH' => '/sbin:/bin:/usr/sbin:/usr/bin'];
$bash = "export HOME=${tmpDir} && /usr/bin/unoconv -f pdf -o ~/${fileName}.pdf $srcFile";$process = new Process($bash);
$process->setTimeout(120);
$process->run(null, $env);
$output = "\nOutput: " . $process->getOutput();
$error = "\nError: " . $process->getErrorOutput();
这个结果:
Output:
Error: unoconv: RuntimeException during import phase: Office probably died. Binary URP bridge disposed during call
谁知道我该如何解决这个问题!?
unoconv 产生一个子 libreOffice 进程,然后通过端口 2002 连接到该进程。st运行gely 端口永远不会改变。因此,unoconv 不能 运行 并行,如果你有一个实例 运行 令所有其他实例失败。那是我服务器上发生的事情。
我 运行 在 CLI 上使用以下命令查找所有 libreOffice 进程:
ps aux | grep libre
然后 运行ning 杀死那些进程:
ps aux | grep -i libre | awk {'print '} | xargs kill -9
一般来说,使用其他支持多线程的工具是解决这种情况的更好方法。
我正在尝试使用 PHP 中的 unoconv 将 word 文档转换为 PDF。当我 运行 在 CLI 中执行以下命令时,它可以正常工作,没有任何错误:
export HOME=/tmp/converts && unoconv -f pdf -o ~/da063764384fb612971bfc92c52c40fc.pdf ~/da063764384fb612971bfc92c52c40fc.docx
但问题是当我尝试在 PHP 中 运行 时,如下所示:
$env = ['PATH' => '/sbin:/bin:/usr/sbin:/usr/bin'];
$bash = "export HOME=${tmpDir} && /usr/bin/unoconv -f pdf -o ~/${fileName}.pdf $srcFile";$process = new Process($bash);
$process->setTimeout(120);
$process->run(null, $env);
$output = "\nOutput: " . $process->getOutput();
$error = "\nError: " . $process->getErrorOutput();
这个结果:
Output:
Error: unoconv: RuntimeException during import phase: Office probably died. Binary URP bridge disposed during call
谁知道我该如何解决这个问题!?
unoconv 产生一个子 libreOffice 进程,然后通过端口 2002 连接到该进程。st运行gely 端口永远不会改变。因此,unoconv 不能 运行 并行,如果你有一个实例 运行 令所有其他实例失败。那是我服务器上发生的事情。
我 运行 在 CLI 上使用以下命令查找所有 libreOffice 进程:
ps aux | grep libre
然后 运行ning 杀死那些进程:
ps aux | grep -i libre | awk {'print '} | xargs kill -9
一般来说,使用其他支持多线程的工具是解决这种情况的更好方法。