インストール
composer require 'drupal/fillpdf:^5.2'
composer require 'drupal/fillpdf:^5.1'
概要
FillPDFは、Drupalサイトのデータを使用して入力可能なPDFフォームに自動的にデータを入力できる強力なモジュールです。トークンベースのフィールドマッピングをサポートしており、PDFフォームフィールドをNode、User、Webform、その他のコンテンツエンティティのデータにマッピングできます。
このモジュールは、PDFtk(ローカルインストール)、FillPDF LocalServer(DockerベースのAPI)、FillPDF Service(リモートAPI)など、柔軟なPDFバックエンドオプションを提供します。生成されたPDFは、直接ダウンロード、ファイルシステムへの保存、または自動リダイレクトが可能です。
主な機能には、PDFフィールドへの画像挿入、テキストの変換・置換、PDFセキュリティ設定(PDFtkによる暗号化とパーミッション)、サイト間でのフォーム設定のエクスポート・インポート機能が含まれます。
Features
- トークンベースのフィールドマッピングを使用して、Node、User、Webform、その他のコンテンツタイプのエンティティデータで入力可能なPDFフォームに自動入力
- 複数のPDF処理バックエンドをサポート:PDFtk(ローカル)、FillPDF LocalServer(Docker)、FillPDF Service(リモートAPI)
- フィールド名を表示するサンプルPDFを生成し、フィールドの識別とマッピングを容易化
- 生成されたPDFをファイルシステム(publicまたはprivate)に保存、またはブラウザに直接送信してダウンロード
- 動的なファイル名パターンと保存先パスのためのトークンサポート
- PDFに挿入する前に値を変更するためのテキスト変換・置換ルール
- 暗号化(128ビットまたは40ビット)とユーザーパーミッションを含むPDFセキュリティ機能(PDFtkバックエンド経由)
- サイト間でのFillPDFフォーム設定とフィールドマッピングのエクスポートとインポート
- 既存のFillPDFフォーム設定の複製
- PDFテンプレート内の画像フィールドのサポート
- フォーム送信からPDFを入力するためのWebformモジュールとの連携
- FillPDFフォームとフィールドを管理するためのViewsとの連携
- フォームの動作とPDF入力コンテキストを変更するためのhook
Use Cases
契約書・同意書の生成
Nodeまたはユーザープロファイルからの顧客データで契約書PDFを自動入力します。契約書テンプレートからFillPDFフォームを作成し、フィールドをnode:title、user:nameなどにマッピングし、/fillpdf?fid=1&entity_id=node:42のようなURLでパーソナライズされた契約書を生成します。
Webform送信からPDFへ
Webform送信を入力済みPDFドキュメントに変換します。Webformの入力可能なPDF版をアップロードし、フィールドをwebform_submissionトークンにマッピングし、ユーザーが送信内容をプロフェッショナルなPDFとしてダウンロードできるようにします。
証明書の生成
ユーザー名と日付入りの証明書を生成します。名前、コースタイトル、修了日などの入力可能なフィールドを持つ証明書テンプレートを作成し、自動生成のためにユーザーと日付トークンにマッピングします。
申請フォームの事前入力
既知のユーザーデータで申請PDFを事前入力します。PDFフィールドをユーザープロファイルトークンにマッピングして、リピーターユーザーが情報が既に入力された申請フォームをダウンロードできるようにします。
請求書・領収書の生成
Commerceまたはカスタムエンティティからの注文データで入力された請求書を作成します。商品名、数量、価格、顧客情報をマッピングして、ダウンロード可能な請求書を生成します。
複数エンティティのドキュメントマージ
1つのPDFに複数のエンティティからのデータを組み合わせます。/fillpdf?fid=1&entity_ids[]=node:10&entity_ids[]=user:7のようなURLパラメータを使用して、異なるソースからのデータをマージします。
Tips
- 「サンプルPDF」機能を使用してすべてのフィールド名を表示するPDFを生成すると、フィールドマッピングがはるかに簡単になります。
- 入力可能なPDFを作成する際は、トークンマッピングを容易にするために特殊文字を含まないシンプルなフィールド名を使用してください。
- セキュリティのため、機密データを含む生成されたPDFにはprivate://ストレージスキームを使用してください。
- 大きな変更を行う前にFillPDFフォーム設定をエクスポートしてください。必要に応じて再インポートできます。
- PDFがディスクに保存されるように設定されていても、&download=1 URLパラメータでダウンロードを強制できます。
- ユーザーが引き続き入力できる編集可能なPDFを生成するには、&flatten=0パラメータを使用してください。
- 本番環境にデプロイする前に、デフォルトエンティティでPDF入力をテストしてください。
- PDFtkバックエンドでは、機密ドキュメントに128ビット暗号化を使用し、オーナー/ユーザーパスワードを設定してください。
- 値の変換は順番に処理されます。より具体的な置換を一般的なものより前に配置してください。
Technical Details
Admin Pages 7
/admin/config/media/fillpdf
FillPDFのPDF処理バックエンドとストレージ設定を構成します。ここでどのPDF操作ツールを使用するか選択し、その固有の設定を構成します。
/admin/structure/fillpdf
FillPDFフォームを管理するためのメイン概要ページ。アップロードされたすべてのPDFテンプレートを一覧表示し、新しいテンプレートをアップロードするインターフェースを提供します。
/admin/structure/fillpdf/{fillpdf_form}
FillPDFフォームの設定を編集し、フィールドマッピングを管理します。PDFにエンティティデータがどのように入力されるかを設定します。
/admin/structure/fillpdf/{fillpdf_form}/{fillpdf_form_field}
特定のPDFフォームフィールドのマッピングを設定します。入力パターン(トークン)と値の変換を含みます。
/admin/structure/fillpdf/{fillpdf_form}/export
FillPDFフォーム設定とフィールドマッピングを、別のサイトにインポートするためのJSONコードとしてエクスポートします。
/admin/structure/fillpdf/{fillpdf_form}/import
別のFillPDFフォームからフィールドマッピングをインポートします。サイト間で設定をコピーする際に便利です。
/admin/structure/fillpdf/{fillpdf_form}/duplicate
すべてのフィールドマッピングを含む既存のFillPDFフォームのコピーを作成します。
権限 3
Hooks 2
hook_fillpdf_form_form_pre_form_build_alter
FillPdfFormFormの編集フォームを構築する前に変更を加えることができます。デフォルト値の設定やフォームの動作の変更に便利です。
hook_fillpdf_populate_pdf_context_alter
HandlePdfController::populatePdf()でのPDF入力中にコンテキスト配列を変更できます。エンティティID、フラグの変更、または追加データの追加が可能です。
Troubleshooting 7
PDFに実際の入力可能なフォームフィールド(Adobe Acrobatなどで作成)が含まれていることを確認してください。通常のテキスト注釈は入力可能なフィールドではありません。「サンプルPDF」リンクを使用してフィールド検出を確認してください。
pdftkがサーバーにインストールされ、アクセス可能であることを確認してください。FillPDF設定でフルパス(例:/usr/bin/pdftk)を指定してみてください。コマンドラインで「pdftk --version」を実行してテストしてください。
Dockerコンテナが実行中で、エンドポイントURLが正しいことを確認してください。ローカルDockerのデフォルトエンドポイントはhttp://127.0.0.1:8085です。ファイアウォール設定が接続を許可していることを確認してください。
FillPDFフォーム編集ページでファイル名パターンを設定してください。パターンはトークンをサポートします。動的なファイル名には[node:title]などのトークンを使用してください。
URLパラメータで正しいエンティティタイプが指定されていることを確認してください。トークン構文が正しいことを確認してください。フィールド編集フォームのトークンブラウザを使用して有効なトークンを選択してください。
画像サポートにはFillPDF ServiceまたはLocalServerバックエンドが必要です。PDFtkバックエンドは画像フィールドをサポートしていません。画像トークンが有効なファイルパスに解決されることを確認してください。
以前に設定されたストレージスキームがもはや存在しない可能性があります。FillPDF設定に移動してtemplate_schemeを更新してください。PDFテンプレートファイルを新しい場所に手動で移動する必要がある場合があります。
Security Notes 6
- 「すべてのPDFを公開」パーミッションは、ユーザーがPDF生成を通じて任意のエンティティのデータにアクセスすることを許可します。このパーミッションは慎重に付与してください。
- パブリックファイルストレージ(public://)はアクセス制御を提供しません。機密情報を含むPDFにはprivate://を使用してください。
- PDFtkによるPDF暗号化はpdftkバックエンドでのみ機能します。他のバックエンドは暗号化をサポートしていません。
- 暗号化を使用する場合は常にオーナーパスワードを設定してください。そうしないと、誰でもセキュリティ設定を変更できます。
- FillPDF Serviceはネットワーク経由でPDFデータを送信します。リモートバックエンドを使用する前に、HTTPSを使用し、データの機密性を考慮してください。
- エンティティのアクセス制御が適切に設定されていることを確認してください。FillPDFはエンティティアクセスを尊重しますが、「すべてのPDFを公開」パーミッションがあると、ユーザーは任意のエンティティ用のPDFを生成できます。