如何在PHP中将PDF文档转换为预览图像?

时间:2009-01-22 01:47:26

标签: php image pdf lamp

将PDF文档的一部分呈现给图像文件需要哪些库,扩展等?

我发现大多数PHP PDF库都围绕创建PDF文档,但是有一种简单的方法可以将文档呈现为适合Web使用的图像格式吗?

我们的环境是LAMP堆栈。

10 个答案:

答案 0 :(得分:215)

您需要ImageMagickGhostScript

<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

[0]表示page 1

答案 1 :(得分:31)

对于那些因任何原因没有ImageMagick的人来说,GD功能也可以与GhostScript一起使用。使用exec()运行ghostscript命令将PDF转换为JPG,并使用imagecreatefromjpeg()操作生成的文件。

运行ghostscript命令:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

要进行操作,请创建新的占位符图像$newimage = imagecreatetruecolor(...),然后输入当前图像。 $image = imagecreatefromjpeg('whatever.jpg'),然后您可以使用imagecopyresampled()更改大小或任意数量的其他内置非imagemagick命令

答案 2 :(得分:30)

您还可以使用

获取页数
$im->getNumberImages();

然后你可以使用循环创建所有页面的拇指,例如。

'file.pdf['.$x.']'

答案 3 :(得分:14)

使用php扩展程序Imagick。 要控制所需的光栅输出图像大小,请使用setResolution function

<?php    
$im = new Imagick();
$im->setResolution(300, 300);     //set the resolution of the resulting jpg
$im->readImage('file.pdf[0]');    //[0] for the first page
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

(Paolo Bergantino的答案和Luis Melgratti的评论。你需要在加载图片之前设置分辨率。)

答案 4 :(得分:11)

如果您从blob加载PDF,这就是您获取第一页而不是最后一页的方式:

$im->readimageblob($blob);
$im->setiteratorindex(0);

答案 5 :(得分:8)

您也可以尝试执行imagemagick附带的'convert'实用程序。

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';

答案 6 :(得分:3)

我安装完了!它很有效!

你可能会在Windows上做install imagemagick

php (local)中使用来电exec(<command line>) 例如:

<?php
$pdf = "filename.pdf";
$info = pathinfo($pdf);
$file_name =  basename($pdf,'.'.$info['extension']);
echo $file_name;
$pdf = "filename.pdf[0]";
exec("convert $pdf convert-img/$file_name.jpg");    
?>

此外,您可能会在PHP Imagick class

中使用class imagick

谢谢大家的帮助!

答案 7 :(得分:3)

我是PDFlib的作者,它是php的GhostScript包装器,使用此库的优点是,它已经过测试,不需要ImageMagic

对于pdf,始终GhostScript命令比ImageMagic更快,因此您应该选择GhostScript包装器或纯GhostScript命令

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();

答案 8 :(得分:1)

这是一个我编写并用于几个项目的简单类。它只包装imagick并处理将每个页面写入磁盘。如果有人仍在寻找一种简单的方法,this link可能会有所帮助。

答案 9 :(得分:1)

不同的想法,您可以使用以下库将PDF转换为使用javascript的图像

http://usefulangle.com/post/24/pdf-to-jpeg-png-with-pdfjs