Я думаю, что проблема заключается в том, что мы вводим разрешение точек на дюйм из PDF-файла и выводим его в виде пикселей на дюйм при создании jpeg.
Этот код работает так, как кажется, для сохранения правильного соотношения сторон, и я могу разобрать pdf, который я использовал для тестирования. Но это не совсем понятно, я не могу читать текст. Вот что я использовал.
$pdfPath = $config['upload_path'] . '/' . $fileName;
$img = new imagick();
$img->setResolution(300, 300);
$img->readImage($pdfPath); //Open after yuo set resolution.
$img->setImageUnits(imagick::RESOLUTION_PIXELSPERINCH); //Declare the units for resolution.
$img->setImageFormat('jpeg');
$img->setImageCompression(imagick::COMPRESSION_JPEG);
$img->setImageCompressionQuality(100);
$img->writeImage($config['upload_path'] . '/' . str_replace('pdf', 'jpeg', $fileName));
$img->clear();
$img->destroy();
Из того, что я прочитал, вам может потребоваться установить Ghostscript на свой компьютер, и выполнение сценария из командной строки представляется предпочтительным и обеспечивает лучшие результаты и производительность.
Я нашел эту статью, и похоже, что она загружена кучей информации для форматов изображений и того, как imagemagik обрабатывает их. Там есть немного на PDFs.
http://www.imagemagick.org/Usage/formats/#tiff
Я мог бы заглянуть в библиотеку PHP PDF, в которой уже есть все встроенное. Нет смысла изобретать велосипед. Возможно, уже встроена функция, позволяющая сделать именно то, что вы пытаетесь сделать.