【问题标题】:Converting PDF to image with ImageMagick使用 ImageMagick 将 PDF 转换为图像
【发布时间】:2012-06-23 02:36:12
【问题描述】:

我想通过 PHP 将下载的 pdf 文件转换为图像。为此,我使用了 PHP 的 Imagemagick 扩展。问题是,如果我通过 file_get_contents 函数下载 pdf 文件,我无法使用下载的内容创建 Imagemagic 对象。代码如下:

<?php

$url = "pdf webaddress";
$pdfData = file_get_contents($url);

try
    {

        $img = new Imagick($pdfData);
        $img->setResolution(480,640);
        $img->setImageFormat("jpeg");
        $img->writeImage("test.jpeg");  

    }
catch(Exception $e)
{
    echo $e->getMessage();
}
?>

我收到以下错误:

无法读取文件:%PDF-1.6 %גדֿ׃ 7 0 obj endobj 86 0 obj /Filter/FlateDecode/ID[]/Index[7 146]/Info 6 0 R/Length 257/ Prev 592751/Root 8 0 R/Size 153/Type/XRef/W[1 3 1]>>stream h�bbd`bׁ'6 '9DעƒH

现在,如果我读入本地存储的 pdf 文件,一切正常。代码是:

 $image = "output.png";
 $img = new Imagick("path to pdf file");
 $img->setResolution(480,640);
 $img->setImageFormat("jpeg");
 $img->writeImage("test.jpeg"); 

任何建议,帮助表示赞赏。

【问题讨论】:

  • 需要在本地读取pdf文件的路径。 PHP 在服务器上运行,在那里为 pdf 创建一个文件夹并将其用于 Imagick。

标签: php imagemagick


【解决方案1】:

ImageMagick PHP extension documentation page 开始,Imagick 构造函数需要一个文件名 参数,该参数可以是本地文件 URL。 :

路径可以包含文件名的通配符,也可以是 URL。

你应该直接传递 URL,不用file_get_contents,PHP 文件流非常强大。

另一种解决方案是将文件存储在本地(请参阅 tempnam()file_put_contents),但如果您不将其用于任何其他目的,而只是将其转换为图像,那将毫无用处:

$pdfUrl = "...";
$tmpFileName = tempnam(sys_get_temp_dir(), "pdf");
file_put_contents($tmpFileName, file_get_contents($pdfUrl));
// Do your ImageMagick job
unlink($tmpFileName);

【讨论】:

  • 谢谢,这个解决方案有效。你拯救了我的一天。将答案标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2011-09-29
  • 2011-01-11
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 2014-11-24
相关资源
最近更新 更多