213

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

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

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

4

10 回答 10

242

你需要ImageMagick并且GhostScript

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

[0]手段page 1。_

于 2009-01-22T01:57:08.460 回答
37

对于那些出于某种原因没有 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命令

于 2011-03-07T15:10:52.023 回答
33

您还可以使用获取页数

$im->getNumberImages();

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

'file.pdf['.$x.']'
于 2009-01-24T08:25:37.363 回答
18

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

于 2014-11-17T18:57:21.237 回答
11

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

$im->readimageblob($blob);
$im->setiteratorindex(0);
于 2011-06-14T04:23:33.727 回答
10

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

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
于 2012-05-17T13:17:10.063 回答
5

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

总是GhostScript命令比 pdf 更快ImageMagic,因此您应该选择 GhostScript 包装器或纯 GhostScript 命令

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
于 2017-08-22T03:03:47.713 回答
4

换个思路,您可以使用以下库将 pdf 转换为使用 javascript 的图像

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

于 2018-03-29T17:58:36.457 回答
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 类中使用

谢谢大家帮助我!

于 2012-04-07T15:05:49.920 回答
1

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

于 2012-05-11T17:01:57.470 回答