Come posso convertire un documento PDF in un'immagine di anteprima in PHP? [chiuso]


199

Quali librerie, estensioni ecc. Sarebbero necessarie per eseguire il rendering di una parte di un documento PDF in un file di immagine?

La maggior parte delle librerie di PDF PHP che ho trovato incentrato sulla creazione di documenti PDF, ma esiste un modo semplice per rendere un documento in un formato immagine adatto all'uso web?

Il nostro ambiente è uno stack LAMPADA.


Mi piacerebbe poterlo fare e avere il file con .jpgestensione. Ho provato il metodo .htaccess AddHandler e non ha funzionato.
Keyslinger,

Risposte:


228

Hai bisogno ImageMagickeGhostScript

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

I [0]mezzi page 1.


11
sì funziona. Puoi anche fare: $ im-> setResolution (300, 300) per esempio per rendere il tuo pdf alla risoluzione del desiderio.
Luis Melgratti,

6
Non l'ho provato, ma se stai usando Google Documenti e non ti dispiace l'iFrame, questo suggerimento potrebbe funzionare (è anche un plugin wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David

4
ma come includere ImageMagick e GhostScript nel file php
namratha,

1
@ think123 use $im->thumbnailImage(1500, 0);Che imposterà la tua immagine jpg su una larghezza di 1500 e manterrà la scala. Vedi documentazione
Kevin Jantzer,

1
Dalla mia risposta di seguito - Se stai caricando il PDF da un BLOB, ecco come ottenere la prima pagina anziché l'ultima: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson,

34

Per coloro che non hanno ImageMagick per qualsiasi motivo, le funzioni GD funzioneranno anche, in combinazione con GhostScript. Esegui il comando ghostscript con exec()per convertire un PDF in JPG e manipola il file risultante conimagecreatefromjpeg() .

Esegui il comando ghostscript:

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

Per manipolare, crea una nuova immagine segnaposto $newimage = imagecreatetruecolor(...)e porta l'immagine corrente. $image = imagecreatefromjpeg('whatever.jpg'), quindi è possibile utilizzare imagecopyresampled()per modificare le dimensioni o qualsiasi numero di altri non- imagemagickcomandi incorporati


3
Per ottenere semplicemente un'immagine della prima pagina, aggiungi l'opzione -dFirstPage = 1 -dLastPage = 1 al comando.
Tim Dearborn,

Se il problema persiste, potrebbe essere necessario fornire il percorso completo al file gsbinario.
allungato il

Sembra che stia eseguendo un comando di sistema. Cosa succede se l'utente carica un file denominato something;rm -rf /?
iProgramma

Se voglio convertire tutte le pagine del pdf in immagini. allora come fare?
Dhara,

31

Puoi anche ottenere il conteggio delle pagine usando

$im->getNumberImages();

Quindi puoi creare i pollici di tutte le pagine usando un loop, ad es.

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

34
(Questo in realtà dovrebbe essere un commento sulla risposta di Paolo Bergantino)
Simon East

risposta intelligente. non dato da altri ma si nota e scritto.
Ashu Kumar,

16

Usa l'estensione php Imagick . Per controllare la dimensione desiderata dell'immagine di output raster, utilizzare la funzione 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;
?>

(Estensione di Paolo Bergantino alla sua risposta e Luis Melgratti al suo commento. Devi impostare la risoluzione prima di caricare l'immagine.)


11

Se stai caricando il PDF da un BLOB, è così che ottieni la prima pagina anziché l'ultima:

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

10
(Questo in realtà dovrebbe essere un commento sulla risposta di Paolo Bergantino)
Simon East

9

Puoi anche provare a eseguire l'utilità 'convert' fornita con imagemagick.

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

3
Invece di pdf_doc.pdf, è preferito pdf_doc.pdf [0].
John Kurlak,

convert fa parte del pacchetto ImageMagick; prova sudo yum installa ImageMagick
Jack Miller il

Se il problema persiste, potrebbe essere necessario fornire il percorso completo al file convertbinario.
allungato il

1
echo 'image-0.jpg';restituisce una stringa.
suz

ha funzionato per me, grazie
Isabella il

4

Sono l'autore di PDFlib che è un wrapper GhostScript per php, il vantaggio di usare questa libreria è, è già testato e non richiedeImageMagic

I GhostScriptcomandi sono sempre più veloci di ImageMagicquando si tratta di pdf, quindi dovresti scegliere un wrapper GhostScript o comandi GhostScript puri

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

Ciao, sto usando il tuo PDFlib per creare file PNG da PDF. $ pdflib = new 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 ha un'opzione per impostare la larghezza e l'altezza dei file PNG creati?
WGS

Ciao, nessun PDFLib non fornisce metodi per manipolare le immagini ma puoi farlo in questo modo. una volta generati i png usando PDFLib puoi usare un'altra libreria di manipolazione di immagini come github.com/Treinetic/ImageArtist per completare il tuo lavoro ...
imal hasaranga perera

per favore prova il metodo sopra che ho suggerito ma se stai ancora lottando mandami una mail a imal@treinetic.com e ti aiuterò con un codice di esempio ... evviva !!
imal hasaranga perera

Proverò. Grazie per il suggerimento
WGS

3

Installo finito! Ha funzionato!

È possibile eseguire l' installazione di base imagemagick su Windows.

In php (local)uso chiama 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");    
?>

Inoltre, potresti essere utilizzato class imagicknella classe Imagick di PHP

Grazie a tutti mi ha aiutato!


2

Pensa diversamente, puoi usare la seguente libreria per convertire pdf in immagini usando javascript

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


Se voglio visualizzare l'immagine di anteprima nel server come possiamo usarla?
Chithra,

Puoi dare un'occhiata a questo: github.com/scandel/pdfThumbnails . Penso che puoi caricare la miniatura dell'immagine generata qui accanto al file effettivo e salvarla, in questo modo risparmierai più tempo di calcolo sul tuo server (poiché il processo di anteprima è stato eseguito in un computer lato client).
sajed zarrinpour,

1

Ecco una semplice classe che ho scritto e usato in un paio di progetti. Avvolge imagicke gestisce semplicemente la scrittura di ogni pagina sul disco. Se qualcuno è ancora alla ricerca di un modo semplice per farlo, questo link potrebbe essere utile.


2
Le risposte di solo collegamento hanno un valore basso su StackOverflow perché se il collegamento si sposta o muore, la risposta viene resa assolutamente inutile. Per migliorare la tua risposta, la maggior parte della tua soluzione dovrebbe essere codificata qui.
Mickmackusa,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.