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.


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.


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


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.']'

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.)


11

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

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

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';

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();

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 imal@treinetic.com 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!


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


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.