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

Mat*_*rne 190 php pdf lamp image

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

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

我们的环境是LAMP堆栈.

Pao*_*ino 222

你需要ImageMagickGhostScript

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

[0]手段page 1.

  • 是的,它有效.你也可以这样做:$ im-> setResolution(300,300),例如在需要的分辨率下渲染你的pdf. (11认同)
  • 我还没有尝试过,但是如果你使用谷歌文档,并且不介意iFrame,这个建议可能会起作用(它也是一个wp插件)https://forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6 (6认同)
  • 但如何在php文件中包含ImageMagick和GhostScript (4认同)
  • @think123 使用 `$im-&gt;thumbnailImage(1500, 0);` 这会将您的 jpg 图像设置为 1500 的宽度并保留比例。[参见文档](http://www.php.net/manual/en/imagick.examples-1.php#example-3301) (2认同)
  • 从我下面的回答 - 如果您从 blob 加载 PDF,这就是您获取第一页而不是最后一页的方式: $im-&gt;readimageblob($blob); $im-&gt;setiteratorindex(0); (2认同)

And*_*rew 33

对于那些因任何原因没有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')
Run Code Online (Sandbox Code Playgroud)

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

  • 要获取第一页的图像,请将开关-dFirstPage = 1 -dLastPage = 1添加到命令中. (2认同)

Jas*_*son 31

您还可以使用获取页数

$im->getNumberImages();
Run Code Online (Sandbox Code Playgroud)

然后你可以使用循环创建所有页面的拇指,例如.

'file.pdf['.$x.']'
Run Code Online (Sandbox Code Playgroud)

  • (这实际上应该是Paolo Bergantino答案的评论) (30认同)

Seb*_*ian 15

使用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;
?>
Run Code Online (Sandbox Code Playgroud)

(Paolo Bergantino的答案和Luis Melgratti的评论.你需要在加载图像之前设置分辨率.)


jrj*_*son 11

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

$im->readimageblob($blob);
$im->setiteratorindex(0);
Run Code Online (Sandbox Code Playgroud)

  • (这实际上应该是Paolo Bergantino答案的评论) (10认同)

Pre*_*dhu 8

您还可以尝试执行imagemagick附带的'convert'实用程序.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Run Code Online (Sandbox Code Playgroud)

  • 而不是pdf_doc.pdf,pdf_doc.pdf [0]是首选. (3认同)
  • `echo 'image-0.jpg';` 返回一个字符串。 (2认同)

ima*_*era 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();
Run Code Online (Sandbox Code Playgroud)


jew*_*huq 5

以不同的方式思考,您可以使用以下库使用 javascript 将 pdf 转换为图像

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