Jak przekonwertować dokument PDF na obraz podglądu w PHP?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
tym poście ograniczymy się jednak do znacznie mniejszego przykładu, jakim jest stworzenie podglądu obrazu z danego dokumentu PDF. „Dlaczego podgląd? — pytasz. Cóż, może być potrzebny do jego systemu zarządzania biblioteką, jej sklepu internetowego z e-bookami lub po prostu jakiegoś szalonego weekendowego zadania programistycznego. Jak myślisz, gdzie możesz wykorzystać tę koncepcję w swoim projekcie? wiem w komentarzach.Nie ma już możliwości zaimplementowania od podstaw kompletnego algorytmu konwersji, dlatego użyjemy bibliotek firm trzecich, aby ułatwić sobie zadanie.Techniki, które uważam za atrakcyjne w tym scenariuszu, opierają się na następujących narzędziach:
  • 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 .
U śpiewaj Ghostscript Aby użyć Ghostscript w swoim projekcie, zacznij od jego instalacji. Jeśli korzystasz z systemu Windows, pobierz plik wykonywalny ze strony pobierania. Użytkownicy Linuksa mogą zainstalować Ghostscript bezpośrednio przez domyślne menedżery pakietów;
# dystrybucje oparte na RPM, Fedora 26/27/28 $sudo dnf install ghostscript 
Sprawdź instalacja za pomocą tego polecenia,
$gs --version 
Po 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.
Teraz, aby użyć tego polecenia w PHP, wywołaj funkcję 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-pear 
Następnie zainstaluj ImageMagick;
$sudo dnf zainstaluj ImageMagick ImageMagick-devel 
Nastę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.