簡體   English   中英

imagick將pdf轉換為jpg會引發錯誤

[英]imagick converting pdf to jpg throws an error

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,則可以正常工作。 但是某些文件無法上傳。 我不知道為什么

我收到此錯誤:

致命錯誤:未捕獲的異常'ImagickException'和消息'Postscript委托失敗'/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/pdf/9.pdf':無此類文件或目錄@ pdf .c / ReadPDFImage / 611'位於/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-> readimage('/ data / web / virtu ...')#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('/ data / web / virtu ...')#3 /data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/adm/index.php(155 ):include('/ data / web / virtu ...')#4 {main}放在第92行的/data/web/virtuals/69845/virtual/www/domains/nabytek-novydomov.cz/funkce.php中

感謝您提供示例-很大的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輸出,可以將其配置為輸出設備

我無法復制您看到的錯誤。 完全有可能是由於ImageMagick或GhostScript無法創建一些臨時文件,或者只是用盡了內存。

無論如何,答案是直接調用ghostscript,而不是必須跳過兩層抽象來處理非常大的文件。


有關如何從命令行調用GS的明確說明

  1. 打開命令提示符。
  2. 轉到PDF所在的目錄。
  3. 從運行命令

如果要從PHP調用它,則需要使用exec或其他功能之一在命令行上調用內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM