Ошибка Imagick / Ghostscript при вводе PDF

Я установил ImageMagick на Windows с помощью DLL для imagick PHP.

Мне нужно конвертировать PDF-файлы в JPEG. Поэтому я также установил Ghostcript.

Если я запускаю эту команду:

 convert rose.pdf rose.jpg

это работает хорошо. Но если я попытаюсь воспроизвести эту же функциональность в моей веб-среде с помощью PHP:

$im = new imagick('test_pdf.pdf[0]' );

$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(100);
$im->setImageFormat('pdf');
$im->writeImage('thumb.jpg');

тогда моя страница закрывается.

Я предполагаю, что Imagick PHP не работает с PDF в JPEG, потому что он не знает, как использовать библиотеку Ghostscript gslib,

Однако с помощью этого кода я могу конвертировать PNG в JPEG.

Я пытался редактировать в delegates.xml но я не совсем уверен, как это сделать.

Вот соответствующие строки из моего delegates.xml:

<delegate decode="pdf" encode="eps" mode="bi" \
command="&quot;@PSDelegate@&quot; \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dEPSCrop \
-sDEVICE=epswrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>

<delegate decode="pdf" encode="ps" mode="bi" \
command="&quot;@PSDelegate@&quot; \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dEPSCrop -dAlignToPixels=0 -dGridFitTT=2 \
-sDEVICE=pswrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>

Обновить

Я пытался запустить ImageMagick с -verbose чтобы получить дополнительные подсказки:

convert -verbose 2.pdf 1.jpg

Результат:

[ghostscript library] Files/gs/gs9.15/bin/gswin64c.exe" -q -dQUIET -dSAFER -dBATCH
-dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dEPSCrop -dAlignToPixels=0 -dGridFitTT=2
"-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r72x72""-sOutputFile=C:/Users/Usuario/AppData/Local/Temp/magick-PjagmlB-%08d""-fC:/Users/Usuario/AppData/Local/Temp/magick-1l5fdY8X""-fC:/Users/Usuario/AppData/Local/Temp/magick-Fr-GsA3"C:/Users/Usuario/AppData/Local/Temp/magick-_PjagmlB-000000
1 PNG 609x791 609x791+0+0 8-bit DirectClass 47.8KB 0.016u 0:00.031
2.pdf PDF 609x791 609x791+0+0 16-bit DirectClass 47.8KB 0.000u 0:00.031
2.pdf=>1.jpg PDF 609x791 609x791+0+0 16-bit DirectClass 131KB 0.031u 0:00.046 –

Результат от ошибки Apache Log

[Пн Дек 22 09: 11: 59.022854 2014] [mpm_winnt: note] [pid 6600: tid 520] AH00428: Parent: дочерний процесс 6552 завершен со статусом 255. - Перезапуск.
[Пн Дек 22 09: 11: 59.170587 2014] [mpm_winnt: note] [pid 6600: tid 520] AH00455: настроен Apache / 2.4.9 (Win64) PHP / 5.5.12 - возобновление обычных операций - PHP / 5.5. 12 настроено - возобновление нормальной работы
[Пн Дек 22 09: 11: 59.170587 2014] [mpm_winnt: note] [pid 6600: tid 520] AH00456: Сервер Apache Lounge VC11 построен: 16 марта 2014 г. 12:42:59
[Пн Дек 22 09: 11: 59.170587 2014] [core: note] [pid 6600: tid 520] AH00094: Командная строка: 'c: \\ wamp \\ bin \\ apache \\ apache2.4.9 \\ bin \\ httpd.exe -d C: /wamp/bin/apache/apache2.4.9 '
[Пн Дек 22 09: 11: 59.170587 2014] [mpm_winnt: note] [pid 6600: tid 520] AH00418: Родитель: Создан дочерний процесс 4484
[Пн. Дек. 22 09: 11: 59.807339 2014] [mpm_winnt: note] [pid 4484: tid 436] AH00354: Дочерний элемент: запуск 64 рабочих потоков.

Я сделал var_dump, когда PDF его загружен

$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR .'test_pdf.pdf' );
var_dump($im);die;

Но страница закрывается, прежде чем войти в var_dump.

СЦЕНАРИИ ИСПЫТАНИЙ

  • PDF в JPG с использованием PHP на CommandLine> работает
  • PDF в JPG с использованием PHP-FPM из браузера> не работает (ошибка выше)
  • JPG в PDF с использованием PHP-FPM из браузера> работает

0

Решение

Вот соответствующие строки из мой delegates.xml, Однако я не использую ни Imagick, ни PHP, поэтому я не уверен, что это единственное изменение, которое нужно сделать, чтобы оно заработало.

Во-первых, форма, которая позволяет читать ее без горизонтальной прокрутки. Вы должны удалить разрывы строк, а также символы продолжения строки \ который я вставил:

<delegate decode="pdf" encode="eps" mode="bi" \
command="&quot;/opt/local/bin/gsx&quot; \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=epswrite&quot; \
&quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>

<delegate decode="pdf" encode="ps" mode="bi" \
command="&quot;/opt/local/bin/gsx&quot; \
-q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 \
-dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=ps2write&quot; \
&quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>

Теперь оригинальные строки. Вам нужно прокрутить горизонтально, чтобы увидеть его полностью и в его первоначальной форме:

<delegate decode="pdf" encode="eps" mode="bi" command="&quot;/opt/local/bin/gsx&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=epswrite&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>
<delegate decode="pdf" encode="ps" mode="bi" command="&quot;/opt/local/bin/gsx&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=ps2write&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>

Эти строки взяты из моей версии для Mac OS X ImageMagick, 6.9.0-0 Q16 x86_64 2014-12-06,

Как видите, он не использует @PSDelegate-синтаксис. Вместо этого он содержит полный путь к исполняемому файлу Ghostscript, в мой дело /opt/local/bin/gsx,

За ваш В этом случае это может быть полный путь Windows к исполняемому файлу Ghostscript, который обычно называется gswin32c.exe или же gswin64c.exe,

Ваша проблема со странным @PSDelegate возможно, происходит из-за того, что вы установили ImageMagick / Imagick до Вы установили Ghostscript, и только после этого установили Ghostscript ….

Обновить

Может быть, вы должны попробовать для установки Windows / Ghostscript следующие строки в вашем delegates.xml файл:

<delegate decode="pdf" encode="eps" mode="bi" command="&quot;C:/Program Files/gs/gs9.15/bin/gswin64c.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=epswrite&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>
<delegate decode="pdf" encode="ps" mode="bi" command="&quot;C:/Program Files/gs/gs9.15/bin/gswin64c.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 &quot;-sDEVICE=ps2write&quot; &quot;-sOutputFile=%o&quot; &quot;-f%i&quot;"/>

Заметка, вам не нужно использовать обратную косую черту (‘\‘) — Ghostscript и ImageMagick прекрасно работают с косой чертой (‘/‘) на Windows.

0

Другие решения

Меня устраивает :). Я уже несколько месяцев безуспешно пытался провести там установку.

Я просто следовал этой теме: Где найти php_imagick.dll для php 5.5.12 для Windows wampserver 2.5?

И после этого я скопировал / вставил C: /Path/to/ImageMagick/delegates.xml в C: /wamp/bin/php/php.5.5.12/ext/imagick и отредактировал тег делегата для pdf:

<delegate decode="eps" encode="pdf" mode="bi" command="&quot;C:\Program Files (x86)\gs\gs9.15\bin\gswin32c.exe&quot; -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -sDEVICE=pdfwrite &quot;-sOutputFile=%o&quot; -- &quot;%i&quot;"/>
1

По вопросам рекламы [email protected]