Dompdfを使用してHTMLをPDFに変換する



PDFは標準形式です。 もともとは、ドキュメント内のテキストと画像を固定構造で表すためにAdobeによって作成されました。 請求書やレポートなどのデータダウンロードをサポートするWebアプリケーションがPDF形式でレンダリングすることは、長い間珍しくありませんでした。 そのため、この記事では、PHPを使用してPDF文書を簡単に生成します。



Dompdfは、HTMLマークアップとCSSスタイルからPDFを生成できる優れたライブラリです(多くの場合、これらはCSS3プロパティをサポートするCSS 2.1と互換性のあるスタイルです)。 これらの使い慣れた技術を使用してコンテンツの外観を決定し、それを簡単に固定ドキュメントに変換できます。 このライブラリには、他の便利で興味深い機能もあります。



仕事を始める



DompdfはGitHubで入手でき、Composerを使用してインストールできます。 Composerを介してエラーなしでインストールすると、多くの場合問題が発生するため、Gitを使用してDompdfをインストールすることをお勧めします。



ライブラリには、mbstringおよびDOM拡張機能が有効化されたPHP> = 5.0が必要です。 また、ほとんどのコンピューターで一般的に使用可能ないくつかのフォントも必要です。



ライブラリをインストールするディレクトリに移動し、コマンドラインを実行します。



git clone https://github.com/dompdf/dompdf.git git submodule init git submodule update
      
      







Dompdfをダウンロードしたら、簡単なPDFドキュメントを生成する短い例を作成しましょう。



 <?php set_include_path(get_include_path() . PATH_SEPARATOR . "/path/to/dompdf"); require_once "dompdf_config.inc.php"; $dompdf = new DOMPDF(); $html = <<<'ENDHTML' <html> <body> <h1>Hello Dompdf</h1> </body> </html> ENDHTML; $dompdf->load_html($html); $dompdf->render(); $dompdf->stream("hello.pdf");
      
      







プロジェクトでライブラリを使用するために、まず、 dompdf_config.inc.phpファイルをプルアップします。このファイルには、ほとんどのDompdf設定が含まれています。 また、デフォルト設定をオーバーライドできるオートローダーとユーザー構成ファイルもロードします。



HTMLマークアップは、文字列としてload_html()メソッドに渡されます。 または、 load_html_file()メソッドを使用して、ファイルまたはURLからマークアップをロードできます。 引数としてファイル名またはWebページのURLを取ります。



render()メソッドはHTMLをPDFで表示し、ファイルをレンダリングする準備ができました。 stream()メソッドは、結果のPDFを添付ファイルとしてブラウザに送信します。 このメソッドには、オプションの2番目のパラメーターであるオプションの配列があります。







非常に簡単なPDFを生成しましたが、これは完全に実用的ではありません。 実際には、多くの場合、シートサイズ、ページの向き、文字エンコードなどの要件があります。 Dompdfを実際のニーズにより適したものにするために設定できるオプションがいくつかあります。 それらはすべてdompdf_config.inc.phpファイルにリストおよび説明されており、デフォルト値に設定されています。 ユーザー構成ファイルdompdf_config.custom.inc.phpを更新することにより、これらの値を変更できます。 重要な設定の一部を次に示します。





高度な使用



では、Dompdfの高度な使用について少し話しましょう。 おそらく、生成されたPDFドキュメントをブラウザに送信するのではなく、ディスクに保存する必要があります。 方法は次のとおりです。



 <?php $dompdf = new DOMPDF(); $dompdf->load_html($html); $dompdf->render(); $output = $dompdf->output(); file_put_contents("/path/to/file.pdf", $output);
      
      







前の例のようにstream()を呼び出す代わりに、PDFを文字列として返すoutput()を使用します。 このメソッドはオプションの配列も受け入れますが、使用できるのは1つだけです-compress (デフォルトはtrue )。



Dompdfでは、表示するHTMLにPHPスクリプトを直接埋め込むことで、生成されたPDFにヘッダーとフッターを追加することもできます。 ただし、任意のコード処理がセキュリティリスクを引き起こす可能性があるため、この機能を担当する構成値はデフォルトでオフになっています。 まず、 DOMPDF_ENABLE_PHPオプションをtrueに設定する必要があります



組み込みPHPを有効にするとすぐに、PDFオブジェクトがスクリプト内で使用可能になり、それを使用してページを操作できます。 テキスト、線、画像、長方形などを追加できます。



 $html = <<<'ENDHTML' <html> <body> <script type="text/php"> if (isset($pdf)) { // open the PDF object - all drawing commands will // now go to the object instead of the current page $footer = $pdf->open_object(); // get height and width of page $w = $pdf->get_width(); $h = $pdf->get_height(); // get font $font = Font_Metrics::get_font("helvetica", "normal"); $txtHeight = Font_Metrics::get_font_height($font, 8); // draw a line along the bottom $y = $h - 2 * $txtHeight - 24; $color = array(0, 0, 0); $pdf->line(16, $y, $w - 16, $y, $color, 1); // set page number on the left side $pdf->page_text(16, $y, "Page: {PAGE_NUM} of {PAGE_COUNT}", $font, 8, $color); // set additional text $text = "Dompdf is awesome"; $width = Font_Metrics::get_text_width($text, $font, 8); $pdf->text($w - $width - 16, $y, $text, $font, 8); // close the object (stop capture) $pdf->close_object(); // add the object to every page (can also specify // "odd" or "even") $pdf->add_object($footer, "all"); } </script> <h1>Hello Dompdf</h1> </body> </html> ENDHTML;
      
      







スクリプトはHTMLマークアップに直接埋め込まれ、最初にオブジェクトを開いて表示に影響を与えます。 すべてのレンダリングはこのオブジェクトに書き込まれ、選択したすべてのページに追加できます(ただし制限があります)。



次に、ページの実際の幅と高さを取得して、追加するフッターの座標を計算します。 また、テキストコンテンツを追加するときにフォントオブジェクトを提供する必要があります。 Font_Metrics :: get_font()を使用すると、必要なオブジェクトを作成できます。 また、 get_font_height()を使用してフッターのコンテンツの位置を計算することにより、特定のフォントのサイズからフォントの高さを取得します。 get_font_width()メソッドは、特定のフォントとサイズのテキストの幅を返します。これは計算にも使用します。



line()メソッドは、ポイント(X1、Y1)からポイント(X2、Y2)に線を引きます。 RGBでは色の値が完全に置換されないことに注意してください。 メインPDFクラスには0〜1の値が必要なので、RGB値をこれらの新しい値に変換します。 より良い近似を得るために、それらを255で除算できます。



page_text()メソッドを使用して各ページに番号を追加します。このメソッドは、追加するテキスト、フォントオブジェクト、フォントサイズ、色だけでなく、X座標とY座標も受け取ります。 Dompdfは、各ページの{PAGE_NUM}および{PAGE_COUNT}の値を自動的に置き換え、 $ pdfを利用可能にします。



また、組み込みのPHPを使用して、次のようなPHPから直接同様の効果を実現することはできません。



 <?php $dompdf = new DOMPDF(); $dompdf->set_paper("A4"); // load the html content $dompdf->load_html($html); $dompdf->render(); $canvas = $dompdf->get_canvas(); $font = Font_Metrics::get_font("helvetica", "bold"); $canvas->page_text(16, 800, "Page: {PAGE_NUM} of {PAGE_COUNT}", $font, 8, array(0,0,0)); $dompdf->stream("sample.pdf",array("Attachment"=>0));
      
      







$ dompdf-> render()を呼び出した後にコードを配置することに注意してください。これは、作成済みのPDFを本質的に編集するためです。



まとめると



この記事では、Dompdfを使用してHTMLをPDFに変換する簡単な方法について説明しました。 Dompdfは優れたライブラリであるという事実にもかかわらず、PDFドキュメントを生成するための完全に普遍的なソリューションではありません。 まだ特定の制限と問題があります。 Dompdfは設計が不十分なHTMLに対してあまり寛容ではなく、大きなテーブルはメモリオーバーフローを容易に引き起こす可能性があります。 floatなどの一部の基本的なCSS機能は完全にはサポートされいません。 一般に、CSS3のサポートは非​​常に限られています。 Dompdfでサポートされていない関数が必要な場合、たとえばwkhtmltopdfが役立ちます。 それにもかかわらず、DompdfはPDFのエクスポートのほとんどのタスクを解決するための非常にシンプルで便利なツールです。



このような記事でライブラリのすべての機能を説明するのは実際非常に難しいので、ドキュメントとソースコード確認することを忘れないでください。また、コールバックの追加、独自のフォントの使用などの便利な機能を学んでください。



オリジナル-phpmaster.com/convert-html-to-pdf-with-dompdf



All Articles