PHPでPDFドキュメントをプレビュー画像に変換するにはどうすればよいですか?

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
ただし、この投稿では、特定のPDFドキュメントから画像のプレビューを作成するというはるかに小さな例に限定します。 「なぜプレビューなのか?」と質問します。彼の図書館管理システム、彼女のオンライン電子書籍ストア、または週末のクレイジーなプログラミングタスクに必要になるかもしれません。このコンセプトをプロジェクトのどこで使用できると思いますか?コメントで知っています。完全な変換アルゴリズムを最初から実装することはできなくなったため、サードパーティのライブラリを使用してタスクを簡単にします。このシナリオで魅力的だと思った手法は、次のツールに基づいています。
  • Ghostscript:は、PostSriptファイルとPDFファイルを解釈するWindows、Linux、Macの3つの主要なプラットフォームすべてで利用できるコマンドラインユーティリティです。これについて詳しくは、彼の公式サイト
  • ImageMagick:これは、ラスター画像とベクター画像ファイルを表示、変換、編集するための無料のオープンソースソフトウェアパッケージです。 PHPを含むほとんどの主要なプログラミング言語。これがクイック概要の標準ドキュメントです。
U Ghostscriptを歌うプロジェクトでGhostscriptを使用するには、まずインストールします。 Windowsを使用している場合は、ダウンロードページから実行可能ファイルをダウンロードします。Linuxユーザーは、デフォルトのパッケージマネージャーからGhostscriptを直接インストールできます。
#RPMベースのディストリビューション、Fedora 26/27/28 $ sudo dnf install ghostscript
確認このコマンドを使用したインストール
$gs --version 
インストール後、PDFファイルを含むディレクトリに移動し、次のコマンドを実行します。
 $ gs -dSAFER -dBATCH -sDEVICE = jpeg -dTextAlphaBits = 4 -dGraphicsAlphaBits = 4 -dFirstPage = 1 -dLastPage = 1 -r300 -sOutputFile = Preview.jpg input.pdfこれにより、ドキュメントから最初のページの画像が作成されます。実際の動作を理解しましょう。
  • -sDEVICE:出力画像ファイル形式を設定します。
  • -sTEXTVAL、-sGRAPHICVAL:結果の画像のアンチエイリアシングを設定します。有効な値は、1、2、および4です。
  • -r {NUM}:画像の解像度(dpi)を設定します。
  • -sFirstPage、-sLastPage:表示するドキュメントの最初と最後のページを設定します。
  • -sOutputFile:出力の名前を設定しますファイル。
  • input.pdf:これは、変換に使用される実際のPDFドキュメントです。
ここで、PHPでこのコマンドを使用するには、 exec()関数を呼び出します。例: <? php exec "ls -l" $ output_str $ return_val ); foreach $ output_str as $ line ){ echo $ line "" ; }
?>;
このLinuxの例では、 ls を実行し、すべてのディレクトリとファイルをコンソールに出力します。この概念を使用して、PHPコードからコマンドを実行します。これが私がやった方法です; <? php function is_pdf( $ file ){ $ file_content = file_get_contents $ file ) ; if (preg_match( "/ ^%PDF- [0-1 ]。[0-9]+/ " $ file_content )){ return true; } else { return false; } } function create_preview( $ file ){ $ output_format = "jpeg" ; $ antialiasing = "4" ; $ Preview_page = "1" ; $ resolution = "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" $ resolution "" ; $ exec_command 。 = "-sOutputFile =" $ output_file "`" $ file "`" ; echo "コマンドを実行しています..." ; exec $ exec_command $ command_output $ return_val ); foreach $ command_output as $ line ){ echo $ line "" ; } if (! $ return_val ){ echo "プレビューが正常に作成されました!!" ; } else { echo "プレビューの作成中にエラーが発生しました。" ; } } function __ main __(){ global $ argv ; $ input_file = $ argv [1]; if (is_pdf( $ input_file )){ //PDFプレビューを作成 create_preview( $ input_file ); } else { echo "入力ファイル" $ input_file "は有効なPDFドキュメントではありません。" ; } }
__ main __();
?>
実行スターコマンドラインでPDFファイルを受け入れる__main __()を使用します。入力ファイルが有効なPDFであるかどうかをチェックします。有効な場合は、入力ファイルに対してコマンドを実行します。
終了:
 $ phppdf_preview.phpinput.pdfコマンドを実行しています...GPLGhostscript 9.22(2017-10-04) Copyright(C)2017 Artifex Software、Inc.無断複写・転載を禁じます。このソフトウェアには保証はありません。詳細については、PUBLICファイルを参照してください。ページ1から1を処理しています。Page1プレビューが正常に作成されました。 
ImageMagickの使用いつものように、システムにImageMagickバイナリをインストールすることから始めます。依存関係から始めましょう。
 $ sudo dnf install gcc php-devel php-pear
次にImageMagickをインストールします;
$ sudo dnf install ImageMagick ImageMagick-devel 
次に、PHPラッパークラスをインストールします;
 $ sudo pecl install imagick $ sudo bash -c "echo" extension = imagick.so "> / etc /php.d/imagick.ini" 
LAMPアーキテクチャで使用する場合は、ApacheWebサーバーの再起動を検討してください。
 $ sudo service httpd restart 

システムの準備ができたので、サンプルプロジェクトでImageMagickを使用できます。スクリプトの基本的な機能は同じです。 create_preview()関数のコンテンツを次のコードに置き換えるだけです。 function create_preview( $ file ){ $ output_format = "jpeg" ; $ Preview_page = "1" ; <コード> $ resolution = "300" ; $ output_file = "imagick_preview.jpg" ; echo "プレビューを取得しています..." ; $ 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 ); }コードは一目瞭然です。タイプImagickのインスタンスを定義し、解像度、ファイル形式などのさまざまなパラメータを設定します。表示するPDFページは、ファイル名の後に配列インデックスと呼ばれます。例:

最初のページ:input.pdf [0] 2番目のページ:input.pdf[1]。 ... ... N番目のページ:input.pdf [N-1] 
出力:
 $ phppdf_preview.phpinput.pdfプレビューの取得...なぜ前の方法よりもこの方法を使用するのか疑問に思っています。そうですね、ImageMagickはPHPコードと非常によく一致していることがわかりました。プログラミングのコマンドラインは見栄えがよくなく、一般的な知識になることもあります。ただし、同じ構成セットで、GhostscriptはImageMagickによって生成されたファイルよりも小さい画像ファイルを生成しました。これがいくつかの最適化の問題によるものかどうかはわかりませんが、違いはありません。どちらを選択するかは、単に自分の好みに基づいているため、特定のPDFドキュメントのプレビューを作成する方法です。この投稿から何か新しいことを学んだことを願っています。どちらの方法がいいですか?さらなる改善のための提案はありますか?コメント欄でお気軽にご連絡ください。