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

How do I convert a PDF document to a preview image in PHP?

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

我发现的大多数php pdf库都集中在创建PDF文档上,但是是否有一种简单的方法可以将文档呈现为适合Web使用的图像格式?

我们的环境是一个灯管。


你需要ImageMagickGhostScript

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

[0]表示page 1


对于那些由于任何原因没有ImageMagick的用户,gd函数也可以与ghostscript一起工作。使用exec()运行ghostscript命令,将pdf转换为jpg,并使用imagecreatefromjpeg()操作生成的文件。

运行ghostscript命令:

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

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


您还可以使用

1
$im->getNumberImages();

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

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


使用php扩展名imagick。要控制光栅输出图像的所需大小,请使用setresolution函数

1
2
3
4
5
6
7
8
<?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;
?>

(对博格蒂诺的回答和梅尔格拉蒂的评论进行了扩展。您需要在加载图像之前设置分辨率。)


如果要从blob加载PDF,请按以下方式获取第一页而不是最后一页:

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


您还可以尝试执行ImageMagick附带的"convert"实用程序。

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


我是pdflib的作者,pdflib是一个用于PHP的ghostscript包装器,使用这个库的优点是,它已经过测试,不需要ImageMagic

在PDF中,GhostScript命令总是比ImageMagic快,因此您应该使用ghostscript包装器或纯ghostscript命令。

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


安装完成!成功了!

您可以在Windows上安装ImageMagick。

php (local)中,使用call exec()。前任:

1
2
3
4
5
6
7
8
<?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 imagick

谢谢大家都帮了我!


换个角度考虑,您可以使用以下库使用JavaScript将PDF转换为图像

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


这是一个简单的类,我已经编写并用于几个项目。它只是包装imagick并处理将每个页面写入磁盘。如果有人仍然在寻找一种简单的方法来实现这一点,那么这个链接可能会有所帮助。