Hoe converteer ik een PDF-document naar een voorbeeldafbeelding in PHP?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
In dit bericht zullen we ons echter beperken tot een veel kleiner voorbeeld, namelijk het maken van een voorbeeld van een afbeelding uit een bepaald PDF-document. "Waarom een preview?‚", vraag je. Nou, het kan nodig zijn voor zijn bibliotheekbeheersysteem, haar online ebook store, of gewoon een gekke weekendprogrammeertaak. Waar denk je dat je dit concept in je project kunt gebruiken? Laat Ik weet het in de opmerkingen.Het is niet langer mogelijk om een volledig conversie-algoritme helemaal opnieuw te implementeren, dus we zullen bibliotheken van derden gebruiken om onze taak gemakkelijker te maken.De technieken die ik in dit scenario aantrekkelijk vond, zijn gebaseerd op de volgende tools:
  • Ghostscript:is een opdrachtregelprogramma dat beschikbaar is voor alle drie de belangrijkste platforms, namelijk Windows, Linux en Mac die PostSript- en PDF-bestanden interpreteren. U kunt hier meer over lezen op zijn officiële site .
  • ImageMagick:Dit is een gratis en open source softwarepakket voor het weergeven, converteren en bewerken van rasterafbeeldingen en vectorafbeeldingsbestanden. Het is beschikbaar voor de meeste belangrijke programmeertalen ‚Äã‚Äãinclusief PHP. Hier is de standaarddocumentatie voor snel overzicht .
U zingen Ghostscript Om Ghostscript in uw project te gebruiken, begint u met het installeren ervan. Als je Windows gebruikt, download dan het uitvoerbare bestand van de downloadpagina.Linux-gebruikers kunnen Ghostscript rechtstreeks installeren via de standaard pakketbeheerders;
# RPM-gebaseerde distributies, Fedora 26/27/28 $sudo dnf install ghostscript 
Verifiëren de installatie met deze opdracht,
$gs --version 
Navigeer na de installatie naar de map met het PDF-bestand en voer de volgende opdracht uit.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = preview.jpg input.pdf Hiermee wordt een afbeelding gemaakt van de eerste pagina van het document. Laten we eens kijken wat het werkelijk doet;
  • -sDEVICE:stelt de bestandsindeling van de uitvoerafbeelding in.
  • -sTEXTVAL, - sGRAPHICVAL: stelt anti-aliasing in voor de resulterende afbeelding. Geldige waarden ‚Äã‚Äãzijn 1, 2 en 4.
  • -r {NUM}:stelt de resolutie (in dpi) van de afbeelding in.
  • -sFirstPage, -sLastPage:stelt de eerste en laatste pagina van het document in dat moet worden weergegeven.
  • -sOutputFile:stelt de naam van de uitvoer in bestand.
  • input.pdf:dit is het eigenlijke PDF-document dat wordt gebruikt om te converteren.
Om dit commando in PHP te gebruiken, moeten we roep de functie exec() aan. Bijvoorbeeld: exec ( "ls -l" , $output_str , $return_val ); foreach ( $output_str as $line ) { echo $line . "" ; }
?>;
Dit voorbeeld op Linux zal ls uitvoeren en alle mappen en bestanden naar de console afdrukken. dit concept en voer een commando uit vanuit onze PHP-code. Dit is hoe ik het deed;< tbody> functie is_pdf ( $file ) { $file_content = file_get_contents ( $file ) ; if (preg_match ( " / ^% PDF- [0-1 ]. [0-9] + / " , $file_content )) { return true; } else { retour false; } } functie create_preview ( $file ) { $output_format = "jpeg" ; $antialiasing = "4" ; $preview_page = "1" ; $resolutie = "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" . $resolutie . "" ; $exec_command . = "- sOutputFile =" . $output_file . "` " . $file . "` " ; echo " Commando wordt uitgevoerd ... " ; exec ( $exec_command , $command_output , $ return_val ); foreach ( $command_output as $line ) { echo $line . "" ; } if (! $return_val ) { echo "Voorbeeld succesvol aangemaakt !!" ; } anders { echo "Fout bij het maken van het voorbeeld." ; } } functie __ hoofd __() { algemeen $argv ; $input_file = $argv [1]; if (is_pdf ( $input_file )) { // PDF-voorbeeld maken create_preview ( $input_file ); } anders { echo "Het invoerbestand" . $input_file . "is geen geldig PDF-document." ; } }
__ hoofd __();
?>
Uitvoering ster ts met __main __() die een PDF-bestand op de opdrachtregel accepteert. Het controleert of het invoerbestand een geldige PDF is of niet. Indien geldig, voert het de opdracht uit op het invoerbestand.
Afsluiten:
$php pdf_preview.php input.pdf Bevel uitvoeren ... GPL Ghostscript 9.22 (04-10-2017) Copyright (C) 2017 Artifex Software, Inc. Alle rechten voorbehouden. Deze software wordt geleverd met GEEN GARANTIE: zie het bestand PUBLIC voor details. Verwerking van pagina`s 1 t/m 1. Page 1 Preview succesvol aangemaakt !! 
ImageMagick gebruiken Zoals gewoonlijk beginnen we met het installeren van de binaire bestanden van ImageMagick op het systeem. Laten we beginnen met de afhankelijkheden;
$sudo dnf install gcc php-devel php-pear 
Installeer vervolgens ImageMagick;
$sudo dnf install ImageMagick ImageMagick-devel 
Installeer vervolgens de PHP-wrapperklassen;
$sudo pecl installeer imagick $sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini "
Als je van plan bent om het in LAMP-architectuur te gebruiken, overweeg dan om de Apache-webserver opnieuw te starten;
$sudo service httpd restart 

Nu ons systeem klaar is, kunnen we ImageMagick gebruiken in ons voorbeeldproject. De basisfunctionaliteit van het script blijft hetzelfde. Het enige wat u hoeft te doen is de inhoud van de functie create_preview() te vervangen door de volgende code.function create_preview ( $file ) { $output_format = "jpeg" ; $preview_page = "1" ; $resolution = "300" ; $output_file = "imagick_preview.jpg" ; echo " Voorbeeld wordt opgehaald ... " ; $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 ); } De code spreekt voor zich. We definiëren een instantie van het type Imagick en stellen verschillende parameters in, zoals resolutie, bestandsindeling, enz. De PDF-pagina die u wilt weergeven, wordt na de bestandsnaam een array-index genoemd. Bijvoorbeeld:

Eerste pagina: input.pdf [0] Tweede pagina: input.pdf [1]. ... ... Nde pagina: input.pdf [N - 1] 
Output:
$php pdf_preview.php input.pdf Preview ophalen ... Sommigen van jullie misschien vraag je af waarom je deze methode zou gebruiken in plaats van de vorige. Nou, ik vond dat ImageMagick redelijk goed overeenkwam met PHP-code. De commandoregel in programmeren ziet er niet erg goed uit en wordt soms algemeen bekend. Met dezelfde set configuraties produceerde Ghostscript echter kleinere afbeeldingsbestanden dan de bestanden geproduceerd door ImageMagick. Ik weet niet zeker of dit te wijten is aan enkele optimalisatieproblemen, maar dat is niet het verschil. Het kiezen van de een boven de ander is gewoon gebaseerd op uw eigen smaak. Zo maakt u dus een voorbeeld voor een bepaald PDF-document. Ik hoop dat je iets nieuws hebt geleerd van dit bericht. Welke methode zou je voorkeur hebben? Suggesties voor verdere verbeteringen? Noem ze gerust in de comments.