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

将PDF文档的一部分渲染为图像文件需要哪些库,扩展等?

我发现的大多数PHP PDF库都是以创buildPDF文档为中心的,但是有没有一种简单的方法将文档转换为适合网页使用的图像格式呢?

我们的环境是一个LAMP堆栈。

你需要ImageMagickGhostScript

 <?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命令:

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

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

您也可以使用页数

 $im->getNumberImages(); 

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

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

使用php扩展名Imagick 。 要控制光栅输出图像的所需大小,请使用setResolutionfunction

 <?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对他的评论,你需要在载入图像之前设置分辨率。)

如果你从一个blob加载PDF,这是如何得到的第一页,而不是最后一页:

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

您也可以尝试执行imagemagick附带的“convert”工具。

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

我安装完了! 它的工作!

你可能会做基地安装imagemagick在Windows上。

php (local)使用call exec(<command line>) ex:

 <?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

谢谢大家帮助我!

这是一个简单的课,我已经写了几个项目使用。 它只是包装imagick和处理每个页面写入磁盘。 如果有人仍然在寻找一个简单的方法来做到这一点, 这个链接可能会有所帮助。

我是PDFlib的作者,这是一个PHP的GhostScript包装,使用这个库的好处是,它已经过testing,它不需要ImageMagic

总是GhostScript命令比ImageMagic要快,因此您应该selectGhostScript包装器或纯GhostScript命令

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