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.


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.


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


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

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


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

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

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

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


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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.