【问题标题】:How do I convert a PDF document to a preview image in PHP?如何在 PHP 中将 PDF 文档转换为预览图像? [关闭]
【发布时间】:2010-10-02 20:09:12
【问题描述】:

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

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

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

【问题讨论】:

  • 我希望能够做到这一点,并让文件具有.jpg 扩展名。我尝试了 .htaccess AddHandler 方法,但没有成功。

标签: php image pdf lamp


【解决方案1】:

你需要ImageMagickGhostScript

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

[0] 表示page 1

【讨论】:

  • 是的,它有效。您还可以执行以下操作: $im->setResolution( 300, 300 ) 例如以所需的分辨率呈现您的 pdf。
  • 我没试过,但如果你使用的是谷歌文档,并且不介意 iFrame,这个建议可能有效(它也是一个 wp 插件)forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
  • 但是如何在 php 文件中包含 ImageMagick 和 GhostScript
  • @think123 use $im-&gt;thumbnailImage(1500, 0); 这会将您的 jpg 图像设置为 1500 的宽度并保留比例。 See documentation
  • 来自我下面的回答 - 如果您从 blob 加载 PDF,这就是您获取第一页而不是最后一页的方式:$im->readimageblob($blob); $im->setiteratorindex(0);
【解决方案2】:

您还可以使用

获取页数
$im->getNumberImages();

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

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

【讨论】:

  • (这实际上应该是对 Paolo Bergantino 的回答的评论)
  • 智能回答。不是由其他人提供的,但您注意到并写了。
【解决方案3】:

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

【讨论】:

  • 要获取第一页的图像,请将开关 -dFirstPage=1 -dLastPage=1 添加到命令中。
  • 如果仍然无法正常工作,您可能需要提供gs 二进制文件的完整路径。
  • 这看起来像是在运行系统命令。如果用户上传了一个名为something;rm -rf /的文件怎么办?
  • 如果我希望所有的 pdf 页面都转换成图像。那怎么办?
【解决方案4】:

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

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

【讨论】:

  • (这实际上应该是对 Paolo Bergantino 的回答的评论)
【解决方案5】:

我安装完毕!成功了!

你可能会在 windows 上做基础install imagemagick

php (local) 使用调用exec(&lt;command line&gt;) 例如:

<?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

谢谢大家帮助我!

【讨论】:

    【解决方案6】:

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

    【讨论】:

    • 仅链接的答案在 StackOverflow 上的价值很低,因为如果链接移动或失效,答案将变得毫无用处。为了改进你的答案,你的大部分解决方案应该在这里硬编码。
    【解决方案7】:

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

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

    【讨论】:

    • 首选 pdf_doc.pdf[0],而不是 pdf_doc.pdf。
    • convert 是 ImageMagick 包的一部分;试试 sudo yum install ImageMagick
    • 如果仍然无法正常工作,您可能需要提供convert 二进制文件的完整路径。
    • echo 'image-0.jpg'; 返回一个字符串。
    【解决方案8】:

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

    【讨论】:

      【解决方案9】:

      我是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();
      

      【讨论】:

      • 您好,我正在使用您的 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->转换(); PDFlib 是否可以设置创建的 PNG 文件的宽度和高度?
      • 您好,没有 PDFLib 不提供处理图像的方法,但您可以这样做。一旦您使用 PDFLib 生成了 png,您就可以使用另一个图像处理库,例如 github.com/Treinetic/ImageArtist 来完成您的工作...
      • 请尝试我建议的上述方法,但如果您仍然在苦苦挣扎,请给我发邮件至 imal@treinetic.com,我会为您提供示例代码...干杯!!跨度>
      • 我会试一试的。感谢您的建议。
      【解决方案10】:

      换个思路,你可以使用下面的库,用javascript将pdf转成图片

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

      【讨论】:

      • 如果我想在服务器中显示预览图像,我们该如何使用呢?
      • 您可能想看看这个:github.com/scandel/pdfThumbnails。我认为您可以将此处生成的图像缩略图与实际文件一起上传并保存,这样您将在服务器上节省更多计算时间(因为缩略图过程是在客户端计算机中完成的)。
      • 仅接收和允许图像文件比在不受信任的 PDF 上使用 ImageMagick 更节省。
      • 此解决方案的唯一问题:必要的pdf.min.js 大小为 328 KB。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2011-03-02
      相关资源
      最近更新 更多