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


199

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

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

我们的环境是LAMP堆栈。


我希望能够做到这一点并使文件具有.jpg扩展名。我尝试了.htaccess AddHandler方法,但它不起作用。
Keyslinger '16

Answers:


228

你需要ImageMagickGhostScript

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

[0]手段page 1


11
是的,它有效。您还可以执行:$ im-> setResolution(300,300)例如,以所需的分辨率渲染pdf。
路易斯·梅尔拉加蒂

6
我没有尝试过,但是如果您使用的是Google文档,并且不介意iFrame,则此建议可能会起作用(它也是wp插件)forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David

4
但是如何在PHP文件中包含ImageMagick和GhostScript
namratha 2013年

1
@ think123用途$im->thumbnailImage(1500, 0);将您的jpg图像设置为1500的宽度并保留比例。查看文档
Kevin Jantzer 2014年

1
从下面的答案中-如果要从Blob加载PDF,则这是获取第一页而不是最后一页的方式:$ im-> readimageblob($ blob); $ im-> setiteratorindex(0);
jrjohnson 2014年

34

对于由于某种原因而没有ImageMagick的用户,GD函数也可以与GhostScript一起使用。运行ghostscript命令,exec()将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命令


3
要仅获取第一页的图像,请将-dFirstPage = 1 -dLastPage = 1开关添加到命令中。
蒂姆·迪尔伯恩

如果仍然无法正常工作,则可能需要提供gs二进制文件的完整路径。
伸长了脖子

看起来它正在运行系统命令。如果用户上传名为的文件something;rm -rf /怎么办?
iProgram

如果我想将pdf的所有页面都转换成图像。那该怎么办?
达拉

31

您也可以使用

$im->getNumberImages();

然后,您可以使用循环创建所有页面的缩略图。

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

34
(实际上应该是对Paolo Bergantino的回答的评论)
Simon East

聪明的答案。没有别人给,但你注意到并写道。
阿舒·库玛

16

使用php扩展名Imagick。若要控制栅格输出图像的所需大小,请使用setResolution函数

<?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的评论是他的扩展。您需要在加载图像之前设置分辨率。)


11

如果要从Blob加载PDF,则可以通过这种方式获取第一页而不是最后一页:

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

10
(这实际上应该是对Paolo Bergantino的回答的评论)
Simon East

9

您也可以尝试执行imagemagick随附的“转换”实用程序。

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

3
代替pdf_doc.pdf,首选pdf_doc.pdf [0]。
约翰·库拉克

convert是ImageMagick软件包的一部分;尝试sudo yum install ImageMagick
Jack Miller

如果仍然无法使用,则可能需要提供convert二进制文件的完整路径。
伸长了脖子

1
echo 'image-0.jpg';返回一个字符串。
2016年

为我工作,谢谢
Isabella

4

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

总是GhostScript命令比ImageMagicpdf 更快,因此您应该使用GhostScript包装器或纯GhostScript命令

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

嗨,我正在使用您的PDFlib从PDF创建PNG。$ pdflib =新的ImalH \ PDFLib \ PDFLib(); $ pdflib-> setPdfPath($ pdf_file_path); $ pdflib-> setOutputPath($ folder_path_for_images); $ pdflib-> setImageFormat(\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI(100); $ pdflib-> setPageRange(1,$ pdflib-> getNumberOfPages()); $ pdflib-> convert(); PDFlib是否可以设置创建的PNG文件的宽度和高度?
WGS

嗨,没有PDFLib不提供处理图像的方法,但是您可以这样做。一旦使用PDFLib生成了png,您就可以使用另一个图像处理库libraray,例如 github.com/Treinetic/ImageArtist来完成工作……
imal hasaranga perera

请尝试我建议的上述方法,但是如果您仍在挣扎,请给我发送邮件至imal@treinetic.com,我将为您提供示例代码...欢呼!
imal hasaranga perera

我会尝试的。谢谢你的建议。
WGS

3

我安装完成!工作了!

您可以在Windows上进行基础安装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");    
?>

此外,您可能会class imagickPHP Imagick类中使用

谢谢大家的帮助!


2

换种方式,您可以使用以下库使用javascript将pdf转换为图像

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


如果要在服务器中显示预览图像,我们该如何使用?
chithra

您可能需要看一下:github.com/scandel/pdfThumbnails。我认为您可以将此处生成的图像缩略图与实际文件一起上传并保存,这样可以节省服务器上的更多计算时间(因为缩略图处理是在客户端计算机上完成的)。
sajed zarrinpour

1

这是我编写并在几个项目中使用过的简单类。它只是包装imagick并处理将每个页面写出到磁盘。如果有人仍在寻找简便的方法来执行此操作,则此链接可能会有所帮助。


2
仅链接的答案在StackOverflow上的价值很小,因为如果链接移动或死亡,答案将变得毫无用处。为了改善您的答案,您的解决方案的大部分应在此处进行硬编码。
mickmackusa
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.