web-dev-qa-db-fra.com

Comment convertir un document PDF en image de prévisualisation en PHP?

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

La plupart des bibliothèques PHP PDF que j'ai trouvées sont centrées sur la création de documents PDF, mais existe-t-il un moyen simple de restituer un document dans un format d'image compatible avec Internet? ?

Notre environnement est une pile de lampes.

190
Mathew Byrne

Vous avez besoin de ImageMagick et GhostScript

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

Le [0] signifie page 1.

220
Paolo Bergantino

Pour ceux qui ne possèdent pas ImageMagick pour quelque raison que ce soit, les fonctions Gd fonctionneront également, en association avec GhostScript. Exécutez la commande ghostscript avec exec() pour convertir un fichier PDF au format JPG, puis manipulez le fichier obtenu 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 de substitution, $newimage = imagecreatetruecolor(...), et importez l'image actuelle. $image = imagecreatefromjpeg('whatever.jpg'), puis vous pouvez utiliser imagecopyresampled() pour modifier la taille ou un nombre quelconque d'autres commandes intégrées, autres que_imagemagick

33
Andrew

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

Utilisez l'extension php Imagick . Pour contrôler la taille souhaitée de l’image en sortie, utilisez la commande 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 la réponse de Paolo Bergantino et sur le commentaire de Luis Melgratti. Vous devez définir la résolution avant de charger l'image.)

15
Sebastian

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

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

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

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

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

Les commandes Always GhostScript sont plus rapides que ImageMagic en ce qui concerne le format PDF. Vous devez donc choisir 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();
4

J'installe fini! Ça a marché!

Vous pouvez être faire base installer imagemagick sur Windows.

Dans php (local), utilisez l'appel 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 utiliser class imagick dans classe PHP Imagick

Merci à tous m'a aidé!

3
Duy Khanh

Pensez différemment. Vous pouvez utiliser la bibliothèque suivante pour convertir un fichier PDF en image à l'aide de javascript.

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

1
jewelhuq

Voici un cours simple que j'ai écrit et utilisé sur quelques projets. Cela enveloppe simplement imagick et gère l’écriture de chaque page sur le disque. Si quelqu'un cherche toujours un moyen facile de le faire, ce lien pourrait être utile.

1
user664995