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

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Dans cet article, cependant, nous nous limiterons à un exemple beaucoup plus petit, qui consiste à créer un aperçu d`une image à partir d`un document PDF donné. "Pourquoi un aperçu ?", demandez-vous. Eh bien, il pourrait être nécessaire pour son système de gestion de bibliothèque, sa boutique de livres électroniques en ligne ou simplement pour une tâche de programmation folle le week-end. Où pensez-vous que vous pouvez utiliser ce concept dans votre projet ? Laissez Je le sais dans les commentaires.Il n`est plus possible d`implémenter un algorithme de conversion complet à partir de zéro, nous allons donc utiliser des bibliothèques tierces pour nous faciliter la tâche.Les techniques que j`ai trouvées intéressantes dans ce scénario sont basées sur les outils suivants :
  • Ghostscript :est un utilitaire de ligne de commande disponible pour les trois principales plates-formes, à savoir Windows, Linux et Mac qui interprètent les fichiers PostSript et PDF. Vous pouvez en savoir plus à ce sujet sur son site officiel .
  • ImageMagick :Il s`agit d`un progiciel gratuit et open source permettant d`afficher, de convertir et d`éditer des images raster et des fichiers d`images vectorielles. Il est disponible pour la plupart des principaux langages de programmation, y compris PHP. Voici la documentation standard pour un aperçu rapide .
U chanter Ghostscript Pour utiliser Ghostscript dans votre projet, commencez par l`installer. Si vous êtes sous Windows, téléchargez l`exécutable à partir de la page de téléchargement. Les utilisateurs de Linux peuvent installer Ghostscript directement via les gestionnaires de packages par défaut ;
# Distributions basées sur RPM, Fedora 26/27/28 $sudo dnf install ghostscript 
Vérifier l`installation avec cette commande,
$gs --version 
Après l`installation, accédez au répertoire contenant le fichier PDF et exécutez la commande suivante.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf Ceci créera une image de la première page du document. Voyons ce qu`il fait réellement ;
  • -sDEVICE :définit le format du fichier image de sortie.
  • -sTEXTVAL, - sGRAPHICVAL : définit l`anticrénelage pour l`image résultante. Les valeurs valides sont 1, 2 et 4.
  • -r {NUM} :définit la résolution (en dpi) de l`image.
  • -sFirstPage, -sLastPage :définit la première et la dernière page du document à afficher.
  • -sOutputFile :définit le nom de la sortie file.
  • input.pdf :il s`agit du document PDF réel utilisé pour convertir.
Maintenant, pour utiliser cette commande en PHP, nous appelez la fonction exec(). Par exemple :< ? php exec ( "ls -l" , $output_str , $return_val ); foreach ( $output_str as $line ) { echo $line . "" ; }
?>;
Cet exemple sous Linux exécutera ls et imprimera tous les répertoires et fichiers sur la console. Nous pouvons utiliser ce concept et exécutez une commande à partir de notre code PHP. C`est comme ça que j`ai fait ; < tbody> < ? php fonction is_pdf ( $file ) { $file_content = file_get_contents ( $file ) ; if (preg_match ( " / ^% PDF- [0-1 ]. [0-9] + / " , $file_content )) { return true ; } else { return false ; } } fonction create_preview ( $file ) { $output_format = "jpeg" ; $anticrénelage = "4" ; $preview_page = "1"  ; $résolution = "300"  ; $output_file = "preview.jpg" ; $exec_command = " gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE = " . $output_format . ""  ; $exec_command . = "- dTextAlphaBits =" . $anticrénelage . "-dGraphicsAlphaBits =" . $antialiasing . "" ; $exec_command . = "- dFirstPage =" . $preview_page . "-dLastPage =" . $preview_page . ""  ; $exec_command . = "- r" . $résolution . ""  ; $exec_command . = "- sOutputFile =" . $output_file . "` " . $file . "` " ; echo " Exécution de la commande ... " ; exec ( $exec_command , $command_output , $ return_val ); foreach ( $command_output as $line ) {/code> echo $line . "" ; } if (! $return_val ) { echo "Aperçu créé avec succès !"  ; } autre { echo "Erreur lors de la création de l`aperçu." ; } } fonction __ main __() { global $argv ; $input_file = $argv [1] ; if (is_pdf ( $input_file )) { // Créer un aperçu PDF create_preview ( $input_file ); } autre { echo "Le fichier d`entrée" . $input_file . "n`est pas un document PDF valide." ; } }
__ main __();
?>
Étoile d`exécution ts avec __main __() qui accepte un fichier PDF sur la ligne de commande. Il vérifie si le fichier d`entrée est un PDF valide ou non. Si valide, il exécute la commande sur le fichier d`entrée.
Quitter :
$php pdf_preview.php input.pdf Excuting command ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. Tous droits réservés. Ce logiciel est fourni SANS GARANTIE : consultez la fiche PUBLIC pour plus de détails. Traitement des pages 1 à 1. Page 1 Aperçu créé avec succès !! 
Utiliser ImageMagick Comme d`habitude, nous allons commencer par installer les binaires ImageMagick sur le système. Commençons par les dépendances ;
$sudo dnf install gcc php-devel php-pear 
Installez ensuite ImageMagick ;
$sudo dnf install ImageMagick ImageMagick-devel 
Installez ensuite les classes wrapper PHP ;
$sudo pecl install imagick $sudo bash -c "echo" extension = imagick.so "> /etc /php.d/imagick.ini "
Si vous envisagez de l`utiliser dans l`architecture LAMP, pensez à redémarrer le serveur Web Apache ;
$sudo service httpd restart 

Maintenant que notre système est prêt, nous pouvons utiliser ImageMagick dans notre exemple de projet. La fonctionnalité de base du script reste la même. Il vous suffit de remplacer le contenu de la fonction create_preview() par le code suivant.function create_preview ( $file ) { $output_format = "jpeg" ; $preview_page = "1" ; $résolution = "300"  ; $output_file = "imagick_preview.jpg" ; echo " Récupération de l`aperçu ... " ; $img_data = new Imagick(); $img_data -> setResolution ( $résolution , $résolution ); $img_data -> readImage ( $file . "[" . ( $preview_page - 1). " ] " ); $img_data -> setImageFormat ( $output_format ); file_put_contents ( $output_file , $img_data , FILE_USE_INCLUDE_PATH ); } Le code est explicite. Nous définissons une instance de type Imagick et définissons divers paramètres tels que la résolution, le format de fichier, etc. La page PDF que vous souhaitez afficher est appelée index de tableau après le nom du fichier. Par exemple :

Première page : input.pdf [0] Deuxième page : input.pdf [1]. ... ... Nième page : input.pdf [N - 1] 
Sortie :
$php pdf_preview.php input.pdf Récupération de l`aperçu ... Certains d`entre vous peuvent se demander pourquoi utiliser cette méthode plutôt que la précédente. Eh bien, j`ai trouvé qu`ImageMagick correspondait assez bien au code PHP. La ligne de commande en programmation n`a pas l`air très bonne et devient parfois de notoriété publique. Cependant, avec le même ensemble de configurations, Ghostscript a produit des fichiers image plus petits que les fichiers produits par ImageMagick. Je ne sais pas si cela est dû à des problèmes d`optimisation, mais ce n`est pas la différence. Le choix de l`un par rapport à l`autre est simplement basé sur votre propre goût. C`est ainsi que vous créez un aperçu pour un document PDF donné. J`espère que vous avez appris quelque chose de nouveau grâce à ce post. Quelle méthode préférez-vous ? Des suggestions d`améliorations supplémentaires ? N`hésitez pas à les mentionner dans les commentaires.