Какие библиотеки, расширения и т. д. Потребуются для рендеринга части документа 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.
Да, это работает. Вы также можете сделать: $ im-> setResolution (300, 300), например, для рендеринга вашего pdf-файла с желаемым разрешением.
Я не пробовал, но если вы используете документы Google и не возражаете против iFrame, это предложение может сработать (это также плагин wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
но как включить ImageMagick и GhostScript в файл php
@LuisMelgratti Хм, эта штучка с setResolution, похоже, не работает. Ставлю после строки $im = new imagick('file.pdf[0]'); из примера Паоло. Похоже, ничего не делает. Что, если мне нужно изображение из PDF-файла с шириной, скажем, 1500, высотой для масштабирования и высоким разрешением? Как бы я это сделал? Спасибо.
@ think123 использует $im->thumbnailImage(1500, 0); Это установит для вашего jpg-изображения ширину 1500 и сохранит масштаб. См. Документацию
Сколько времени потребуется, чтобы построить Imagick, я не могу долго ждать, все еще строится ... есть кофе: D
Из моего ответа ниже. Если вы загружаете PDF-файл из большого двоичного объекта, вы получаете первую страницу вместо последней: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
@LuisMelgratti будет ли работать в windows 7 ??? Возможна ли установка в win 7 ??
Я попробовал, но это дало мне: "ошибка делегата не декодировать для этого формата изображения` \ path \ filename.pdf '@ error / Create.c / ReadImage / 532 ". Я пробовал $ exec = "convert -scale $ width $ source $ dest"; exec ($ exec); и это сработало как шарм.
Кто-нибудь из вас чувствовал, что это медленно? Я чувствовал, что это очень медленно, и хотел использовать только Ghostscript, который работает быстрее .. если кому-то из вас интересно, я написал обертку для него github.com/imalhasaranga/PDFLib
@Paolo Bergantino.i пробовал ваш пример, но я получаю следующую ошибку. Неустранимая ошибка: неперехваченное исключение 'ImagickException' с сообщением 'UnableToOpenBlob `file.pdf': нет такого файла или каталога @ error / blob.c / OpenBlob / 2657 'в D: \ xampp \ htdocs \ learn \ index.php: 39 Stack trace: # 0 D: \ xampp \ htdocs \ learn \ index.php (39): Imagick -> __ construct ('file.pdf') # 1 {main} добавлен в D: \ xampp \ htdocs \ learn \ index.php в строке 39
Вы можете мне помочь?
Установите формат изображения JPG, иначе изображение в PNG может отображаться некорректно. Большое спасибо ;)
В случае, если ссылка Ghostscript умирает, вот страница Github: github.com/ArtifexSoftware/ghostpdl-downloads/releases
Я использовал это, но решил, что сервер сериализует / кеширует получившуюся миниатюру. В следующий раз, когда API запрашивают миниатюру, он проверяет, доступна ли кешированная миниатюра, и предоставляет это путем десериализации полученного изображения. Он сделал поиск эскизов с помощью этого метода невероятно быстрым, и я даже не храню их в базе данных. Вероятно, было бы даже быстрее, если бы правильно хранить в БД.
Вы также можете получить количество страниц, используя
$im->getNumberImages();
Затем вы можете создать превью всех страниц, используя цикл, например.
'file.pdf['.$x.']'
(На самом деле это должен быть комментарий к ответу Паоло Бергантино)
умный ответ. не дано другим, но вы заметили и написали.
Для тех, у кого нет 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.
Чтобы просто получить изображение первой страницы, добавьте в команду переключатели -dFirstPage = 1 -dLastPage = 1.
Если он по-прежнему не работает, вам может потребоваться указать полный путь к двоичному файлу gs.
Похоже, выполняется системная команда. Что, если пользователь загрузит файл с именем something;rm -rf /?
Если я хочу, чтобы вся страница PDF была преобразована в изображение. тогда как делать?
Если вы загружаете PDF-файл из большого двоичного объекта, вы получаете первую страницу вместо последней:
$im->readimageblob($blob);
$im->setiteratorindex(0);
(На самом деле это должен быть комментарий к ответу Паоло Бергантино)
Установка закончена! Это сработало!
Вы можете сделать базу установить imagemagick на windows.
В php (local) используйте вызов exec(<command line>)
бывший:
<?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
Спасибо всем мне помогли!
Вот простой класс, который я написал и использовал в нескольких проектах. Он просто обертывает imagick и обрабатывает каждую страницу на диск. Если кто-то все еще ищет простой способ сделать это, может оказаться полезным эта ссылка.
Ответы только по ссылкам имеют низкую ценность в StackOverflow, потому что, если ссылка перемещается или умирает, ответ становится абсолютно бесполезным. Чтобы улучшить ваш ответ, основная часть вашего решения должна быть жестко запрограммирована здесь.
Вы также можете попробовать запустить утилиту convert, поставляемую с imagemagick.
exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Вместо pdf_doc.pdf предпочтительнее pdf_doc.pdf [0].
convert является частью пакета ImageMagick; попробуйте sudo yum install ImageMagick
Если он по-прежнему не работает, вам может потребоваться указать полный путь к двоичному файлу convert.
echo 'image-0.jpg'; возвращает строку.
Используйте расширение 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;
?>
(Расширение Паоло Бергантино его ответ и Луис Мелгратти его комментарий. Вам необходимо установить разрешение перед загрузкой изображения.)
Я автор PDFlib, который является оболочкой GhostScript для php, преимущество использования этой библиотеки в том, что она уже протестирована и не требует ImageMagic.
Когда дело доходит до pdf, команды GhostScript всегда быстрее, чем ImageMagic, поэтому вам следует либо использовать оболочку GhostScript, либо чистые команды GhostScript.
$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
Привет, я использую вашу PDFlib для создания PNG из PDF. $ pdflib = новый 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?
Привет, ни один PDFLib не предоставляет методов для управления изображениями, но вы можете это сделать. как только вы сгенерировали png с помощью PDFLib, вы можете использовать другую библиотеку для работы с изображениями, например github.com/Treinetic/ImageArtist, чтобы выполнить свою работу ...
пожалуйста, попробуйте метод, который я предложил выше, но если вы все еще испытываете трудности, отправьте мне письмо на [email protected], и я помогу вам с образцом кода ... ура !!
Я попробую. Спасибо за предложение.
Подумайте иначе, вы можете использовать следующую библиотеку для преобразования PDF в изображение с помощью javascript
http://usefulangle.com/post/24/pdf-to-jpeg-png-with-pdfjs
Если я хочу отобразить изображение предварительного просмотра на сервере, как мы можем это использовать?
Вы можете взглянуть на это: github.com/scandel/pdfThumbnails. Я думаю, вы можете загрузить сгенерированный здесь эскиз изображения вместе с фактическим файлом и сохранить его, таким образом вы сэкономите больше вычислительного времени на своем сервере (поскольку процесс создания эскизов выполнялся на клиентском компьютере).
Я хотел бы иметь возможность сделать это и иметь файл с расширением
.jpg. Я попробовал метод .htaccess AddHandler, и он не сработал.