- Ghostscript:ist ein Befehlszeilenprogramm, das für alle drei großen Plattformen verfügbar ist, nämlich Windows, Linux und Mac, das PostSript- und PDF-Dateien interpretiert.Sie können mehr darüber auf seinem offizielle Website .
- ImageMagick:Dies ist ein kostenloses Open-Source-Softwarepaket zum Anzeigen, Konvertieren und Bearbeiten von Rasterbildern und Vektorbilddateien. Es ist verfügbar für die meisten gängigen Programmiersprachen ‚Äã‚Äãeinschließlich PHP. Hier ist die Standarddokumentation für einen schnellen Überblick .
# RPM-basierte Distributionen, Fedora 26/27/28 $sudo dnf install GhostscriptVerifizieren die Installation mit diesem Befehl,
$gs --versionNavigieren Sie nach der Installation zu dem Verzeichnis, das die PDF-Datei enthält, und führen Sie den folgenden Befehl aus.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf Dadurch wird ein Bild der ersten Seite des Dokuments erstellt. Lassen Sie uns verstehen, was es tatsächlich tut;
- -sDEVICE:stellt das Ausgabebilddateiformat ein.
- -sTEXTVAL, -sGRAPHICVAL: legt Anti-Aliasing für das resultierende Bild fest. Gültige Werte sind 1, 2 und 4.
- -r {NUM}:legt die Auflösung (in dpi) des Bildes fest.
- -sFirstPage, -sLastPage:legt die erste und letzte Seite des anzuzeigenden Dokuments fest.
- -sOutputFile:legt den Namen der Ausgabe fest Datei.
- input.pdf:Dies ist das eigentliche PDF-Dokument, das zum Konvertieren verwendet wird.
exec()-Funktion
auf. Zum Beispiel:
exec
(
"ls -l"
,
$output_str
,
$return_val
);
foreach
(
$output_str
as
$line
) {
echo
$line
.
""
;
}
?>;
Dieses Beispiel unter Linux führt ls
aus und gibt alle Verzeichnisse und Dateien auf der Konsole aus. Wir können verwenden dieses Konzept und führen Sie einen Befehl aus unserem PHP-Code aus. So habe ich es gemacht; < tbody>
Funktion
is_pdf (
$file
) {
$file_content
=
file_get_contents
(
$file
) ;
if
(preg_match (
" / ^% PDF- [0-1 ]. [0-9] + / "
,
$file_content
)) {
return
true;
}
else
{
return
false;
}
}
Funktion
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$antialiasing
=
"4"
;
$preview_page
=
"1"
;
$resolution
=
"300"
;
$output_file
=
"preview.jpg"
;
$exec_command
=
" gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE = "
.
$output_format
.
""
;
$exec_command
. =
"- dTextAlphaBits ="
.
$antialiasing
.
"-dGraphicsAlphaBits ="
.
$antialiasing
.
""
;
$exec_command
. =
"- dFirstPage ="
.
$preview_page
.
"-dLastPage ="
.
$preview_page
.
""
;
$exec_command
. =
"- r"
.
$resolution
.
""
;
$exec_command
. =
"- sOutputFile ="
.
$output_file
.
"` "
.
$file
.
"` "
;
echo
" Befehl wird ausgeführt ... "
;
exec
(
$exec_command
,
$command_output
,
$ return_val
);
foreach
(
$command_output
as
$line
) {
echo
$line
.
""
;
}
if
(!
$return_val
) {
echo
"Vorschau erfolgreich erstellt!!"
;
}
else
{
echo
"Fehler beim Erstellen der Vorschau."
;
}
}
Funktion
__ main __() {
global
$argv
;
$input_file
=
$argv
[1];
if
(is_pdf (
$input_file
)) {
// PDF-Vorschau erstellen
create_preview (
$input_file
);
}
else
{
echo
"Die Eingabedatei"
.
$input_file
.
"ist kein gültiges PDF-Dokument."
;
}
}
__ main __();
?>
Ausführungsstern ts mit __main __()
, das eine PDF-Datei auf der Befehlszeile akzeptiert. Es prüft, ob die Eingabedatei ein gültiges PDF ist oder nicht. Wenn gültig, führt es den Befehl auf der Eingabedatei aus.
Exit: $php pdf_preview.php input.pdf Befehl wird ausgeführt ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software, Inc. Alle Rechte vorbehalten. Für diese Software wird KEINE GEWÄHRLEISTUNG gewährt: Einzelheiten finden Sie in der Datei ÖFFENTLICH. Verarbeitung der Seiten 1 bis 1. Seite 1 Vorschau erfolgreich erstellt !!
Verwenden von ImageMagick Wie üblich beginnen wir mit der Installation der ImageMagick-Binärdateien auf dem System. Beginnen wir mit den Abhängigkeiten; $sudo dnf install gcc php-devel php-pear
Installieren Sie dann ImageMagick;$sudo dnf install ImageMagick ImageMagick-devel
Installieren Sie dann die PHP-Wrapper-Klassen;$sudo pecl install imagick $sudo bash -c "echo" extension = imagick.so "> /etc /php.d/imagick.ini "
Wenn Sie vorhaben, es in der LAMP-Architektur zu verwenden, sollten Sie den Apache-Webserver neu starten;$sudo service httpd restart
Nachdem unser System nun bereit ist, können wir ImageMagick in unserem Beispielprojekt verwenden. Die grundlegende Funktionalität des Skripts bleibt gleich. Sie müssen lediglich den Inhalt der Funktion create_preview()
durch den folgenden Code ersetzen. function
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$preview_page
=
"1"
;
$resolution
=
"300"
;
$output_file
=
"imagick_preview.jpg"
;
echo
" Vorschau abrufen ... "
;
$img_data
=
new
Imagick();
$img_data
-> setResolution (
$resolution
,
$resolution
);
$img_data
-> readImage (
$file .
"["
. (
$preview_page
- 1).
" ] "
);
$img_data
-> setImageFormat (
$output_format
);
file_put_contents
(
$output_file
,
$img_data
, FILE_USE_INCLUDE_PATH );
}
Der Code ist selbsterklärend. Wir definieren eine Instanz vom Typ Imagick
und setzen verschiedene Parameter wie Auflösung, Dateiformat etc. Die anzuzeigende PDF-Seite wird als Array-Index hinter dem Dateinamen bezeichnet. Zum Beispiel:Erste Seite: input.pdf [0] Zweite Seite: input.pdf [1]. ... ... N-te Seite: input.pdf [N - 1]
Ausgabe: $php pdf_preview.php input.pdf Abrufen der Vorschau ... Einige von Ihnen vielleicht fragen Sie sich, warum Sie diese Methode gegenüber der vorherigen verwenden. Nun, ich fand, dass ImageMagick recht gut zu PHP-Code passt. Die Kommandozeile beim Programmieren sieht nicht sehr gut aus und wird manchmal zum Allgemeinwissen. Allerdings erzeugte Ghostscript mit denselben Konfigurationen kleinere Bilddateien als die von ImageMagick erzeugten Dateien. Ich bin mir nicht sicher, ob dies an einigen Optimierungsproblemen liegt, aber das ist nicht der Unterschied. Ob Sie sich für eines entscheiden, hängt einfach von Ihrem eigenen Geschmack ab. So erstellen Sie also eine Vorschau für ein bestimmtes PDF-Dokument. Ich hoffe, Sie haben aus diesem Beitrag etwas Neues gelernt. Welche Methode würden Sie bevorzugen? Irgendwelche Vorschläge für weitere Verbesserungen? Fühlen Sie sich frei, sie in den Kommentaren zu erwähnen.