在PHP中使用pdftoppm将pdf转换为图像,而无需在磁盘上写入文件

时间:2016-05-06 11:53:59

标签: php linux pdf pipe pdftoppm

我需要在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

首先感谢提示和消息 抱歉我的英语不好..

1 个答案:

答案 0 :(得分:0)

好的,自己解决了!

删除了连字符。

$command = 'pdftoppm -png ';

感谢所有支持!