Comment convertir un document PDF en une image d'aperçu en PHP? [fermé]

199

Quelles bibliothèques, extensions, etc. seraient nécessaires pour rendre une partie d'un document PDF dans un fichier image?

La plupart des bibliothèques PHP PDF que j'ai trouvées se concentrent sur la création de documents PDF, mais existe-t-il un moyen simple de rendre un document dans un format d'image adapté à une utilisation Web?

Notre environnement est une pile LAMP.

Mathew Byrne
la source
J'aimerais pouvoir le faire et avoir une .jpgextension du fichier . J'ai essayé la méthode AddHandler .htaccess et cela n'a pas fonctionné.
Keyslinger

Réponses:

228

Vous avez besoin ImageMagicketGhostScript

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

Les [0]moyens page 1.

Paolo Bergantino
la source
11
Oui cela fonctionne. Vous pouvez également faire: $ im-> setResolution (300, 300) par exemple pour rendre votre pdf à la résolution désirée.
Luis Melgratti
6
Je ne l'ai pas essayé, mais si vous utilisez google docs, et ne vous occupez pas de l'iFrame, cette suggestion pourrait fonctionner (c'est aussi un plugin wp) forrst.com/posts/PDF_thumbnails_with_Google_Docs-6G6
David Hobs
4
mais comment inclure ImageMagick et GhostScript dans un fichier php
namratha
1
@ think123 use $im->thumbnailImage(1500, 0);Cela définira votre image jpg sur une largeur de 1500 et conservera l'échelle. Voir la documentation
Kevin Jantzer
1
D'après ma réponse ci-dessous - Si vous chargez le PDF à partir d'un blob, voici comment vous obtenez la première page au lieu de la dernière page: $ im-> readimageblob ($ blob); $ im-> setiteratorindex (0);
jrjohnson
34

Pour ceux qui n'ont pas ImageMagick pour une raison quelconque, les fonctions GD fonctionneront également, en conjonction avec GhostScript. Exécutez la commande ghostscript avec exec()pour convertir un PDF en JPG et manipulez le fichier résultant avec imagecreatefromjpeg().

Exécutez la commande ghostscript:

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

Pour manipuler, créez une nouvelle image d'espace réservé $newimage = imagecreatetruecolor(...), et importez l'image actuelle. $image = imagecreatefromjpeg('whatever.jpg'), puis vous pouvez utiliser imagecopyresampled()pour modifier la taille, ou n'importe quel nombre d'autres non- imagemagickcommandes intégrées

Andrew
la source
3
Pour obtenir simplement une image de la première page, ajoutez les commutateurs -dFirstPage = 1 -dLastPage = 1 à la commande.
Tim Dearborn
Si cela ne fonctionne toujours pas, vous devrez peut-être donner le chemin d'accès complet au gsbinaire.
grue
Il semble qu'il exécute une commande système. Que se passe-t-il si l'utilisateur télécharge un fichier nommé something;rm -rf /?
iProgram
Si je veux que toutes les pages du pdf soient converties en image. alors comment faire?
Dhara
31

Vous pouvez également obtenir le nombre de pages en utilisant

$im->getNumberImages();

Ensuite, vous pouvez créer des vignettes de toutes les pages en utilisant une boucle, par exemple.

'file.pdf['.$x.']'
Jason
la source
34
(Cela devrait en fait être un commentaire sur la réponse de Paolo Bergantino)
Simon East
réponse intelligente. pas donné par d'autres mais vous remarquez et avez écrit.
Ashu Kumar
16

Utilisez l'extension php Imagick . Pour contrôler la taille souhaitée de l'image de sortie raster, utilisez la fonction 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;
?>

(Extension sur Paolo Bergantino sa réponse et Luis Melgratti son commentaire. Vous devez régler la résolution avant de charger l'image.)

Sébastien
la source
11

Si vous chargez le PDF à partir d'un blob, voici comment vous obtenez la première page au lieu de la dernière page:

$im->readimageblob($blob);
$im->setiteratorindex(0);
jrjohnson
la source
10
(Cela devrait en fait être un commentaire sur la réponse de Paolo Bergantino)
Simon East
9

Vous pouvez également essayer d'exécuter l'utilitaire de conversion fourni avec imagemagick.

exec("convert pdf_doc.pdf image.jpg");
echo 'image-0.jpg';
Preet Sandhu
la source
3
Au lieu de pdf_doc.pdf, pdf_doc.pdf [0] est préféré.
John Kurlak
convert fait partie du package ImageMagick; essayez sudo miam installez ImageMagick
Jack Miller
Si cela ne fonctionne toujours pas, vous devrez peut-être fournir le chemin d'accès complet au convertbinaire.
grue
1
echo 'image-0.jpg';renvoie une chaîne.
suz
a travaillé pour moi, merci
Isabella
4

Je suis l'auteur de PDFlib qui est un wrapper GhostScript pour php, l'avantage d'utiliser cette bibliothèque est qu'elle est déjà testée et qu'elle ne nécessite pasImageMagic

Les GhostScriptcommandes sont toujours plus rapides qu'en ImageMagicmatière de PDF, vous devez donc opter pour un wrapper GhostScript ou des commandes GhostScript pures

$pdflib = new ImalH\PDFLib\PDFLib();
$pdflib->setPdfPath($pdf_file_path);
$pdflib->setOutputPath($folder_path_for_images);
$pdflib->convert();
imal hasaranga perera
la source
Bonjour, j'utilise votre PDFlib pour créer des PNG à partir de 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 a-t-il une option pour définir la largeur et la hauteur des fichiers PNG créés?
WGS
Salut, aucun PDFLib ne fournit pas de méthodes pour manipuler les images mais vous pouvez faire comme ça. une fois que vous avez généré les pngs à l'aide de PDFLib, vous pouvez utiliser un autre bibliothèque de manipulation d'images comme github.com/Treinetic/ImageArtist pour faire votre travail ...
imal hasaranga perera
veuillez essayer la méthode ci-dessus que j'ai suggérée, mais si vous avez encore du mal, envoyez-moi un mail à [email protected] et je vous aiderai avec un exemple de code ... cheers !!
imal hasaranga perera
Je vais essayer. Merci pour la suggestion.
WGS
3

J'installe fini! Ça a marché!

Vous pouvez faire une installation de base imagemagick sur Windows.

En cours d' php (local)utilisation, appelez 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");    
?>

En outre, vous pouvez être utilisé class imagickdans la classe PHP Imagick

Merci à tous m'a aidé!

Duy Khanh
la source
2

Pensez différemment, vous pouvez utiliser la bibliothèque suivante pour convertir le pdf en image en utilisant javascript

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

jewelhuq
la source
Si je veux afficher l'image d'aperçu sur le serveur, comment pouvons-nous l'utiliser?
chithra
Vous voudrez peut-être y jeter un œil: github.com/scandel/pdfThumbnails . Je pense que vous pouvez télécharger la miniature de l'image générée ici à côté du fichier réel et l'enregistrer, de cette façon, vous économiserez plus de temps de calcul sur votre serveur (puisque le processus de miniatures a été effectué sur un ordinateur côté client).
sajed zarrinpour
1

Voici une classe simple que j'ai écrite et utilisée sur quelques projets. Il enveloppe imagicket gère simplement l' écriture de chaque page sur le disque. Si quelqu'un cherche toujours un moyen facile de le faire, ce lien peut être utile.

user664995
la source
2
Les réponses de lien uniquement sont de faible valeur sur StackOverflow car si le lien se déplace ou meurt, la réponse est rendue absolument inutile. Pour améliorer votre réponse, l'essentiel de votre solution doit être codé en dur ici.
mickmackusa