Jak przekonwertować dokument PDF na obraz podglądu w PHP? [Zamknięte]

199

Jakie biblioteki, rozszerzenia itp. Byłyby wymagane do renderowania części dokumentu PDF do pliku obrazu?

Większość bibliotek PHP PDF, które znalazłem, koncentruje się na tworzeniu dokumentów PDF, ale czy istnieje prosty sposób na wyrenderowanie dokumentu do formatu obrazu odpowiedniego do użycia w Internecie?

Nasze środowisko to stos LAMP.

Mathew Byrne
źródło
Chciałbym móc to zrobić, aby plik miał .jpgrozszerzenie. Wypróbowałem metodę AddHandler .htaccess i nie działała.
Keyslinger

Odpowiedzi:

228

Potrzebujesz ImageMagickiGhostScript

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

Te [0]środki page 1.

Paolo Bergantino
źródło
11
tak to działa. Możesz także zrobić: $ im-> setResolution (300, 300) na przykład, aby renderować pdf w pożądanej rozdzielczości.
Luis Melgratti
6
Nie próbowałem tego, ale jeśli używasz dokumentów Google i nie przeszkadza to iFrame, ta sugestia może działać (jest to również wtyczka wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David Hobs
4
ale jak dołączyć ImageMagick i GhostScript do pliku php
namratha
1
@ think123 use $im->thumbnailImage(1500, 0);To ustawi obraz jpg na szerokość 1500 i zachowa skalę. Zobacz dokumentację
Kevin Jantzer
1
Z mojej odpowiedzi poniżej - jeśli ładujesz plik PDF z obiektu blob, w ten sposób otrzymujesz pierwszą stronę zamiast ostatniej strony: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson
34

Dla tych, którzy nie mają ImageMagick z jakiegokolwiek powodu, będą działać również funkcje GD w połączeniu z GhostScript. Uruchom polecenie ghostscript, exec()aby przekonwertować plik PDF na JPG i manipulować plikiem wynikowym imagecreatefromjpeg().

Uruchom polecenie ghostscript:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=whatever.jpg input.pdf')

Aby manipulować, utwórz nowy obraz zastępczy $newimage = imagecreatetruecolor(...)i wprowadź bieżący obraz. $image = imagecreatefromjpeg('whatever.jpg'), a następnie możesz użyć imagecopyresampled()do zmiany rozmiaru lub dowolnej liczby innych wbudowanych imagemagickpoleceń niebędących poleceniami

Andrzej
źródło
3
Aby uzyskać obraz pierwszej strony, dodaj do polecenia przełączniki -dFirstPage = 1 -dLastPage = 1.
Tim Dearborn,
Jeśli nadal nie działa, być może trzeba podać pełną ścieżkę do gspliku binarnego.
ściągnął
Wygląda na to, że uruchamia polecenie systemowe. Co się stanie, jeśli użytkownik prześle plik o nazwie something;rm -rf /?
iProgram
Jeśli chcę, aby wszystkie strony pdf przekonwertować na obraz. jak to zrobić?
Dhara,
31

Możesz także uzyskać liczbę stron za pomocą

$im->getNumberImages();

Następnie możesz utworzyć kciuki wszystkich stron za pomocą pętli, np.

'file.pdf['.$x.']'
Jason
źródło
34
(To powinien być komentarz do odpowiedzi Paolo Bergantino)
Simon East
mądra odpowiedź. nie podane przez innych, ale zauważasz i piszesz.
Ashu Kumar,
16

Użyj rozszerzenia php Imagick . Aby kontrolować żądany rozmiar obrazu wyjściowego rastra, użyj funkcji 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;
?>

(Rozszerzenie na Paolo Bergantino jego odpowiedź i Luis Melgratti jego komentarz. Musisz ustawić rozdzielczość przed załadowaniem obrazu.)

Sebastian
źródło
11

Jeśli ładujesz plik PDF z obiektu blob, w ten sposób otrzymujesz pierwszą stronę zamiast ostatniej strony:

$im->readimageblob($blob);
$im->setiteratorindex(0);
jrjohnson
źródło
10
(To powinien być komentarz do odpowiedzi Paolo Bergantino)
Simon East
9

Możesz także spróbować uruchomić narzędzie do konwersji dostarczane z programem imagemagick.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Preet Sandhu
źródło
3
Zamiast pdf_doc.pdf zaleca się pdf_doc.pdf [0].
John Kurlak,
konwersja jest częścią pakietu ImageMagick; spróbuj sudo yum zainstalować ImageMagick
Jack Miller
Jeśli nadal nie działa, może być konieczne podanie pełnej ścieżki do convertpliku binarnego.
ściągnął
1
echo 'image-0.jpg';zwraca ciąg.
suz
pracował dla mnie, dzięki
Isabella
4

Jestem autorem PDFlib, który jest opakowarką GhostScript dla php, zaletą korzystania z tej biblioteki jest to, że jest już przetestowana i nie wymagaImageMagic

Zawsze GhostScriptpolecenia są szybsze niż w ImageMagicprzypadku pdf, więc powinieneś albo wybrać opakowanie GhostScript, albo tylko polecenia GhostScript

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
imal hasaranga perera
źródło
Cześć, używam twojego PDFlib do tworzenia plików PNG z plików PDF. $ pdflib = nowy 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 (); Czy PDFlib ma możliwość ustawienia szerokości i wysokości utworzonych plików PNG?
WGS,
Cześć, żaden PDFLib nie zapewnia metod manipulowania obrazami, ale możesz to zrobić w ten sposób. po wygenerowaniu PNG za pomocą PDFLib możesz użyć innej biblioteki do manipulacji obrazami, takiej jak github.com/Treinetic/ImageArtist, aby wykonać swoją pracę ...
imal hasaranga perera
wypróbuj powyższą metodę, którą zasugerowałem, ale jeśli nadal masz problemy, wyślij mi e-mail na adres [email protected], a pomogę ci z przykładowym kodem ... na zdrowie !!
imal hasaranga perera
Spróbuję. Dzieki za sugestie.
WGS,
3

Instaluję zakończone! Udało się!

Być może wykonasz instalację podstawową imagemagick w systemie Windows.

W php (local)użyciu zadzwoń 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");    
?>

Poza tym możesz używać class imagickw klasie PHP Imagick

Dzięki, wszystko mi pomogło!

Duy Khanh
źródło
2

Pomyśl inaczej, możesz użyć poniższej biblioteki, aby przekonwertować pdf na obraz za pomocą javascript

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

jewelhuq
źródło
Jeśli chcę wyświetlić podgląd obrazu na serwerze, jak możemy tego użyć?
chithra
Możesz rzucić okiem na to: github.com/scandel/pdfThumbnails . Myślę, że możesz przesłać wygenerowaną miniaturę obrazu obok rzeczywistego pliku i zapisać go, w ten sposób zaoszczędzisz więcej czasu obliczeniowego na serwerze (ponieważ proces tworzenia miniatur został wykonany na komputerze po stronie klienta).
sajed zarrinpour
1

Oto prosta klasa, którą napisałem i wykorzystałem w kilku projektach. Po prostu zawija imagicki obsługuje zapisywanie każdej strony na dysk. Jeśli ktoś nadal szuka łatwego sposobu na zrobienie tego, ten link może być pomocny.

użytkownik664995
źródło
2
Odpowiedzi zawierające tylko łącze mają niską wartość w StackOverflow, ponieważ jeśli łącze się poruszy lub umrze, odpowiedź stanie się absolutnie bezużyteczna. Aby poprawić swoją odpowiedź, większość Twojego rozwiązania powinna być tutaj zakodowana.
mickmackusa