Bagaimana cara mengonversi dokumen PDF ke gambar pratinjau dalam PHP? [Tutup]

199

Pustaka, ekstensi, dll. Apa yang diperlukan untuk merender sebagian dokumen PDF ke file gambar?

Sebagian besar perpustakaan PDF PHP yang saya temukan terpusat pada pembuatan dokumen PDF, tetapi apakah ada cara sederhana untuk membuat dokumen ke format gambar yang cocok untuk penggunaan web?

Lingkungan kami adalah tumpukan LAMP.

Mathew Byrne
sumber
Saya akan senang dapat melakukan ini dan memiliki file yang memiliki .jpgekstensi. Saya mencoba metode .htaccess AddHandler dan tidak berhasil.
Keyslinger

Jawaban:

228

Anda membutuhkan ImageMagickdanGhostScript

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

The [0]berarti page 1.

Paolo Bergantino
sumber
11
ya, itu berhasil. Anda juga dapat melakukan: $ im-> setResolution (300, 300) misalnya untuk membuat pdf Anda pada resolusi keinginan.
Luis Melgratti
6
Saya belum mencobanya, tetapi jika Anda menggunakan google docs, dan tidak keberatan dengan iFrame, saran ini mungkin berfungsi (ini juga plugin wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David Hobs
4
tetapi bagaimana memasukkan ImageMagick dan GhostScript dalam file php
namratha
1
@ think123 use $im->thumbnailImage(1500, 0);Itu akan mengatur gambar jpg Anda menjadi lebar 1500 dan mempertahankan skala. Lihat dokumentasi
Kevin Jantzer
1
Dari jawaban saya di bawah ini - Jika Anda memuat PDF dari gumpalan, inilah cara Anda mendapatkan halaman pertama alih-alih halaman terakhir: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson
34

Bagi mereka yang tidak memiliki ImageMagick untuk alasan apa pun, fungsi GD juga akan berfungsi, bersama dengan GhostScript. Jalankan perintah ghostscript dengan exec()untuk mengkonversi PDF ke JPG, dan memanipulasi file yang dihasilkan dengan imagecreatefromjpeg().

Jalankan perintah ghostscript:

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

Untuk memanipulasi, buat gambar placeholder baru $newimage = imagecreatetruecolor(...),, dan bawa gambar saat ini. $image = imagecreatefromjpeg('whatever.jpg'), dan kemudian Anda dapat menggunakan imagecopyresampled()untuk mengubah ukuran, atau sejumlah imagemagickperintah lain yang tidak terpasang

Andrew
sumber
3
Untuk mendapatkan gambar halaman pertama, tambahkan sakelar -dFirstPage = 1 -dLastPage = 1 ke perintah.
Tim Dearborn
Jika masih tidak berfungsi, Anda mungkin perlu memberikan path lengkap ke gsbiner.
derek
Ini seperti menjalankan perintah sistem. Bagaimana jika pengguna mengunggah file bernama something;rm -rf /?
iProgram
Jika saya ingin semua halaman pdf dikonversi menjadi gambar. lalu gimana caranya?
Dhara
31

Anda juga bisa mendapatkan jumlah halaman menggunakan

$im->getNumberImages();

Kemudian Anda bisa membuat jempol dari semua halaman menggunakan loop, misalnya.

'file.pdf['.$x.']'
Jason
sumber
34
(Ini seharusnya menjadi komentar atas jawaban Paolo Bergantino)
Simon East
jawaban yang cerdas. tidak diberikan oleh orang lain tetapi Anda perhatikan dan tulis.
Ashu Kumar
16

Gunakan ekstensi php Imagick . Untuk mengontrol ukuran gambar raster yang diinginkan, gunakan fungsi 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;
?>

(Perpanjangan pada Paolo Bergantino jawabannya dan Luis Melgratti komentarnya. Anda perlu mengatur resolusi sebelum memuat gambar.)

Sebastian
sumber
11

Jika Anda memuat PDF dari gumpalan, beginilah cara Anda mendapatkan halaman pertama alih-alih halaman terakhir:

$im->readimageblob($blob);
$im->setiteratorindex(0);
jrjohnson
sumber
10
(Ini seharusnya menjadi komentar atas jawaban Paolo Bergantino)
Simon East
9

Anda juga dapat mencoba menjalankan utilitas 'convert' yang dilengkapi dengan imagemagick.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Preet Sandhu
sumber
3
Alih-alih pdf_doc.pdf, pdf_doc.pdf [0] lebih disukai.
John Kurlak
convert adalah bagian dari paket ImageMagick; coba sudo yum instal ImageMagick
Jack Miller
Jika masih tidak berfungsi, Anda mungkin perlu memberikan path lengkap ke convertbiner.
derek
1
echo 'image-0.jpg';mengembalikan sebuah string.
suz
bekerja untuk saya, terima kasih
Isabella
4

Saya penulis PDFlib yang merupakan pembungkus GhostScript untuk php, keuntungan menggunakan perpustakaan ini adalah, ini sudah diuji dan tidak perluImageMagic

Selalu GhostScriptperintah lebih cepat daripada ImageMagicketika datang ke pdf sehingga Anda harus baik pergi untuk pembungkus GhostScript atau perintah GhostScript murni

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
imal hasaranga perera
sumber
Hai, saya menggunakan PDFlib Anda untuk membuat PNG dari PDF. $ pdflib = baru 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 (); Apakah PDFlib memiliki opsi untuk mengatur lebar dan tinggi file PNG yang dibuat?
WGS
Hai, tidak ada PDFLib tidak menyediakan metode untuk memanipulasi gambar tetapi Anda dapat melakukannya seperti ini. setelah Anda membuat png menggunakan PDFLib, Anda dapat menggunakan libraray manipulasi gambar lain seperti github.com/Treinetic/ImageArtist untuk menyelesaikan pekerjaan Anda ...
imal hasaranga perera
silakan coba metode di atas yang saya sarankan, tetapi jika Anda masih kesulitan, kirimkan saya email ke [email protected] dan saya akan membantu Anda dengan kode sampel ... tepuk tangan !!
imal hasaranga perera
Saya akan mencoba. Terima kasih untuk sarannya.
WGS
3

Saya menginstal selesai! Itu berhasil!

Anda mungkin melakukan instalasi dasar imagemagick pada windows.

Di php (local)telepon exec(<command line>) bekas pakai :

<?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");    
?>

Selain itu, Anda dapat menggunakannya class imagickdi kelas PHP Imagick

Terima kasih semua membantu saya!

Duy Khanh
sumber
2

Berpikir berbeda, Anda dapat menggunakan pustaka berikut untuk mengonversi pdf ke gambar menggunakan javascript

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

permata
sumber
Jika saya ingin menampilkan gambar pratinjau di server bagaimana kami dapat menggunakannya?
chithra
Anda mungkin ingin melihatnya: github.com/scandel/pdfThumbnails . Saya pikir Anda dapat mengunggah gambar mini gambar yang dihasilkan di sini bersama file yang sebenarnya dan menyimpannya, dengan cara ini Anda akan menghemat lebih banyak waktu komputasi di server Anda (karena proses thumbnail dilakukan di komputer sisi klien).
sajed zarrinpour
1

Ini adalah kelas sederhana yang saya tulis dan gunakan pada beberapa proyek. Itu hanya membungkus imagickdan menangani menulis setiap halaman ke disk. Jika ada yang masih mencari cara mudah untuk melakukan ini, tautan ini mungkin bisa membantu.

pengguna664995
sumber
2
Jawaban khusus tautan adalah nilai rendah di StackOverflow karena jika tautan bergerak atau mati, jawaban itu benar-benar tidak berguna. Untuk meningkatkan jawaban Anda, sebagian besar solusi Anda harus di-hardcode di sini.
mickmackusa