- Ghostscript: to narzędzie wiersza poleceń dostępne dla wszystkich trzech głównych platform, tj. Windows, Linux i Mac, które interpretują pliki PostSript i PDF. Więcej na ten temat można przeczytać na jego oficjalna strona .
- ImageMagick:Jest to darmowy pakiet oprogramowania typu open source do wyświetlania, konwertowania i edytowania obrazów rastrowych i plików wektorowych. Jest dostępny dla większość głównych języków programowania, w tym PHP. Oto standardowa dokumentacja szybkiego przeglądu .
# dystrybucje oparte na RPM, Fedora 26/27/28 $sudo dnf install ghostscriptSprawdź instalacja za pomocą tego polecenia,
$gs --versionPo instalacji przejdź do katalogu zawierającego plik PDF i uruchom następujące polecenie.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = podgląd.jpg input.pdf Spowoduje to utworzenie obrazu pierwszej strony z dokumentu. Rozumiemy, co to właściwie robi;
- -sDEVICE:ustawia format pliku obrazu wyjściowego.
- -sTEXTVAL, - sGRAPHICVAL: ustawia wygładzanie dla wynikowego obrazu. Prawidłowe wartości „Ęã‚Ęãare 1, 2 i 4.
- -r {NUM}:ustawia rozdzielczość (w dpi) obrazu.
- -sFirstPage, -sLastPage:ustawia pierwszą i ostatnią stronę dokumentu do wyświetlenia.
- -sOutputFile:ustawia nazwę wyjścia pliku.
- input.pdf:jest to rzeczywisty dokument PDF używany do konwersji.
exec()
. Na przykład:
exec
(
"ls -l"
,
$output_str
,
$return_val
);
foreach
(
$output_str
as
$line
) {
echo
$line
.
"
;
}
?>;
Ten przykład na Linuksie wykona ls
i wyświetli wszystkie katalogi i pliki w konsoli. tę koncepcję i wykonaj polecenie z naszego kodu PHP. Tak to zrobiłem;
funkcja
is_pdf (
$plik
) {
$file_content
=
file_get_contents
(
$file
) ;
if
(preg_match (
" / ^% PDF- [0-1 ]. [0-9] + / "
,
$file_content
)) {
zwróć
true;
}
else
{
powrót
fałsz;
}
}
function
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$antyaliasing
=
"4"
;
$preview_page
=
"1"
$rozdzielczość
=
"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"
.
$rozdzielczość
.
""
;
$exec_command
. =
"- sOutputFile ="
.
$output_file
.
"` "
.
$plik
.
"` "
;
echo
" Wykonywanie polecenia... "
;
exec
(
$exec_command
,
$command_output
,
$ return_val
);
foreach
(
$command_output
as
$line
) {
echo
$line
.
""
;
}
if
(!
$return_val
) {
echo
"Podgląd został pomyślnie utworzony!!"
;
}
inny
echo
"Błąd podczas tworzenia podglądu."
;
}
}
funkcja
__ główna __() {
global
$argv
;
$input_file
=
$argv
[1];
if
(is_pdf (
$input_file
)) {
// Utwórz podgląd PDF
create_preview (
$input_file
);
}
else
{
echo
"Plik wejściowy"
.
$input_file
.
"nie jest prawidłowym dokumentem PDF."
;
}
}
__ główny __();
?>
Gwiazdka wykonania ts z __main __()
, który akceptuje plik PDF w wierszu poleceń. Sprawdza, czy plik wejściowy jest prawidłowym plikiem PDF, czy nie. Jeśli jest prawidłowy, wykonuje polecenie na pliku wejściowym.Wyjście:
$php pdf_preview.php input.pdf Wykonywanie polecenia ... GPL Ghostscript 9.22 (2017-10-04) Copyright (C) 2017 Artifex Software , Inc. Wszelkie prawa zastrzeżone. To oprogramowanie nie jest objęte GWARANCJĄ: szczegółowe informacje znajdują się w pliku PUBLICZNIE. Przetwarzanie stron od 1 do 1. Strona 1 Podgląd utworzony pomyślnie !!Używanie ImageMagick Jak zwykle, zaczniemy od instalacji binariów ImageMagick w systemie. Zacznijmy od zależności;
$sudo dnf zainstaluj gcc php-devel php-pearNastępnie zainstaluj ImageMagick;
$sudo dnf zainstaluj ImageMagick ImageMagick-develNastępnie zainstaluj klasy opakowujące PHP;
$sudo pecl zainstaluj imagick $sudo bash -c rozszerzenie "echo" = imagick.so "> /etc /php.d/imagick.ini "Jeśli planujesz używać go w architekturze LAMP, rozważ ponowne uruchomienie serwera WWW Apache;
Restart httpd usługi $sudo
Teraz, gdy nasz system jest gotowy, możemy użyć ImageMagick w naszym przykładowym projekcie. Podstawowa funkcjonalność skryptu pozostaje taka sama. Wystarczy zastąpić zawartość funkcji create_preview()
następującym kodem.function
create_preview (
$file
) {
$output_format
=
"jpeg"
;
$preview_page
=
"1"
;
$rozdzielczość
=
"300"
;
$output_file
=
"imagick_preview.jpg"
;
echo
" Pobieram podgląd... "
;
$img_data
=
new
Imagick();
$img_data
-> setResolution (
$resolution
,
$resolution
);
$img_data
-> readImage (
$plik
.
"["
. (
$preview_page
- 1).
" ] "
);
$img_data
-> setImageFormat (
$output_format
);
file_put_contents
(
$output_file
,
$img_data
, FILE_USE_INCLUDE_PATH );
}
Kod nie wymaga wyjaśnień. Definiujemy instancję typu Imagick
i ustawiamy różne parametry, takie jak rozdzielczość, format pliku itp. Strona PDF, którą chcesz wyświetlić, jest określana jako indeks tablicy po nazwie pliku. Na przykład:Pierwsza strona: input.pdf [0] Druga strona: input.pdf [1]. ... ... N-ta strona: input.pdf [N - 1]
Wyjście: $php pdf_preview.php input.pdf Pobieram podgląd ... Niektórzy z was mogą zastanów się, dlaczego stosujesz tę metodę w porównaniu z poprzednią. Cóż, znalazłem ImageMagick całkiem dobrze pasujący do kodu PHP. Linia poleceń w programowaniu nie wygląda zbyt dobrze i czasami staje się powszechną wiedzą. Jednak przy tym samym zestawie konfiguracji Ghostscript generował mniejsze pliki obrazów niż pliki tworzone przez ImageMagick. Nie jestem pewien, czy wynika to z pewnych problemów z optymalizacją, ale to nie jest różnica. Wybór jednego z drugim jest po prostu oparty na własnym guście. Tak więc tworzysz podgląd dla danego dokumentu PDF. Mam nadzieję, że z tego posta dowiedziałeś się czegoś nowego. Którą metodę wolisz? Jakieś sugestie dotyczące dalszych ulepszeń? Zapraszam do wzmianki o nich w komentarzach.