業務データが挿し込まれた HTML から PDF を生成する(Adobe 連携)

Adobe PDF Services は、PDF の生成や変換を API で提供する Adobe のサービスです。Questetra BPM Suite には、Adobe PDF Services を呼び出して HTML ファイルから PDF ファイルを生成する自動工程[Adobe: PDF 生成(HTML to PDF)]があります。

この記事では、簡単な見積書を PDF にするワークフローアプリを作りながら、この工程を使うための準備と設定を説明します。業務データが挿し込まれた HTML の基本的な作り方は、DocRaptor と連携する場合と共通です。記事「業務データが挿し込まれた HTML から PDF を生成する(DocRaptor 連携)」を参照してください。Adobe PDF Services に固有の注意点は「ソース HTML の準備」で説明します。

工程の動き

[Adobe: PDF 生成(HTML to PDF)]は、次の順に処理します。

  1. ファイル型データ項目に保存されている HTML ファイルを、Adobe PDF Services にアップロードします
  2. PDF への変換を依頼します
  3. 変換が終わったら PDF ファイルをダウンロードし、ファイル型データ項目に保存します

変換は Adobe PDF Services の側で非同期に行われます。変換が終わるまで、ケースはこの工程で待ちます。

サンプルアプリの作成

HTTP 認証設定はワークフローアプリに紐づけて登録するので(「HTTP 認証設定の登録」を参照)、最初にワークフローアプリを作り、工程を配置してデータ項目を定義します。

  • [開始イベント]
  • 「データ入力」([ヒューマンタスク])
  • 「HTML ファイル生成」([テキストファイル生成])
  • 「PDF 生成」([Adobe: PDF 生成(HTML to PDF)])
  • [終了イベント]

データ項目は次のとおりです。

データ項目名データ型フィールド名「データ入力」工程での表示説明
宛先文字 (単一行)q_customer編集可能見積書の宛先です
品名文字 (単一行)q_item編集可能見積書の品名です
金額数値q_amount編集可能見積書の金額です
HTML ファイルファイルq_html非表示「HTML ファイル生成」工程が書き出した、業務データが挿し込まれた HTML ファイルを保存します
PDF ファイルファイルq_pdf非表示生成された PDF ファイルを保存します

Adobe PDF Services の資格情報の取得

Adobe PDF Services を呼び出すには、クライアント ID とクライアントシークレットが必要です。 Adobe の開発者向けサイトにある Adobe PDF Services API の Getting Started の手順に沿って、資格情報(Credentials)を作成します。Adobe ID でのサインインが必要です。作成手順は変わることがあります。最新の手順は Adobe のドキュメントで確認してください。

資格情報を作成すると、次の 2 つが発行されます。どちらも「HTTP 認証設定の登録」で使います。

  • クライアント ID(Client ID)
  • クライアントシークレット(Client Secret)

この手順で作成する資格情報は無料ですが、処理できる量に上限があります。 上限を増やすには、Adobe と有料の契約を結びます。詳細は、Adobe のドキュメント(Licensing and Usage Limits)を参照してください。

ソース HTML の準備

業務データを挿し込む箇所に SpEL 式を書いた HTML を、この記事では「ソース HTML」と呼びます。ソース HTML を自動工程[テキストファイル生成]で HTML ファイルに書き出すと、業務データが挿し込まれた HTML ファイルになります。これを[Adobe: PDF 生成(HTML to PDF)]に渡します。SpEL 式の書き方と編集の進め方は、DocRaptor 連携の記事「業務データが挿し込まれた HTML から PDF を生成する(DocRaptor 連携)」の「業務データを挿し込むソース HTML の準備」と「テンプレートの編集」を参照してください。

CSS は HTML の中に書き、画像は data: 形式で HTML に埋め込むか、インターネットから取得できる URL で参照します。 画像や CSS を別のファイルにして、データ項目「HTML ファイル」に一緒に保存することはできません(後述の「PDF 生成」工程の設定を参照)。URL で参照した場合、画像の配信元によっては Adobe PDF Services が画像を取得できず、PDF に表示されないことがあります。

DocRaptor 連携の記事のソース HTML には、DocRaptor の変換エンジン向けの CSS(-prince-float など)が含まれています。Adobe PDF Services では同じ見た目にならないことがあるので、DocRaptor 連携の記事のソース HTML をそのまま使う場合は、生成された PDF で見た目を確認してください。

「HTML ファイル生成」工程の設定

「HTML ファイル生成」工程([テキストファイル生成])の設定項目と、サンプルアプリで設定する内容は次のとおりです。

設定項目サンプルアプリでの設定
C1: テキストファイルを保存するファイル型データ項目「HTML ファイル」
C2: 保存時に他のファイルを削除する「オン」
C3: 保存ファイル名source-#{processInstanceId}.html
C4: テキストファイルの内容この節の後半に示すソース HTML
C5: 保存する際の文字コードUTF-8(空欄でも UTF-8 になります)
C6: 保存する際のファイルタイプtext/html

「HTML ファイル生成」工程の C6 は必ず text/html にします。 未設定のときは text/plain で保存されるので、「PDF 生成」工程が Content-Type の確認でエラーになります。

「HTML ファイル生成」工程の C4 に設定するソース HTML は次のとおりです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<style>
  body { font-family: sans-serif; margin: 2cm; }
  h1 { font-size: 20pt; }
  table { width: 100%; border-collapse: collapse; margin-top: 1cm; }
  th, td { border: 1px solid #999; padding: 6px; }
  td.amount { text-align: right; }
</style>
</head>
<body>
  <h1>御見積書</h1>
  <p>#{#escaper.escapeHtml(#q_customer)} 様</p>
  <p>見積番号: #{processInstanceId}</p>
  <table>
    <tr><th>品名</th><th>金額</th></tr>
    <tr><td>#{#escaper.escapeHtml(#q_item)}</td><td class="amount">#{#q_amount} 円</td></tr>
  </table>
</body>
</html>

「HTML ファイル生成」工程が実行されると、SpEL 式がデータ項目の値やケース ID に置き換わります。宛先と品名は、#escaper.escapeHtml() で HTML エスケープしてから挿し込んでいるので、入力に < や & が含まれていても HTML の構造が崩れません。

HTTP 認証設定の登録

「PDF 生成」工程の設定画面を開き、「C1: OAuth2 設定」の[設定はこちらから]をクリックします。「HTTP 認証設定 Adobe: Generate PDF」の画面が別ウィンドウで開きます。

この画面は Adobe PDF Services 専用です。 「認証タイプ」(OAuth2 クライアント資格情報フロー)、「トークンエンドポイントURL」、「スコープ」は、あらかじめ決まった値で、画面の上部に表示されます。これらを選んだり入力したりする操作はありません。アクセストークンは工程の実行時にクライアント ID とクライアントシークレットで取得されるので、登録時に取得しておく操作もありません。

HTTP 認証設定には、ワークフローアプリごとに保持される「アプリ固有の設定」と、ほかのワークフローアプリからも選べる「全アプリで共有される設定」があります。「全アプリで共有される設定」を編集できるのはシステム管理者だけです。この記事では「アプリ固有の設定」を使います。HTTP 認証設定の種類については「HTTP 認証設定について理解する」を参照してください。

「アプリ固有の設定」の[追加]をクリックし、次の 3 つを入力して[保存]をクリックします。

項目入力する内容
名前設定を見分けるための名前(例: 「Adobe PDF Services」)
クライアントID「Adobe PDF Services の資格情報の取得」で取得したクライアント ID
クライアントシークレット「Adobe PDF Services の資格情報の取得」で取得したクライアントシークレット

保存すると HTTP 認証設定の一覧に戻ります。工程の設定画面のウィンドウに切り替えます。登録した名前は、次の節で「C1: OAuth2 設定」の選択肢として使います。

「PDF 生成」工程の設定

「PDF 生成」工程([Adobe: PDF 生成(HTML to PDF)])の設定項目と、サンプルアプリで設定する内容は次のとおりです。

設定項目サンプルアプリでの設定
C1: OAuth2 設定登録した名前(例: 「Adobe PDF Services」)
C2: 変換元の HTML ファイルが保存されているデータ項目「HTML ファイル」
C3: PDF ページサイズ「A4 縦」
C4: 生成された PDF ファイルを保存するデータ項目「PDF ファイル」
C5: 保存時に他のファイルを削除する「オン」
C6: 保存する際のファイル名見積書-#{processInstanceId}.pdf

「C1: OAuth2 設定」の選択肢に登録した名前が表示されない場合は、工程の設定画面を再読み込みしてください。

「PDF 生成」工程の C2 のデータ項目には、Content-Type が text/html の HTML ファイルが 1 つだけ保存されている必要があります。 条件を満たさない場合のエラーは、「動作確認」の表を参照してください。

動作確認

ワークフロー図の開始イベントのプロパティで[デバッグ用ケースを開始]をクリックし、「ケースのデバッグ実行」で[ケースの開始]をクリックします。「データ入力」工程で「宛先」「品名」「金額」を入力して処理を完了します。デバッグ実行が終了したら、ケースの詳細画面で「PDF ファイル」を開き、入力した値が挿し込まれていることを確認します。

デバッグ実行でも Adobe PDF Services が呼び出されるので、利用量に数えられます。 ソース HTML を何度も直す場合は、「Adobe PDF Services の資格情報の取得」で説明した上限に注意してください。

PDF が生成されないときは、自動処理ログで「PDF 生成」工程のエラーを確認します。 主なエラーメッセージは次のとおりです。

エラーメッセージ原因と確認箇所
No source file attached.「PDF 生成」工程の C2 のデータ項目にファイルがありません。「HTML ファイル生成」工程の C1 を確認します
More than one source files attached.「PDF 生成」工程の C2 のデータ項目にファイルが 2 つ以上あります。「HTML ファイル生成」工程の C2 を確認します
Source file is empty.「PDF 生成」工程の C2 のデータ項目のファイルが空です。「HTML ファイル生成」工程の C4 を確認します
Content-Type of the source file is not text/html.「PDF 生成」工程の C2 のデータ項目のファイルの Content-Type が text/html ではありません。「HTML ファイル生成」工程の C6 を確認します
invalid_client を含むエラーアクセストークンの取得で HTTP 400 が返りました。HTTP 認証設定の「クライアントID」「クライアントシークレット」を確認します

関連記事・参考

関連記事

参考

Questetra Supportをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む