Как мне преобразовать 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);

10
(На самом деле это должен быть комментарий к ответу Паоло Бергантино)
Саймон Ист

9

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

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

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

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


2

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

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


Если я хочу отобразить изображение предварительного просмотра на сервере, как мы можем это использовать?
Читр

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

1

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


2
Ответы только для ссылок имеют низкое значение в StackOverflow, потому что, если ссылка перемещается или умирает, ответ представляется абсолютно бесполезным. Чтобы улучшить ваш ответ, основная часть вашего решения должна быть здесь жестко задана.
mickmackusa
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.