How do I convert a PDF document to a preview image in PHP?
将PDF文档的一部分呈现为图像文件需要哪些库、扩展名等?
我发现的大多数php pdf库都集中在创建PDF文档上,但是是否有一种简单的方法可以将文档呈现为适合Web使用的图像格式?
我们的环境是一个灯管。
- 我希望能够做到这一点,并让文件有一个.jpg扩展名。我尝试了.htaccess addhandler方法,但它不起作用。
你需要ImageMagick和GhostScript。
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。
- 是的,它起作用了。您也可以这样做:$im->setresolution(300300),例如,以期望的分辨率呈现您的PDF。
- 我没有尝试过,但是如果你使用的是Google Docs,不介意使用iframe,这个建议可能会在rst.com/posts/pdf的缩略图中起作用(它也是wp插件)。
- 但是如何在php文件中包含imagemagick和ghostscript
- @路易斯迈格拉蒂,嗯,埃多克斯1〔0〕的东西似乎不起作用。我把它放在保罗例子中的$im = new imagick('file.pdf[0]');行之后。似乎什么都没做。如果我想要一个宽度为1500,高度可调,高分辨率的PDF图像怎么办?我该怎么做?谢谢。
- @think123使用$im->thumbnailImage(1500, 0);,将JPG图像的宽度设置为1500,并保留比例。参见文档
- 要花多长时间才能建成Imagic,我等不及了,还是它的建筑…喝咖啡:d
- 从我下面的回答中-如果您从blob加载PDF,那么这是如何获取第一页而不是最后一页:$im->readImageblob($blob);$im->setIteratorIndex(0);
- @Luismelgrati它能在Windows7中工作吗????是否可以安装在Win 7中??
- 但是我尝试了它,它给了我:"error no decode delegate for this image format`pathfilename.pdf'@error/composite.c/readimage/532"。我尝试了$exec="convert-scale$width$source$dest";exec($exec);它的工作方式很有魅力。
- 你们中有人觉得这很慢吗?我觉得这很慢,只想用鬼脚本,速度更快。如果你们有兴趣的话,我为它写了一个包装:github.com/imalhasaranga/pdflib
- @我试过你的例子,但我发现了下面的错误。致命错误:未捕获异常"imagick exception",消息"unabletoopenblob`file.pdf":第39行的d:xampphtdocslearnindex.php:39堆栈跟踪:0 d:xampphtdocslearnindex.php中没有此类文件或目录@error/blob.c/openblob/2657"。
- 你能帮我吗?
- 将图像格式设置为JPG,否则图像可能无法在PNG中正确呈现。非常感谢;)
- 如果ghostscript链接失效,请访问github页面:github.com/artifexsoftware/ghostpdl-downloads/releases
对于那些由于任何原因没有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命令。
- 要获取第一页的图像,请将开关-dfirstpage=1-dlastpage=1添加到命令中。
- 如果它仍然不起作用,您可能需要给出到gs二进制文件的完整路径。
- 这看起来像是在运行系统命令。如果用户上传一个名为something;rm -rf /的文件怎么办?
- 如果我想把PDF的所有页面都转换成图像。那怎么办?
您还可以使用
然后您可以使用循环创建所有页面的拇指,例如。
- (这实际上应该是对保罗·贝格蒂诺答案的评论)
- 明智的回答。不是别人给的,而是你注意并写的。
使用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'; |
- 优先选择pdf_doc.pdf而不是pdf_doc.pdf[0]。
- convert是imagemagick包的一部分;请尝试sudo yum安装imagemagick
- 如果它仍然不起作用,您可能需要提供到convert二进制文件的完整路径。
- 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(); |
- 嗨,我正在使用您的pdflib从pdfs创建png。$pdflib=new imalhpdflibpdflib();$pdflib->set pdf path($pdf_file_path);$pdflib->setoutputpath($folder_path_for_images);$pdflib->set image format(imalhpdflibpdflib::$image_format_png);$pdflib->setdpi(100);$pdflib->setpagerange(1$pdflib->getnumberofpages());$pdflib->convert();pdflib是否有设置选项?创建的PNG文件的宽度和高度?
- 嗨,no pdflib不提供处理图像的方法,但您可以这样做。使用pdflib生成PNG后,可以使用其他图像操作库(如github.com/treinetic/imageartist)来完成工作…
- 请尝试我建议的上述方法,但如果您仍在努力,请给我发一封邮件到[email protected],我将帮助您提供一个示例代码…干杯!!
- 我会试试的。谢谢你的建议。
安装完成!成功了!
您可以在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并处理将每个页面写入磁盘。如果有人仍然在寻找一种简单的方法来实现这一点,那么这个链接可能会有所帮助。
- 只有链接的答案在stackoverflow上的值很低,因为如果链接移动或死亡,答案将变得毫无用处。为了改进您的答案,您的大部分解决方案应该在这里硬编码。