Как преобразовать PDF-документ в изображение предварительного просмотра в PHP?

Какие библиотеки, расширения и т. Д. Должны были бы отображать часть PDF-документа в файл изображения?

Большинство PHP-библиотек PDF, которые я нашел вокруг создания PDF-документов, но есть ли простой способ сделать документ в формате изображения, подходящем для использования в Интернете?

Наша среда – это стек LAMP.

Вам нужны ImageMagick и GhostScript

 <?php $im = new imagick('file.pdf[0]'); $im->setImageFormat('jpg'); header('Content-Type: image/jpeg'); echo $im; ?> 

[0] означает page 1 .

Для тех, у кого нет ImageMagick по какой-либо причине, функции GD также будут работать вместе с GhostScript. Запустите команду ghostscript с помощью exec() чтобы преобразовать PDF в JPG, и обработать полученный файл с помощью imagecreatefromjpeg() .

Запустите команду ghostscript:

 exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf') 

Чтобы манипулировать, создайте новый образ заполнителя, $newimage = imagecreatetruecolor(...) и $newimage = imagecreatetruecolor(...) текущее изображение. $image = imagecreatefromjpeg('whatever.jpg') , а затем вы можете использовать imagecopyresampled() для изменения размера или любого количества других встроенных команд без imagemagick

Вы также можете получить счетчик страниц, используя

 $im->getNumberImages(); 

Затем вы можете создавать большие пальцы всех страниц, используя цикл, например.

 'file.pdf['.$x.']' 

Используйте расширение php Imagick . Чтобы управлять желаемым размером растрового выходного изображения, используйте функцию setResolution

 <?php $im = new Imagick(); $im->setResolution(300, 300); //set the resolution of the resulting jpg $im->readImage('file.pdf[0]'); //[0] for the first page $im->setImageFormat('jpg'); header('Content-Type: image/jpeg'); echo $im; ?> 

(Расширение на Паоло Бергантино его ответа и Луиса Мельгратти его комментарий. Вам нужно установить разрешение перед загрузкой изображения.)

Если вы загружаете PDF из блоба, вы получаете первую страницу вместо последней страницы:

 $im->readimageblob($blob); $im->setiteratorindex(0); 

Вы также можете попробовать выполнить утилиту «convert», которая поставляется вместе с imagemagick.

 exec("convert pdf_doc.pdf image.jpg"); echo 'image-0.jpg'; 

Я устанавливаю законченный! Это сработало!

Вы можете сделать базовую установку imagemagick на окнах.

В php (local) используйте call exec(<command line>) ex:

 <?php $pdf = "filename.pdf"; $info = pathinfo($pdf); $file_name = basename($pdf,'.'.$info['extension']); echo $file_name; $pdf = "filename.pdf[0]"; exec("convert $pdf convert-img/$file_name.jpg"); ?> 

Кроме того, вы можете использовать class imagick в классе PHP Imagick

Спасибо, все мне помогли!

Я автор PDFlib, который является оболочкой GhostScript для php, преимущество использования этой библиотеки, она уже протестирована и не требует ImageMagic

Всегда команды GhostScript быстрее, чем ImageMagic когда дело доходит до формата pdf, поэтому вам нужно либо пойти на оболочку GhostScript, либо команды чистого GhostScript

 $pdflib = new ImalH\PDFLib\PDFLib(); $pdflib->setPdfPath($pdf_file_path); $pdflib->setOutputPath($folder_path_for_images); $pdflib->convert(); 

Вот простой класс, который я написал и использовал в нескольких проектах. Он просто обертывает imagick и обрабатывает каждую страницу на диск. Если кто-то все еще ищет простой способ сделать это, эта ссылка может быть полезна.