PHP`de PDF belgesi önizleme görüntüsüne nasıl dönüştürülür?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Ancak bu gönderide, kendimizi belirli bir PDF belgesinden bir görüntünün önizlemesini oluşturmak olan çok daha küçük bir örnekle sınırlayacağız. "Neden bir ön izleme?`, diye soruyorsunuz. Kütüphane yönetim sistemi, çevrimiçi e-kitap mağazası veya sadece çılgın bir hafta sonu programlama görevi için gerekli olabilir. Bu konsepti projenizde nerede kullanabileceğinizi düşünüyorsunuz? yorumlarda biliyorum.Sıfırdan eksiksiz bir dönüştürme algoritması uygulamak artık mümkün değil, bu nedenle görevimizi kolaylaştırmak için üçüncü taraf kitaplıkları kullanacağız.Bu senaryoda çekici bulduğum teknikler aşağıdaki araçlara dayanmaktadır:
  • Ghostscript:PostSript ve PDF dosyalarını yorumlayan Windows, Linux ve Mac gibi üç ana platformun tümü için kullanılabilen bir komut satırı yardımcı programıdır.Bununla ilgili daha fazla bilgiyi onun resmi site .
  • ImageMagick:Bu, raster görüntüleri ve vektör görüntü dosyalarını görüntülemek, dönüştürmek ve düzenlemek için ücretsiz ve açık kaynaklı bir yazılım paketidir. PHP dahil çoğu büyük programlama dili. İşte hızlı genel bakış için standart belgeler.
U şarkı Ghostscript Projenizde Ghostscript`i kullanmak için, onu kurarak başlayın. Windows kullanıyorsanız, yürütülebilir dosyayı indirme sayfasından indirin.Linux kullanıcıları Ghostscript`i varsayılan paket yöneticileri aracılığıyla doğrudan yükleyebilir;
# RPM tabanlı dağıtımlar, Fedora 26/27/28 $sudo dnf Ghostscript kurulumu 
Doğrulayın bu komutla kurulum,
$gs --version 
Kurulumdan sonra, PDF dosyasını içeren dizine gidin ve aşağıdaki komutu çalıştırın.
$gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile =preview.jpg input.pdf Bu, belgedeki ilk sayfanın görüntüsünü oluşturacaktır. Gerçekte ne yaptığını anlayalım;
  • -sDEVICE:çıktı görüntü dosyası biçimini ayarlar.
  • -sTEXTVAL, - sGRAPHICVAL: ortaya çıkan görüntü için kenar yumuşatma ayarlar. Geçerli değerler ‚Äã‚Äã 1, 2 ve 4`tür.
  • -r {NUM}:resmin çözünürlüğünü (dpi olarak) ayarlar.
  • -sFirstPage, -sLastPage:görüntülenecek belgenin ilk ve son sayfasını ayarlar.
  • -sOutputFile:çıktının adını belirler dosyası.
  • input.pdf:Bu, dönüştürmek için kullanılan gerçek PDF belgesidir.
Şimdi, bu komutu PHP`de kullanmak için, exec() işlevini çağırın. Örneğin: exec ( "ls -l" , $output_str , $return_val ); foreach >( $output_str as $satır ) { echo $line . "" ; }
?>; Linux`taki bu örnek ls yürütecek ve tüm dizinleri ve dosyaları konsola yazdıracaktır. bu kavram ve PHP kodumuzdan bir komut yürütün. Ben böyle yaptım;< tbody> işlev is_pdf ( $file ) { $file_content = file_get_contents ( $file ) ; if (preg_match ( " / ^% PDF- [0-1] ]. [0-9] + / " , $file_content )) { return true; } else { döndür yanlış; } } işlev create_preview ( $file ) { $output_format = "jpeg" ; $antialiasing = "4" ; $preview_page = "1" ; $çözünürlük = "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" . $çözünürlük . "" ; $exec_command . = "- sOutputFile =" . $output_file . "` " code> . $file . "` " ; echo " Komut yürütülüyor ... " ; exec ( $exec_command , $command_output , $ return_val ); foreach ( $command_output as $line ) { echo $line . "" ; } if (! $return_val ) { echo "Önizleme başarıyla oluşturuldu !!" ; } başka { echo "Önizleme oluşturulurken hata oluştu." ; } } fonksiyon __ main __() { global $argv ; $input_file = $argv [1]; if (is_pdf ( $input_file )) { // PDF önizleme oluştur create_preview ( $input_file ); } başka { echo "Giriş dosyası" . $input_file . "geçerli bir PDF belgesi değil." ; } }
__ ana __();
?>
Yürütme yıldızı Komut satırında bir PDF dosyasını kabul eden __main __() ile ts. Girilen dosyanın geçerli PDF olup olmadığını kontrol eder. Geçerliyse, girdi dosyasındaki komutu yürütür.
Çıkış:
$php pdf_preview.php input.pdf Komut yürütülüyor ... GPL Ghostscript 9.22 (2017-10-04) Telif Hakkı (C) 2017 Artifex Software , Inc. Tüm hakları saklıdır. Bu yazılım GARANTİ YOKTUR: ayrıntılar için KAMU dosyasına bakın. 1`den 1`e kadar olan sayfalar işleniyor. Sayfa 1 Önizleme başarıyla oluşturuldu !! 
ImageMagick`i Kullanma Her zamanki gibi, sisteme ImageMagick ikili dosyalarını yükleyerek başlayacağız. Bağımlılıklarla başlayalım;
$sudo dnf gcc php-devel php-pear`ı kurun 
Ardından ImageMagick`i kurun;
$sudo dnf ImageMagick ImageMagick-devel`i kurun 
Ardından PHP sarmalayıcı sınıflarını kurun;
$sudo pecl imagick kurun $sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini "
LAMP mimarisinde kullanmayı planlıyorsanız, Apache web sunucusunu yeniden başlatmayı düşünün;
$sudo service httpd restart 

Artık sistemimiz hazır olduğuna göre, örnek projemizde ImageMagick`i kullanabiliriz. Komut dosyasının temel işlevselliği aynı kalır. Tek yapmanız gereken create_preview() işlevinin içeriğini aşağıdaki kodla değiştirmek.function create_preview ( $file ) { $output_format = "jpeg" ; $preview_page = "1" ; $çözünürlük = "300" ; $output_file = "imagick_preview.jpg" ; echo " Önizleme alınıyor ... " ; $img_data = new Imagick(); $img_data -> setResolution ( $solve , $solve ); $img_data -> readImage ( $file . "[" . ( $preview_page - 1). " ] " ); $img_data -> setImageFormat ( $output_format ); file_put_contents ( $output_file , $img_data , FILE_USE_INCLUDE_PATH ); } Kod açıklayıcıdır. Imagick tipinde bir örnek tanımlarız ve çözünürlük, dosya formatı vb. gibi çeşitli parametreleri ayarlarız. Görüntülemek istediğiniz PDF sayfası, dosya adından sonra dizi indeksi olarak anılır. Örneğin:

İlk sayfa: input.pdf [0] İkinci sayfa: input.pdf [1]. ... ... N. sayfa: input.pdf [N - 1] 
Çıktı:
$php pdf_preview.php input.pdf Önizleme getiriliyor ... Bazılarınız olabilir Bu yöntemi neden bir öncekine göre kullandığını merak ediyorsun. PHP kodunu oldukça iyi eşleştirmek için ImageMagick`i buldum. Programlamadaki komut satırı çok iyi görünmüyor ve bazen ortak bilgi haline geliyor. Ancak, aynı konfigürasyon setiyle Ghostscript, ImageMagick tarafından üretilen dosyalardan daha küçük resim dosyaları üretti. Bunun bazı optimizasyon sorunlarından kaynaklanıp kaynaklanmadığından emin değilim, ancak fark bu değil. Birini diğerine tercih etmek sadece kendi zevkinize bağlıdır. Dolayısıyla, belirli bir PDF belgesi için önizlemeyi bu şekilde oluşturursunuz. Umarım bu yazıdan yeni bir şeyler öğrenmişsinizdir. Hangi yöntemi tercih edersin? Daha fazla iyileştirme için herhangi bir öneriniz var mı? Yorumlarda onlardan bahsetmekten çekinmeyin.