- Ghostscript:è un`utilità da riga di comando disponibile per tutte e tre le principali piattaforme, vale a dire Windows, Linux e Mac che interpretano file PostSript e PDF. Puoi leggere di più su questo sito ufficiale .
- ImageMagick:Questo è un pacchetto software gratuito e open source per visualizzare, convertire e modificare immagini raster e file di immagini vettoriali. È disponibile per la maggior parte dei principali linguaggi di programmazione ‚Äã‚Äãincluso PHP. Ecco la documentazione standard per una rapida panoramica .
# distribuzioni basate su RPM, Fedora 26/27/28 $sudo dnf install ghostscriptVerifica l`installazione con questo comando,
$gs --versionDopo l`installazione, accedere alla directory contenente il file PDF ed eseguire il comando seguente.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf Questo creerà un`immagine della prima pagina del documento. Capiamo cosa fa effettivamente;
- -sDEVICE:imposta il formato del file immagine di output.
- -sTEXTVAL, - sGRAPHICVAL: imposta l`anti-alias per l`immagine risultante. I valori validi ​​sono 1, 2 e 4.
- -r {NUM}:imposta la risoluzione (in dpi) dell`immagine.
- -sFirstPage, -sLastPage:imposta la prima e l`ultima pagina del documento da visualizzare.
- -sOutputFile:imposta il nome dell`output file.
- input.pdf:questo è il vero documento PDF utilizzato per la conversione.
exec()
. Ad esempio:
exec
(
"ls -l"
,
$output_str
,
$return_val
);
foreach
(
$output_str
as
$line
) {
eco
$line
.
""
;
}
?>;
Questo esempio su Linux eseguirà ls
e stamperà tutte le directory e i file sulla console. Possiamo usare questo concetto ed eseguire un comando dal nostro codice PHP. Ecco come l`ho fatto;< tbody>
funzione
is_pdf (
$file
) {
$file_content
=
file_get_contents
(
$file
) ;
if
(preg_match (
" / ^% PDF- [0-1 ]. [0-9] + / "
,
$file_content
)) {
return
true;
}
else
{
ritorno
false;
}
}
funzione
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$antialias
=
"4"
;
$preview_page
=
"1"
;
$risoluzione
=
"300"
;
$file_output
=
"preview.jpg"
;
$exec_command
=
" gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE = "
.
$output_format
.
""
;
$exec_command
"- dTextAlphaBits ="
.
$antialias
.
"-dGraphicsAlphaBits ="
.
$antialias
.
""
;
"- dFirstPage ="
.
$preview_page
.
"-dLastPage ="
.
$preview_page
.
""
;
"- r"
.
$risoluzione
.
""
;
$exec_command
. =
"- sOutputFile ="
.
$file_output
.
"` " .
$file
.
"` "
;
echo
" Esecuzione del comando ... "
;
exec
(
$exec_command
,
$command_output
,
$ return_val
);
foreach
(
$command_output
as
$line
) {
eco
$line
""
;
}
se
(!
$return_val
) {
echo
"Anteprima creata con successo!!"
;
}
echo
"Errore durante la creazione dell`anteprima."
;
}
}
funzione
__ main __() {
globale
$argv
;
$input_file
=
$argv
[1];
se
(is_pdf (
$input_file
)) {
// Crea anteprima PDF
create_preview (
$input_file
);
}
else
{
echo
"Il file di input"
.
$input_file
.
"non è un documento PDF valido."
;
}
}
__ main __();
?>
Stella di esecuzione ts con __main __()
che accetta un file PDF sulla riga di comando. Verifica se il file di input è PDF valido o meno. Se valido, esegue il comando sul file di input.Exit:
$php pdf_preview.php input.pdf Excuting command ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. Tutti i diritti riservati. Questo software viene fornito SENZA GARANZIA: vedere il file PUBLIC per i dettagli. Elaborazione delle pagine da 1 a 1. Pagina 1 Anteprima creata con successo !!Usare ImageMagick Come al solito, inizieremo installando i binari di ImageMagick sul sistema. Cominciamo con le dipendenze;
$sudo dnf install gcc php-devel php-pearQuindi installa ImageMagick;
$sudo dnf install ImageMagick ImageMagick-develQuindi installa le classi PHP wrapper;
$sudo pecl install imagick $sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini "Se prevedi di usarlo nell`architettura LAMP, considera di riavviare il server web Apache;
$sudo service httpd restart
Ora che il nostro sistema è pronto, possiamo usare ImageMagick nel nostro progetto di esempio. La funzionalità di base dello script rimane la stessa. Tutto quello che devi fare è sostituire il contenuto della funzione create_preview()
con il codice seguente.funzione
create_preview (
$file
) {
$output_format
=
"jpeg"
< codice>;
$preview_page
=
"1"
;
$risoluzione
=
"300"
;
$file_output
=
"imagick_preview.jpg"
;
echo
" Anteprima in corso ... "
;
$img_data
=
nuovo
Imagick();
$img_data
-> setResolution (
$risoluzione
,
$risoluzione
);
$img_data
-> readImage (
$file
$preview_page
- 1).
" ] "
);
$img_data
-> setImageFormat (
$output_format
);
file_put_contents
(
$file_output
,
$img_data
, FILE_USE_INCLUDE_PATH );
}
Il codice è autoesplicativo. Definiamo un`istanza di tipo Imagick
e impostiamo vari parametri come risoluzione, formato file, ecc. La pagina PDF che desideri visualizzare viene definita indice di matrice dopo il nome del file. Ad esempio:Prima pagina: input.pdf [0] Seconda pagina: input.pdf [1]. ... ... Nesima pagina: input.pdf [N - 1]
Output: $php pdf_preview.php input.pdf Anteprima di recupero ... Alcuni di voi potrebbero ti chiedi perché usare questo metodo rispetto al precedente. Bene, ho trovato ImageMagick per abbinare abbastanza bene il codice PHP. La riga di comando nella programmazione non sembra molto buona e talvolta diventa di dominio pubblico. Tuttavia, con lo stesso set di configurazioni, Ghostscript ha prodotto file di immagine più piccoli rispetto ai file prodotti da ImageMagick. Non sono sicuro che ciò sia dovuto ad alcuni problemi di ottimizzazione, ma non è questa la differenza. La scelta dell`uno rispetto all`altro si basa semplicemente sui tuoi gusti. Ecco come creare un`anteprima per un determinato documento PDF. Spero che tu abbia imparato qualcosa di nuovo da questo post. Quale metodo preferiresti? Qualche suggerimento per ulteriori miglioramenti? Sentiti libero di menzionarli nei commenti.