Wie konvertiert man ein PDF-Dokument in ein Vorschaubild in PHP?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
In diesem Beitrag beschränken wir uns jedoch auf ein viel kleineres Beispiel, nämlich die Erstellung einer Vorschau eines Bildes aus einem bestimmten PDF-Dokument. „Warum eine Vorschau?“, fragen Sie. Nun, es könnte für sein Bibliotheksverwaltungssystem, ihren Online-E-Book-Shop oder einfach nur für eine verrückte Programmieraufgabe am Wochenende benötigt werden. Wo können Sie dieses Konzept Ihrer Meinung nach in Ihrem Projekt verwenden? Ich weiß in den Kommentaren.Es ist nicht mehr möglich, einen vollständigen Konvertierungsalgorithmus von Grund auf neu zu implementieren, daher werden wir Bibliotheken von Drittanbietern verwenden, um unsere Aufgabe zu vereinfachen.Die Techniken, die ich in diesem Szenario attraktiv fand, basieren auf den folgenden Tools:
  • 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 .
U Ghostscript singen Um Ghostscript in Ihrem Projekt zu verwenden, installieren Sie es zunächst. Wenn Sie Windows verwenden, laden Sie die ausführbare Datei von der Download-Seite herunter. Linux-Benutzer können Ghostscript direkt über die standardmäßigen Paketmanager installieren;
# RPM-basierte Distributionen, Fedora 26/27/28 $sudo dnf install Ghostscript 
Verifizieren die Installation mit diesem Befehl,
$gs --version 
Navigieren 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.
Nun, um diesen Befehl in PHP zu verwenden, müssen wir Rufen Sie die 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.