我需要在php中将pdf转换为png。由于质量原因,我们不想使用imagemagick,但更喜欢使用pdftoppm。
为了提高性能,我们不喜欢使用文件系统,而是使用内存。
pdftoppm已正确安装在ubuntu上,可以正常工作。
对于另一个项目(HTML->PDF),我们使用以下代码:

//input is $html

$descriptorSpec =
[
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
];

$command = 'wkhtmltopdf --quiet  - -';

$process = proc_open($command, $descriptorSpec, $pipes);

fwrite($pipes[0], $html);
fclose($pipes[0]);
$pdf = stream_get_contents($pipes[1]);
$errors = stream_get_contents($pipes[2]);
if ($errors)
{
    $errors = ucfirst(strtr($errors, [
        'sh: wkhtmltopdf: ' => '',
        PHP_EOL => ''
    ]));
    throw new Exception($errors);
}
fclose($pipes[1]);
$return_value = proc_close($process);

//output is $pdf

这真是太好了!
但是如果我用这个代码对pdftoppm做同样的事情,它就不工作了,我做错了什么?
//input is $pdf

$descriptorSpec =
[
    0 => ['pipe', 'r'],
    1 => ['pipe', 'w'],
    2 => ['pipe', 'w']
];

$command = 'pdftoppm -png  - -';

$process = proc_open($command, $descriptorSpec, $pipes);

fwrite($pipes[0], $pdf);
fclose($pipes[0]);
$png = stream_get_contents($pipes[1]);
$errors = stream_get_contents($pipes[2]);
if ($errors)
{
    $errors = ucfirst(strtr($errors, [
        'sh: pdftoppm: ' => '',
        PHP_EOL => ''
    ]));
    throw new Exception($errors);
}
fclose($pipes[1]);
$return_value = proc_close($process);

//output is $png

谢谢你的提示和建议
对不起,我英语不好。

最佳答案

好吧,我自己修好了!
去掉了连字符。

$command = 'pdftoppm -png ';

谢谢大家的支持!

关于php - 将pdftoppm转换为pdf到php中的图像而无需在磁盘上写入文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37071723/

10-12 12:50