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

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

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

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

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

Keyslinger 18.05.2016 23:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
205
1
261 089
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Ответ принят как подходящий

Вам нужны 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-файла с желаемым разрешением.

Luis Melgratti 22.01.2009 05:16

Я не пробовал, но если вы используете документы Google и не возражаете против iFrame, это предложение может сработать (это также плагин wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6

David Hobs 05.09.2012 05:27

но как включить ImageMagick и GhostScript в файл php

namratha 29.11.2013 10:41

@LuisMelgratti Хм, эта штучка с setResolution, похоже, не работает. Ставлю после строки $im = new imagick('file.pdf[0]'); из примера Паоло. Похоже, ничего не делает. Что, если мне нужно изображение из PDF-файла с шириной, скажем, 1500, высотой для масштабирования и высоким разрешением? Как бы я это сделал? Спасибо.

Lucas 18.01.2014 14:34

@ think123 использует $im->thumbnailImage(1500, 0); Это установит для вашего jpg-изображения ширину 1500 и сохранит масштаб. См. Документацию

Kevin Jantzer 21.01.2014 21:37

Сколько времени потребуется, чтобы построить Imagick, я не могу долго ждать, все еще строится ... есть кофе: D

Ravi Dhoriya ツ 13.02.2014 15:02

Из моего ответа ниже. Если вы загружаете PDF-файл из большого двоичного объекта, вы получаете первую страницу вместо последней: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);

jrjohnson 17.07.2014 07:58

@LuisMelgratti будет ли работать в windows 7 ??? Возможна ли установка в win 7 ??

user3784251 24.02.2015 19:34

Я попробовал, но это дало мне: "ошибка делегата не декодировать для этого формата изображения` \ path \ filename.pdf '@ error / Create.c / ReadImage / 532 ". Я пробовал $ exec = "convert -scale $ width $ source $ dest"; exec ($ exec); и это сработало как шарм.

Arvind K. 25.08.2016 10:11

Кто-нибудь из вас чувствовал, что это медленно? Я чувствовал, что это очень медленно, и хотел использовать только Ghostscript, который работает быстрее .. если кому-то из вас интересно, я написал обертку для него github.com/imalhasaranga/PDFLib

imal hasaranga perera 13.09.2016 06:21

@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

scott 15.09.2016 09:47

Вы можете мне помочь?

scott 15.09.2016 09:48

Установите формат изображения JPG, иначе изображение в PNG может отображаться некорректно. Большое спасибо ;)

Geoffrey Brier 30.01.2017 16:53

В случае, если ссылка Ghostscript умирает, вот страница Github: github.com/ArtifexSoftware/ghostpdl-downloads/releases

Chris Happy 01.02.2018 22:28

Я использовал это, но решил, что сервер сериализует / кеширует получившуюся миниатюру. В следующий раз, когда API запрашивают миниатюру, он проверяет, доступна ли кешированная миниатюра, и предоставляет это путем десериализации полученного изображения. Он сделал поиск эскизов с помощью этого метода невероятно быстрым, и я даже не храню их в базе данных. Вероятно, было бы даже быстрее, если бы правильно хранить в БД.

Robert Talada 29.07.2019 17:42

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

$im->getNumberImages();

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

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

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

Simon East 18.12.2013 04:23

умный ответ. не дано другим, но вы заметили и написали.

Ashu Kumar 20.08.2018 14:50

Для тех, у кого нет 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.

Tim Dearborn 03.12.2013 22:44

Если он по-прежнему не работает, вам может потребоваться указать полный путь к двоичному файлу gs.

craned 29.01.2016 18:57

Похоже, выполняется системная команда. Что, если пользователь загрузит файл с именем something;rm -rf /?

iProgram 16.01.2018 18:37

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

Dhara 07.05.2018 11:03

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

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

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

Simon East 18.12.2013 04:24

Установка закончена! Это сработало!

Вы можете сделать базу установить 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, потому что, если ссылка перемещается или умирает, ответ становится абсолютно бесполезным. Чтобы улучшить ваш ответ, основная часть вашего решения должна быть жестко запрограммирована здесь.

mickmackusa 13.02.2019 08:39

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

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

Вместо pdf_doc.pdf предпочтительнее pdf_doc.pdf [0].

John Kurlak 14.08.2012 04:24

convert является частью пакета ImageMagick; попробуйте sudo yum install ImageMagick

Jack Miller 18.11.2014 08:35

Если он по-прежнему не работает, вам может потребоваться указать полный путь к двоичному файлу convert.

craned 29.01.2016 18:58
echo 'image-0.jpg'; возвращает строку.
suz 01.12.2016 12:51

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

WGS 08.03.2018 15:27

Привет, ни один PDFLib не предоставляет методов для управления изображениями, но вы можете это сделать. как только вы сгенерировали png с помощью PDFLib, вы можете использовать другую библиотеку для работы с изображениями, например github.com/Treinetic/ImageArtist, чтобы выполнить свою работу ...

imal hasaranga perera 08.03.2018 15:31

пожалуйста, попробуйте метод, который я предложил выше, но если вы все еще испытываете трудности, отправьте мне письмо на [email protected], и я помогу вам с образцом кода ... ура !!

imal hasaranga perera 08.03.2018 15:34

Я попробую. Спасибо за предложение.

WGS 08.03.2018 15:38

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

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

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

chithra 14.02.2019 12:03

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

sajed zarrinpour 10.09.2019 14:16

Другие вопросы по теме