ImageMagick с PHP-текстом, переполняющим PDF в JPG - PullRequest
0 голосов
/ 04 января 2019

Сейчас я пытаюсь конвертировать PDF-файл в JPG, используя ImageMagick с PHP и CakePHP. PDF-файл в идеальной форме, и это правильно, как и должно быть, но изображение, сгенерированное из PDF-файла, всегда выходит за границы файла.

До сих пор я безуспешно пытался настроить код для генерации, много читая из документации PHP (http://php.net/manual/pt_BR/book.imagick.php).

Вот код конверсии:

            $image = new Imagick();
            $image->setResolution(300,300);
            $image->setBackgroundColor('white');
            $image->readImage($workfile);
            $image->setGravity(Imagick::GRAVITY_CENTER);
            $image->setOption('pdf:fit-to-page',true);
            $image->setImageFormat('jpeg');
            $image->setImageCompression(imagick::COMPRESSION_JPEG);
            $image->setImageCompressionQuality(60);
            $image->scaleImage(1200,1200, true);
            $image->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
            $image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
            $image->writeImage(WWW_ROOT . 'files' . DS . 'Snapshots' . DS . $filename);

Вот результаты: https://imgur.com/a/ISBmDMv

Первое изображение - это PDF-файл перед преобразованием, а второе - изображение, сгенерированное из PDF-файла, в котором текст с правой стороны переполняется.

Итак, почему это происходит? И если у кого-то есть альтернатива для какой-либо используемой технологии (GhostScript, ImageMagick и т. Д.), Также приветствуется!

Спасибо всем!

1 Ответ

0 голосов
/ 04 января 2019

Очень трудно сказать, почему вы видите результат, который вы видите, не видя оригинальный файл PDF, а не его изображение.

Наиболее вероятным объяснением является то, что ваш исходный файл PDF использует шрифт, но не встраивает этот шрифт в PDF. Когда Ghostscript приходит для рендеринга его в изображение, он должен заменить «что-то» вместо отсутствующего шрифта. Если метрики (например, интервалы) замещенного шрифта не совпадают точно с метриками отсутствующего шрифта, то отображаемый текст будет неуместен / имеет неправильный размер. Конечно, поскольку он не использует тот же шрифт, он также не будет соответствовать форме символов.

Это может привести к нескольким видам проблем, но то, что вы показываете, довольно типично для одного такого класса проблем. Хотя вы не упомянули об этом, я также вижу несколько мест в документе, где текст также перезаписывается, что является еще одним симптомом точно такой же проблемы.

Если это так, то транскрипт обратного канала Ghostscript скажет вам, что он не смог найти шрифт, и подставляет именованный шрифт вместо отсутствующего. Я не могу сказать вам, если Imagemagick хранит это где-нибудь, я думаю, что это не так. Однако вы можете скопировать командную строку из файла ImagMagick profile.xml, а затем использовать ее для самостоятельного запуска Ghostscript, и тогда вы сможете увидеть, происходит ли это.

Если это то, что происходит, то вы должны либо;

  1. Создайте свой PDF-файл со встроенными шрифтами (в любом случае, это хорошая практика)
  2. Поставьте Ghostscript копию отсутствующего шрифта вместо
  3. Живи с текстом как есть
...