- 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 .
# RPM-gebaseerde distributies, Fedora 26/27/28 $sudo dnf install ghostscriptVerifiëren de installatie met deze opdracht,
$gs --versionNavigeer 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.
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.