想象力将pdf转换为jpg会引发错误

时间:2014-05-15 11:11:09

标签: php imagick

for ($i = 0; $i < $int; $i++) {
    $im = new imagick();
    // $im->readimage($soubory."[".$i."]");
    $im->setResolution(300, 300);
    $im->readImage($soubory . "[" . $i . "]");
    $im->resampleImage(150, 150, imagick::FILTER_UNDEFINED, 1);
    $im->resizeImage(512, 700, Imagick::FILTER_LANCZOS, 0);
    $im->setImageFormat('jpeg');
    $im->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH);
    $im->setImageFormat('jpg');
    $i = sprintf("%03s", $i);
    $im->writeImage('../pdf/publisher/' . $select . '/x-' . $i . '.jpg');
    $im->clear();
    $im->destroy();

    if ($i == 000) {
        $preview = '../pdf/publisher/' . $select . '/x-' . $i . '.jpg';
    }
}

如果我的文件大小小于4 MB,那么它的效果非常好。但有些文件没有上传。我不知道为什么。

我收到此错误:

  

致命错误:未捕获的异常&#39; ImagickException&#39;消息&#39; Postscript委托失败`/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/pdf/9.pdf' ;:没有这样的文件或目录@ pdf.c / ReadPDFImage / 611&#39;在/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/funkce.php:92堆栈跟踪:#0 / data / web / virtuals / 69845 / virtual / www / domains / nabytek-novydomov .cz / funkce.php(92):Imagick-&gt; readimage(&#39; / data / web / virtu ...&#39;)#1 / data / web / virtuals / 69845 / virtual / www / domains /nabytek-novydomov.cz/adm/includes/pdf_publisher.php(4):uploadpdf(NULL)#2 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm/includes/container .php(17):include(&#39; / data / web / virtu ...&#39;)#3 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm /index.php(155):include /&#39; / data / web / virtu ...&#39;)#data / web / virtuals / 69845 / virtual / www / domains /中引发#4 {main}第92行的nabytek-novydomov.cz/funkce.php

1 个答案:

答案 0 :(得分:0)

感谢您提供示例 - 这是一个非常大的pdf。使用ImageMagick打开它并不会给我一个错误,但是PDF也没有正确呈现。

ImageMagick实际上通过将渲染委托给GhostScript程序来渲染PDF。我认为你最好直接调用GhostScript,将PDF渲染为PNG,然后能够以合理的格式操作图像,例如。

要生成所有页面的PNG文件,您应该能够从命令行调用Ghostscript,只要它在您的路径中设置为:

gs \
-sDEVICE=png16m \
-o %03d.png \
-r300 \
casopis.pdf

或者只选择某些页面。

gs \
-sDEVICE=png16m \
-o %03d.png \
-dFirstPage=10 \
-dLastPage=13 \
-r300 \
casopis.pdf

如果您真的想要Jpeg输出,可以将其配置为output device

我还没有能够复制你看到的错误。由于ImageMagick或GhostScript无法创建一些临时文件或只是内存不足,完全有可能。

无论如何,答案是直接调用ghostscript,而不是跳过两层抽象来处理非常大的文件。


有关如何从命令行调用GS的明确说明

  1. 打开命令提示符。
  2. 转到PDF所在的目录。
  3. 运行命令

    如果你想从PHP调用它,你需要使用exec或其他一个函数在命令行上调用东西。