【发布时间】:2010-10-02 20:09:12
【问题描述】:
将 PDF 文档的一部分呈现为图像文件需要哪些库、扩展等?
我发现的大多数 PHP PDF 库都以创建 PDF 文档为中心,但有没有一种简单的方法可以将文档呈现为适合 Web 使用的图像格式?
我们的环境是一个 LAMP 堆栈。
【问题讨论】:
-
我希望能够做到这一点,并让文件具有
.jpg扩展名。我尝试了 .htaccess AddHandler 方法,但没有成功。
将 PDF 文档的一部分呈现为图像文件需要哪些库、扩展等?
我发现的大多数 PHP PDF 库都以创建 PDF 文档为中心,但有没有一种简单的方法可以将文档呈现为适合 Web 使用的图像格式?
我们的环境是一个 LAMP 堆栈。
【问题讨论】:
.jpg 扩展名。我尝试了 .htaccess AddHandler 方法,但没有成功。
<?php
$im = new imagick('file.pdf[0]');
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>
[0] 表示page 1。
【讨论】:
$im->thumbnailImage(1500, 0); 这会将您的 jpg 图像设置为 1500 的宽度并保留比例。 See documentation
您还可以使用
获取页数$im->getNumberImages();
然后您可以使用循环创建所有页面的缩略图,例如。
'file.pdf['.$x.']'
【讨论】:
对于那些出于某种原因没有 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')
要进行操作,请创建一个新的占位符图像$newimage = imagecreatetruecolor(...),并引入当前图像。 $image = imagecreatefromjpeg('whatever.jpg'),然后您可以使用imagecopyresampled() 更改大小,或任何数量的其他内置非imagemagick 命令
【讨论】:
gs 二进制文件的完整路径。
something;rm -rf /的文件怎么办?
如果您是从 blob 加载 PDF,这是获取第一页而不是最后一页的方式:
$im->readimageblob($blob);
$im->setiteratorindex(0);
【讨论】:
我安装完毕!成功了!
你可能会在 windows 上做基础install 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");
?>
此外,您可以在PHP Imagick class 中使用class imagick
谢谢大家帮助我!
【讨论】:
这是我在几个项目中编写并使用的一个简单类。它只是包装imagick 并处理将每个页面写入磁盘。如果有人仍在寻找一种简单的方法来做到这一点,this link 可能会有所帮助。
【讨论】:
您也可以尝试执行 imagemagick 附带的“转换”实用程序。
exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
【讨论】:
convert 二进制文件的完整路径。
echo 'image-0.jpg'; 返回一个字符串。
使用 php 扩展名Imagick。 要控制所需的光栅输出图像大小,请使用setResolution function
<?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 他的评论的扩展。您需要在加载图像之前设置分辨率。)
【讨论】:
我是PDFlib 的作者,它是一个GhostScript php 包装器,使用这个库的好处是,它已经过测试并且不需要ImageMagic
对于 pdf,GhostScript 命令总是比 ImageMagic 快,因此您应该选择 GhostScript 包装器或纯 GhostScript 命令
$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
【讨论】:
换个思路,你可以使用下面的库,用javascript将pdf转成图片
【讨论】: