PDF belgesini PHP'deki önizleme görüntüsüne nasıl dönüştürebilirim? [kapalı]


199

PDF belgesinin bir bölümünü bir görüntü dosyasına dönüştürmek için hangi kitaplıklar, uzantılar vb. Gerekir?

Bulduğum çoğu PHP PDF kütüphanesi, PDF belgeleri oluşturma etrafında merkez alıyor, ancak bir belgeyi web kullanımına uygun bir görüntü biçimine dönüştürmenin basit bir yolu var mı?

Çevremiz bir LAMP yığınıdır.


Bunu yapmak ve dosya bir .jpguzantısı var isteriz . .Htaccess AddHandler yöntemini denedim ve işe yaramadı.
Keyslinger

Yanıtlar:


228

İhtiyacın var ImageMagickveGhostScript

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

[0]Anlamına gelir page 1.


11
Evet çalışıyor. Ayrıca şunları yapabilirsiniz: $ im-> setResolution (300, 300), örneğin pdf'nizi arzu çözünürlüğünde oluşturmak için.
Luis Melgratti


4
ama php dosyasına ImageMagick ve GhostScript nasıl dahil edilir
namratha 29:13

1
@ think123 use $im->thumbnailImage(1500, 0);jpg resminizi 1500 genişliğe ayarlayacak ve ölçeği koruyacaktır. Belgelere bakın
Kevin Jantzer

1
Aşağıdaki cevabımdan - PDF'yi bir blobdan yüklüyorsanız, son sayfa yerine ilk sayfayı bu şekilde elde edersiniz: $ im-> readimageblob ($ blob); $ im-> setIteratorIndex (0);
jrjohnson

34

Hangi nedenle olursa olsun ImageMagick'e sahip olmayanlar için GD fonksiyonları GhostScript ile birlikte de çalışacaktır. exec()PDF'yi JPG'ye dönüştürmek için ghostscript komutunu çalıştırın ve elde edilen dosyayı ile değiştirin imagecreatefromjpeg().

Ghostscript komutunu çalıştırın:

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

Değiştirmek için yeni bir yer tutucu resim oluşturun $newimage = imagecreatetruecolor(...)ve mevcut resmi getirin. $image = imagecreatefromjpeg('whatever.jpg')ve ardından imagecopyresampled()boyutunu veya herhangi bir sayıda yerleşik olmayan, imagemagickkomut olmayan komutları değiştirmek için kullanabilirsiniz .


3
Sadece ilk sayfanın görüntüsünü almak için, komuta -dFirstPage = 1 -dLastPage = 1 anahtarlarını ekleyin.
Tim Dearborn

Hala çalışmıyorsa, gsikili dosyaya giden tam yolu vermeniz gerekebilir .
craned

Bu bir sistem komutu çalıştırıyor gibi görünüyor. Kullanıcı adlı bir dosya yüklerse ne olur something;rm -rf /?
iProgram

Tüm pdf sayfa görüntüye dönüştürmek istiyorum. o zaman nasıl yapılır?
Dhara

31

Sayfa sayısını ayrıca

$im->getNumberImages();

Ardından, bir döngü kullanarak tüm sayfaların resimlerini oluşturabilirsiniz, örn.

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

34
(Bu aslında Paolo Bergantino'nun cevabı hakkında bir yorum olmalı)
Simon East

zekice cevap. başkaları tarafından verilmiyor ama fark ettiniz ve yazdınız.
Ashu Kumar

16

Imagick php uzantısını kullanın . Raster çıktı görüntüsünün istenen boyutunu kontrol etmek için setResolution işlevini kullanın

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

(Paolo Bergantino'nun yanıtı ve Luis Melgratti'nin yorumu hakkında uzatma. Görüntüyü yüklemeden önce çözünürlüğü ayarlamanız gerekiyor.)


11

PDF'yi bir bloktan yüklüyorsanız, son sayfa yerine ilk sayfayı şu şekilde elde edersiniz:

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

10
(Bu aslında Paolo Bergantino'nun cevabı hakkında bir yorum olmalı)
Simon East

9

Ayrıca imagemagick ile gelen 'convert' yardımcı programını çalıştırmayı deneyebilirsiniz.

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

3
Pdf_doc.pdf yerine pdf_doc.pdf [0] tercih edilir.
John Kurlak

convert paketinin bir parçasıdır ImageMagick; sudo yum yüklemeyi dene ImageMagick
Jack Miller

Hala çalışmıyorsa, convertikili dosyaya giden tam yolu sağlamanız gerekebilir .
craned

1
echo 'image-0.jpg';bir dize döndürür.
suz

benim için çalıştı, teşekkürler
Isabella

4

Ben php için bir GhostScript sarıcı olan PDFlib'in yazarıyım , bu kütüphaneyi kullanmanın avantajı, zaten test edilmiş ve gerektirmiyorImageMagic

Her zaman GhostScriptkomutlar pdf'den daha hızlıdır ImageMagic, bu yüzden bir GhostScript sarıcısı veya saf GhostScript komutları almalısınız

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();

Merhaba, PDF'lerden PNG oluşturmak için PDFlib'inizi kullanıyorum. $ pdflib = yeni 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-> dönüştürme (); PDFlib'de oluşturulan PNG dosyalarının genişliğini ve yüksekliğini ayarlama seçeneği var mı?
WGS

Merhaba, hiçbir PDFLib görüntüleri manipüle etmek için yöntemler sağlamaz, ancak bunu yapabilirsiniz. PDFLib kullanarak png oluşturduktan sonra işinizi yapmak için github.com/Treinetic/ImageArtist gibi başka bir Görüntü manipülasyon kütüphanesi kullanabilirsiniz ...
imal hasaranga perera

Lütfen önerdiğim yukarıdaki yöntemi deneyin, ancak hala mücadele ediyorsanız bana imal@treinetic.com adresine bir posta gönderin ve size örnek bir kodla yardım edeceğim ... Şerefe !!
imal hasaranga perera

Bir deneyeceğim. Önerin için teşekkürler.
WGS

3

Yükleme bitti! İşe yaradı!

Windows üzerinde temel kurulum imagemagick yapmak olabilir .

Gelen php (local)kullanım çağrı 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");    
?>

Ayrıca, kullanım olabilir class imagickiçinde PHP IMagic sınıfında

Teşekkürler bana yardımcı oldu!


2

Farklı düşünün, javascript kullanarak pdf resme dönüştürmek için aşağıdaki kütüphaneyi kullanabilirsiniz

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


Önizleme görüntüsünü sunucuda görüntülemek istersem bunu nasıl kullanabiliriz?
chithra

Şuna bir göz atmak isteyebilirsiniz: github.com/scandel/pdfThumbnails . Burada oluşturulan görüntü küçük resmini gerçek dosyanın yanında yükleyebilir ve kaydedebilirsiniz, bu şekilde sunucunuzda daha fazla hesaplama süresi kaydedersiniz (küçük resim işlemi istemci tarafı bir bilgisayarda yapıldığından).
sajed zarrinpour

1

İşte birkaç projede yazdığım ve kullandığım basit bir sınıf. Sadece imagickher sayfayı diske yazmayı sarar ve işler. Birisi hala bunu yapmanın kolay bir yolunu arıyorsa, bu bağlantı yardımcı olabilir.


2
LinkOverflow'da yalnızca bağlantı cevapları düşük değerlidir, çünkü bağlantı hareket ederse veya ölürse cevap kesinlikle işe yaramaz hale gelir. Cevabınızı iyileştirmek için, çözümünüzün büyük kısmı burada kodlanmalıdır.
mickmackusa
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.