- 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 .
# Distributions basées sur RPM, Fedora 26/27/28 $sudo dnf install ghostscriptVérifier l`installation avec cette commande,
$gs --versionAprè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.
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.