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


199

Які бібліотеки, розширення тощо потрібні для надання частини документа PDF у файл зображення?

Більшість бібліотек PDF PHP, які я знайшов у центрі створення документів PDF, але чи є простий спосіб надати документ у формат зображення, придатний для використання в Інтернеті?

Наше оточення - це стек LAMP.


Мені б хотілося це зробити і мати файл, який має .jpgрозширення. Я спробував метод .htaccess AddHandler, і він не працював.
Кейслінгер

Відповіді:


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
David Hobs,

4
але як включити ImageMagick та GhostScript у файл php
намратха

1
@ think123 use $im->thumbnailImage(1500, 0);Це встановить ваше зображення у форматі jpg на ширину 1500 та збереже масштаб. Дивіться документацію
Кевін Джанцер

1
З моєї відповіді нижче - якщо ви завантажуєте PDF з блобу, саме так ви отримуєте першу сторінку замість останньої сторінки: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson

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
(Це насправді має бути коментар до відповіді Паоло Бергантіно)
Simon East

розумна відповідь. не дано іншими, але ви помітили і написали.
Ашу Кумар

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

Ви також можете спробувати виконати утиліту "конвертувати", що постачається з imagemagick.

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

3
Замість pdf_doc.pdf віддається перевага pdf_doc.pdf [0].
Джон Курлак

convert є частиною пакету ImageMagick; спробуй встановити sudo yum install 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 = новий 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 не забезпечує методів маніпулювання зображеннями, але ви можете зробити так. як тільки ви створили pngs за допомогою PDFLib, ви можете використовувати іншу бібліотеку маніпуляцій із зображеннями, як github.com/Treinetic/ImageArtist, щоб завершити вашу роботу ...
imal hasaranga perera

будь ласка, спробуйте описаний вище метод, який я запропонував, але якщо ви все ще намагаєтесь, надішліть мені електронний лист на imal@treinetic.com, і я допоможу вам зі зразком коду ... привіт !!
imal hasaranga perera

Я спробую. Дякую за пропозицію.
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


Якщо я хочу відобразити попереднє зображення на сервері, як ми можемо це використовувати?
chithra

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

1

Ось простий клас, який я написав і використовував у кількох проектах. Він просто обгортає imagickта обробляє написання кожної сторінки на диск. Якщо хтось все ще шукає простий спосіб зробити це, це посилання може бути корисним.


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