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

199

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

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

Наше окружение - это LAMP-стек.

Мэтью Бирн
источник
Я хотел бы иметь возможность сделать это и иметь .jpgрасширение файла . Я попробовал метод AddHandler .htaccess, и он не работал.
Кейслингер

Ответы:

228

Вам нужно ImageMagickиGhostScript

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

В [0]средства page 1.

Паоло Бергантино
источник
11
Да, это работает. Вы также можете сделать: $ im-> setResolution (300, 300), например, для рендеринга вашего PDF в желаемом разрешении.
Луис Мелгратти
6
Я не пробовал, но если вы используете документы Google и не возражаете против iFrame, это предложение может сработать (это также плагин wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
Дэвид Хобс
4
но как включить ImageMagick и GhostScript в файл php
namratha
1
@ think123 use $im->thumbnailImage(1500, 0);Это установит ширину вашего изображения в формате jpg и сохранит масштаб. Смотрите документацию
Кевин Янцер
1
Из моего ответа ниже - Если вы загружаете PDF из блоба, вы получаете первую страницу вместо последней: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
Джронсон
34

Для тех, у кого по какой-либо причине нет 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(...)и введите текущее изображение. $image = imagecreatefromjpeg('whatever.jpg'), А затем вы можете использовать , imagecopyresampled()чтобы изменить размер, или любое количество других встроенными, не являющихся imagemagickкоманд

Андрей
источник
3
Чтобы просто получить изображение первой страницы, добавьте в команду ключи -dFirstPage = 1 -dLastPage = 1.
Тим Дирборн
Если он все еще не работает, вам может потребоваться указать полный путь к gsдвоичному файлу .
вытянут
Похоже, что он запускает системную команду. Что если пользователь загрузит файл с именем something;rm -rf /?
iProgram
Если я хочу, чтобы все страницы PDF, чтобы преобразовать в изображение. тогда как это сделать?
Дхара
31

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

$im->getNumberImages();

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

'file.pdf['.$x.']'
Джейсон
источник
34
(Это должен быть комментарий к ответу Паоло Бергантино)
Саймон Ист
умный ответ. не дано другим, но вы заметили и написали.
Ашу Кумар
16

Используйте расширение 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;
?>

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

Себастьян
источник
11

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

$im->readimageblob($blob);
$im->setiteratorindex(0);
jrjohnson
источник
10
(На самом деле это должен быть комментарий к ответу Паоло Бергантино)
Саймон Ист
9

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

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Preet Sandhu
источник
3
Вместо pdf_doc.pdf предпочтительным является pdf_doc.pdf [0].
Джон Курлак
convert является частью пакета ImageMagick; попробуй sudo yum установить ImageMagick
Джек Миллер
Если он все еще не работает, вам может потребоваться указать полный путь к convertдвоичному файлу .
вытянул руку
1
echo 'image-0.jpg';возвращает строку
Suz
работал на меня, спасибо
Изабелла
4

Я являюсь автором 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();
Имал Хасаранга Перера
источник
Привет, я использую вашу PDFlib для создания PNG из PDF-файлов. $ pdflib = new ImalH \ PDFLib \ PDFLib (); $ pdflib-> setPdfPath ($ pdf_file_path); $ pdflib-> setOutputPath ($ folder_path_for_images); $ pdflib-> setImageFormat (\ ImalH \ PDFLib \ PDFLib :: $ IMAGE_FORMAT_PNG); $ pdflib-> setDPI (100); $ pdflib-> setPageRange (1, $ pdflib-> getNumberOfPages ()); $ pdflib-> Convert (); Есть ли в PDFlib возможность устанавливать ширину и высоту создаваемых файлов PNG?
WGS
Привет, ни один PDFLib не предоставляет методы для работы с изображениями, но вы можете сделать это следующим образом. после того, как вы сгенерировали png-файлы с использованием PDFLib, вы можете использовать другую библиотеку для работы с изображениями, например github.com/Treinetic/ImageArtist, чтобы выполнить свою работу ...
imal hasaranga perera
Пожалуйста, попробуйте вышеупомянутый метод, который я предложил, но если вы все еще не можете отправить мне письмо на imal@treinetic.com, и я помогу вам с примером кода ... ура !!
Имал Хасаранга Перера
Я попробую. Спасибо за предложение.
WGS
3

Я установил готово! Это сработало!

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

В php (local)использовании звоните 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

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

Duy Khanh
источник
2

Подумайте иначе: вы можете использовать следующую библиотеку, чтобы конвертировать PDF в изображение, используя JavaScript

http://usefulangle.com/post/24/pdf-to-jpeg-png-with-pdfjs

jewelhuq
источник
Если я хочу отобразить изображение предварительного просмотра на сервере, как мы можем это использовать?
Читр
Вы можете взглянуть на это: github.com/scandel/pdfThumbnails . Я думаю, что вы можете загрузить миниатюру изображения, сгенерированную здесь, вместе с реальным файлом и сохранить его, таким образом вы сэкономите больше вычислительного времени на вашем сервере (поскольку процесс миниатюры выполнялся на клиентском компьютере).
Саид Зарринпур
1

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

user664995
источник
2
Ответы только для ссылок имеют низкое значение в StackOverflow, потому что, если ссылка перемещается или умирает, ответ представляется абсолютно бесполезным. Чтобы улучшить ваш ответ, основная часть вашего решения должна быть здесь жестко задана.
mickmackusa