

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)]は、次の順に処理します。
- ファイル型データ項目に保存されている HTML ファイルを、Adobe PDF Services にアップロードします
- PDF への変換を依頼します
- 変換が終わったら 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」「クライアントシークレット」を確認します |
関連記事・参考
関連記事
参考



