Entity Print
Entity PrintはDrupalのEntityやViewをPDF、Word文書、またはEPub形式で印刷できるモジュールです。DomPdf、wkhtmltopdf、TCPDFなど設定可能なPDFエンジンを使用します。
entity_print
インストール
composer require 'drupal/entity_print:8.x-2.18'
概要
Entity Printは、Drupalのコンテンツエンティティ(Node、ユーザー、Commerceの商品など)やViewsを、PDF、Word文書(DOCX)、EPubなど複数の形式でダウンロード可能なドキュメントに変換できる包括的なPDF印刷ソリューションです。
このモジュールは軽量ながら強力なアーキテクチャを提供し、完全なテストカバレッジを備え、複数のPDF生成エンジン(DomPdf、wkhtmltopdf、TCPDF)をサポートしています。Drupalの表示モードとシームレスに統合され、管理者はエンティティ表示ページにどのエクスポートタイプを表示するか設定できます。
主な機能:サービスAPIを介したプログラムによるPDF生成、Views Bulk Operationsアクションによる一括ダウンロード、カスタマイズ可能なテンプレートとCSSスタイル、高度なカスタマイズのためのイベントシステム、エンティティタイプとバンドルごとの包括的な権限制御。
Features
- あらゆるDrupalコンテンツエンティティ(Node、ユーザー、タクソノミーターム、Commerce商品など)をPDF、Word文書、またはEPub形式に変換
- Entity Print Viewsサブモジュールで、露出フィルターと引数をサポートしたViews全体の印刷が可能
- 複数のPDFエンジンをサポート:DomPdf(デフォルト、Composer経由で含まれる)、wkhtmltopdf(外部バイナリ)、TCPDF
- 印刷エンジンごとに用紙サイズ、向き、DPI設定を構成可能
- Extra Field統合により、エンティティ表示設定に「PDFを表示」リンクを配置可能
- エンティティページにコンテキストに応じた印刷リンクを表示するBlockプラグイン
- 複数のエンティティをPDFとして一括ダウンロードするViews Bulk Operations(VBO)アクション
- Viewのヘッダー/フッターに印刷リンクを追加するViewsエリアハンドラー
- Viewの各行に印刷リンクを追加するViewsフィールドハンドラー
- PDF変換前に生成されたHTMLを確認できるデバッグモード(CSSスタイリングに便利)
- HTML、CSS、ファイル名、印刷出力をカスタマイズするためのイベントシステム
- アクティブなテーマとアタッチされたライブラリからのCSS自動収集
- PDFに画像を直接埋め込むためのBase64画像フォーマッター
- 保護されたリソースへのHTTP認証サポート
- PDF内のプライベートファイルにアクセスするためのセッションCookie転送
- PrintBuilderサービスを介したPDFの生成と保存のためのプログラマティックAPI
- 印刷アクセスのためのエンティティタイプとバンドルごとの詳細な権限設定
- インストール時にカスタマイズされた印刷レイアウト用の「PDF」表示モードを作成
- カスタマイズ可能なentity-print.html.twigテンプレートによるテーマサポート
Use Cases
ダウンロード可能な請求書の生成
注文エンティティタイプでEntity Printを有効にし、請求書レイアウト用の「PDF」表示モードを設定し、注文表示に「PDFを表示」フィールドを追加することで、Commerce注文からPDF請求書を作成します。ユーザーはリンクをクリックして請求書をダウンロードできます。
証明書の一括印刷
Views Bulk OperationsとEntity Printアクションを使用して、複数の証明書Nodeを選択し、結合されたPDFダウンロードを生成します。Viewsでアクションを設定し、一括操作ドロップダウンから「PDFダウンロード」を選択します。
Viewsからのレポート印刷
Entity Print Viewsサブモジュールを有効にし、Viewのヘッダーに「グローバル: 印刷」エリアハンドラーを追加します。ユーザーは露出フィルター条件に一致するすべての行を含むView全体の出力を印刷できます。
カスタムPDFスタイリング
テーマにentity-print--node--article.html.twigを作成して記事の印刷レイアウトをカスタマイズします。テーマのライブラリに「pdf」表示モードをターゲットにしたCSSファイルを追加して、Webサイトとは異なるPDF出力のスタイルを設定します。
プログラムによるPDF生成
entity_print.print_builderサービスを使用して、カスタムコードやキューワーカーでPDFを生成します。savePrintable()を呼び出してPDFをディスクに保存するか、deliverPrintable()を使用してブラウザにストリーミングします。イベントをサブスクライブして出力を動的にカスタマイズします。
PDFスタイリングのデバッグ
任意の印刷URLに/debugを追加(例:/print/pdf/node/1/debug)して、PDFに変換される生のHTMLを確認します。これを使用してCSSの問題をデバッグし、最終PDF生成前にコンテンツレンダリングを確認します。
Tips
- 各コンテンツタイプに専用の「PDF」表示モードを作成して、Webサイト表示に影響を与えずに印刷ドキュメントに表示される内容を正確に制御します。
- 開発中は/debugエンドポイント(例:/print/pdf/node/1/debug)を使用して、PDFに変換される前のHTMLを確認します。
- テーマにentity-printテンプレートクラスをターゲットにしたCSSファイルを作成して、印刷固有のCSSを追加します。
- カスタムファイル名にはentity_print.print.filename_alterイベントをサブスクライブし、ファイル名配列を変更します。
- CLIコンテキスト(drush、キューワーカー)で印刷する場合は、適切な絶対URL生成のためにベースURL設定を構成してください。
- 一部のPDFエンジンでの外部URL読み込みの問題を回避するために、PDF表示モードの画像フィールドにはBase64エンコード画像フォーマッターを使用してください。
Technical Details
Admin Pages 1
/admin/config/content/entityprint
各エクスポートタイプ(PDF、EPub、Word文書)のデフォルト印刷エンジンと、デフォルトCSS、強制ダウンロード動作、CLI使用時のベースURLなどPDF生成のグローバル設定を構成します。
権限 5
Troubleshooting 5
Dompdf設定で「リモートURLを有効化」がチェックされていることを確認してください。プライベートファイルの場合、モジュールは自動的にセッションCookieを転送します。問題のある画像にはBase64エンコード画像フォーマッターの使用を検討してください。
テーマに「pdf」表示モードをターゲットにしたCSSを追加するか、entity_printライブラリを使用してください。CSSファイルがlibraries.ymlで適切にアタッチされていることを確認してください。/debugエンドポイントを使用して適用されたスタイルを確認してください。
設定のバイナリパスが正しいことを確認してください。wkhtmltopdfバイナリがWebサーバーユーザーによって実行可能であることを確認してください。サーバーログで権限エラーを確認してください。
Web セーフフォントを使用するか、カスタムフォントが適切に埋め込まれていることを確認してください。デフォルトCSSは一般的に利用可能なDejaVu Sansを使用します。DomPdfでカスタムフォントを使用する場合は、フォントディレクトリ設定を構成してください。
大きなドキュメントやViewsの場合、PHPのmax_execution_timeを増やしてください。複雑なHTMLにはwkhtmltopdfの使用を検討してください。Viewsの場合、ページあたりのアイテム数を制限してください。
Security Notes 5
- PDFエンジン用のHTTP認証資格情報は設定にプレーンテキストで保存されます。機密性の高い資格情報には環境変数やシークレット管理を使用してください。
- SSLピア検証設定は開発環境でのみ無効にし、本番環境では絶対に無効にしないでください。
- PDF生成はリソースを大量に消費する可能性があります。高トラフィック環境では印刷リクエストのレート制限を検討してください。
- 「Entity Printを管理」権限は制限付きアクセスとしてマークされており、信頼できる管理者にのみ付与する必要があります。
- savePrintable()をプログラムで使用する場合、デフォルトスキームが「public」でファイルがWebアクセス可能になることに注意してください。機密ドキュメントには「private」スキームを使用してください。