Power Automateでパーソナライズされた招待状を作成し、1つのPDFに結合する:Dropboxを使った7ステップのワークフロー

大量郵送の一番つらいところは手紙を書くことではなく、 パーソナライズされたコピーを縫い合わせる そのため、財務、人事、または業務部門は、50 個の添付ファイルの代わりに 1 つのクリーンな PDF を受け取ることができます。このウォークスルーでは、正確なパターンを構築します。 パワーオートマタ と PDF4meで文書を生成する(複数)、 複数のPDFファイルを結合する、 Dropbox、そして「各ループに適用」が1つ。フローアクションは7つ。DOCXテンプレートは1つ。受信者のJSON配列。出力は、受信者ごとに1ページずつ、名前が付けられ、Dropboxに自動的にアップロードされた統合PDFファイル1つ。
2 つの Dropbox ステップがフローを構成します。PDF4me の「ドキュメントの生成 (複数)」は、受信者ごとに 1 つのパーソナライズされた PDF を生成します。「各項目に適用」ループがすべての処理を囲みます。 ストリームファイル で base64ToBinary(...) そしてそれを配列変数にプッシュします。PDF4meの「複数のPDFファイルを結合」機能は、配列を1つの統合されたPDFに結合します。Dropbox ファイルを作成する 書き戻します。このフローは、受信者2人のバッチで1分以内に実行され、線形にスケーリングします。カスタム式は1つだけです。 base64tobinal 電話。
なぜ?という問いに対する質疑応答
(単一)ではなく(複数)の文書を生成する理由は何ですか? Single バリアントは 1 つのレコードを受け取り、1 つの PDF を出力します。N 個の PDF を生成するには、これを N 回呼び出し、それぞれに請求イベントとネットワークの往復を追加します。(Multiple) は JSON 配列全体を 1 つの呼び出しで受け取り、N 個の PDF をまとめて返します。 本文/出力ドキュメント1回の呼び出しで、1回の請求イベント、完全なバッチ処理。
なぜ配列変数に加えて「各要素に適用」を使うのか? ドキュメント生成(複数)は、各 PDF を base64 文字列として出力します。 ストリームファイル複数の PDF ファイルを結合するには、バイナリのコレクションが必要です。Apply to each ループは、この 2 つのブリッジになります。各 base64 文字列をバイナリに変換します。 base64ToBinary(...) そしてそれを配列変数にプッシュします。 マージファイルループの後、配列はマージアクションが期待するコレクションになります。
テンプレートとしてPDFではなくDOCXを使用する理由は何ですか? DOCX マージトークン (<<[名]>>、 <<[HC_WoM_Date]>>)は本文中に存在し、PDF4me エンジンが直接読み取ります。PDF テンプレートでは、事前にフォーム フィールド スキーマが必要ですが、これは手紙には過剰です。DOCX は Word、Office 365、Google Docs が既にエクスポートしている形式でもあるため、著者は自分のライティング ツールから離れることなくテンプレートを編集できます。
そもそもなぜ単一のPDFに結合する必要があるのか? コンプライアンスレビュー、バッチ印刷、署名監査証跡、および下流のアーカイブでは、N 個の添付ファイルよりも 1 つの統合 PDF が好まれます。個々のファイルが必要な場合は、 PDFをページ数で分割 = 1 ステップ7の前にアクションを追加すれば、残りのフローを再構築することなく両方の世界を実現できます。
得られるもの
入力: DOCXテンプレート1つ <<[merge_token]>> プレースホルダー /blog data/merge blog template/template.docx加えて、受信者の JSON 配列を [ドキュメントの生成 (複数)] アクションに貼り付けます。 出力: 単一のPDFファイル Merged_files.pdf アップロード先 /blog data/merge blog template/outputJSON配列と同じ順序で、受信者ごとにパーソナライズされたページが1つずつ作成されます。テンプレートはソースフォルダ内で変更されないため、再実行しても冪等性は維持されます。
必要なもの
- パワーオートマタ。 Power Automateを開くプレミアムコネクタ付きのプラン(PDF4me Connectはプレミアムプランです)。
- PDF4me APIキー。 APIキーを取得してくださいPDF4meアクションを初めて追加する際に接続してください。
- Dropboxテンプレートのソース、結合されたPDFの保存先。SharePoint、OneDrive、Google Driveは、それぞれのコネクタを使用して同様に動作します。
- マージトークンを含むDOCXテンプレート二重山括弧構文を使用します (
<<[フィールド名]>>) このウォークスルーではテンプレート.docx、 あなたはできる このチュートリアルで使用されているテンプレートをダウンロードしてください。 そして、すべてのスクリーンショットをDropboxにコピーして保存します。 - 受信者のJSON配列受信者ごとに1つのオブジェクト。キーはテンプレートトークンと完全に一致する。 サンプルJSONをダウンロード。
まずはサンプルファイルを入手してください。 落とす テンプレート.docx の中へ /blog data/merge blog template/ Dropboxに保存し、JSONファイルをスクラッチパッドに保管してください。そうすれば、以下のスクリーンショットの値が、ご自身のワークフローに表示される値と一致するはずです。
フローの概要
- フローを手動でトリガーする (トリガー)。
- Dropbox: パスを使用してファイルコンテンツを取得する読む
template.docxDropboxから。 - PDF4me:ドキュメント生成(複数)テンプレートと受信者のJSON配列を入力として受け取り、パーソナライズされたPDFの配列を出力します。
- 変数を初期化する 名前
mergefiles(配列)。 - それぞれに適用する の上
body/outputDocuments、 と 配列変数に追加 使用base64ToBinary(...)内部。 - PDF4me:複数のPDFファイルを1つのPDFファイルに結合する入力はバイナリファイルの配列、出力はPDFファイル1つ。
- Dropbox: ファイルの作成. 書く
Merged_files.pdfDropboxに戻る。
フローの概要全体

7つのアクション。各カードは設定が完了すると緑色のチェックマークが表示されます。PDF4meは中央に2回配置されています。1回は生成、もう1回は結合です。
ステップ0:DOCXテンプレート
フローを実行する前に、テンプレートには適切なマージトークンが必要です。 <<[FieldName]>> プレースホルダーは受信者ごとに一度置き換えられます。スペルと大文字・小文字はJSONキーと完全に一致する必要があります。
テンプレートのプレビュー

DOCXファイルは二重山括弧構文を使用します。特殊文字やXMLは使用せず、PDF4meエンジンが直接読み取るリテラルなプレースホルダーのみを使用します。
ステップ1:フローを手動でトリガーする
これまでの流れ: トリガーのみ。
- で パワーオートマタ クリック 作成する、 選ぶ 瞬時のクラウドフロー。
- 選ぶ フローを手動でトリガーする 引き金として。
- フローに名前を付けます (例:
Bulk Invitation Mailout)そしてクリック 作成する。 - 現時点では、トリガー入力欄は空欄のままにしておいてください。実際の運用トリガー(HTTPリクエスト、SharePointリストの更新、スケジュールなど)は、フローの他の部分が正常に動作するようになったら、ここに設定してください。
ステップ2:Dropbox:パスを使用してファイルコンテンツを取得する
これまでの流れ: トリガープラス ファイルコンテンツを取得します。
テンプレートのDOCXファイルを生のバイト列としてフローに読み込み、Generate Documentsがそれを直接処理できるようにします。
- クリック + 新しいステップ、 検索 Dropbox、 選ぶ パスを使用してファイルコンテンツを取得します。
- 接続する まだDropboxに登録していない場合は、登録してください。
- 設定する:
- ファイルパス:
/blog data/merge blog template/template.docx - コンテンツタイプを推測する:
Yes
- ファイルパス:
- 保存 フローを実行し、簡単なテストを実行します。アクションは、
File Contentテンプレートバイナリを含むトークン。
ファイルコンテンツ構成を取得します

「コンテンツタイプを推測する」を「はい」に設定すると、下流の PDF4me アクションがファイルを汎用ストリームではなく、実際の DOCX ファイルとして受け入れるようになります。
ステップ3:PDF4me:ドキュメントの生成(複数)
これまでの流れ: トリガー、ファイルコンテンツの取得、ドキュメントの生成(複数)。
ここでは、1つのDOCXファイルとJSON配列が、1回のアクション呼び出しでN個のパーソナライズされたPDFファイルに変換されます。
- クリック + 新しいステップ、 検索 PDF4me、 選ぶ 文書を生成する(複数)。
- 接続する PDF4meにAPIキーで接続します(初回のみ)。
- 設定する アクションの上半分:
- テンプレートファイルの種類:
Docx - テンプレートファイル名:
Test.docx(ラベルのみ、パスではありません) - テンプレートファイルデータ: 選ぶ ファイルの内容 ステップ2のトークン
- 文書データタイプ:
Json
- テンプレートファイルの種類:
ステップ3a:アクションの先頭

- JSON配列を貼り付けてください の中へ 文書データテキストウォークスルーでは、2 人の受信者 (John Doe、X AB) を使用します。各オブジェクトには同じ 19 個のキーがあり、すべてのキーは、
<<[Token]>>DOCXテンプレート内。
ステップ3b:JSONペイロード

[
{
"DebtorNumber": "100001",
"Salutation": "Mr",
"Title": "Dr.",
"FirstName": "John",
"LastName": "Doe",
"CareOfAddress": "c/o Accounting Department",
"Address": "123 Main Street",
"POBox": "PO Box 123",
"PostalCode": "10001",
"City": "New York",
"Country": "United States",
"HC_Name": "ABC Business Association",
"SalutationText": "Dear Dr. Doe",
"HC_Phone": "+1-212-555-0100",
"HC_WoM_RegistrationDeadline": "2026-05-22",
"HC_Street": "500 Park Avenue",
"HC_PostalCodeCity": "10022 New York",
"HC_WoM_Date": "2026-05-29",
"HC_WoM_Time": "10:00"
},
{
"DebtorNumber": "100001",
"Salutation": "Mr",
"Title": "Dr.",
"FirstName": "X",
"LastName": "AB",
"CareOfAddress": "c/o Accounting Department",
"Address": "123 Main Street",
"POBox": "PO Box 123",
"PostalCode": "10001",
"City": "New York",
"Country": "United States",
"HC_Name": "ABC Business Association",
"SalutationText": "Dear Dr. Doe",
"HC_Phone": "+1-212-555-0100",
"HC_WoM_RegistrationDeadline": "2026-05-22",
"HC_Street": "500 Park Avenue",
"HC_PostalCodeCity": "10022 New York",
"HC_WoM_Date": "2026-05-29",
"HC_WoM_Time": "10:00"
}
]
- 設定する 下半分:
- フィールドメタデータ: 空欄のままにしてください(通貨、日付、または数値の書式設定用、オプション)
- 出力タイプ:
PDF - PDFテンプレートを編集可能にする:
No
ステップ3c:出力タイプ

- 保存してテストするアクションが戻ります
body/outputDocuments受信者ごとに1つのオブジェクトの配列。各オブジェクトにはstreamFileパーソナライズされたPDFをbase64文字列として格納するプロパティ。
ヒント。 JSONキーが欠落している場合、出力PDFではエラーではなく空の文字列として表示されます。これはデータの一部が欠落している場合には許容されますが、タイプミスがあってもエラーとして表示されません。公開前にトークンリストとJSONキーを比較してください。どちらも大文字と小文字を区別します。
ステップ4:変数マージファイルの初期化
これまでの流れ: トリガー、ファイルコンテンツの取得、ドキュメントの生成(複数)、変数の初期化。
マージ処理ではバイナリファイルのコレクションが必要です。それらを格納する空の配列を作成してください。
- クリック + 新しいステップ、 選ぶ 変数を初期化する。
- 設定する:
- 名前:
mergefiles - タイプ:
Array - 価値: 空欄のままにしてください
- 名前:
変数設定を初期化する

変数の初期化は、それを必要とする最初の「各項目に適用」の前に必ず実行されます。Power Automate は、設計時にこの動作を強制します。
ステップ5:各要素に適用し、配列変数に追加する
これまでの流れ: トリガー + ファイルコンテンツの取得 + ドキュメントの生成 (複数) + 変数の初期化 + 各項目への適用。
PDFファイルをループ処理し、それぞれをバイナリバッファに変換する。
ステップ5a:それぞれに適用する(ソースを選択)
- クリック + 新しいステップ、 選ぶ それぞれに適用する。
- 設定する:
- 前の手順から出力を選択します: 選ぶ
body/outputDocuments「ドキュメントの生成(複数)」アクションから
- 前の手順から出力を選択します: 選ぶ

ステップ5b:配列変数に要素を追加する(ループ内)
- 各コンテナに適用する内をクリック アクションを追加する、 選ぶ 配列変数に追加。
- 設定する:
- 名前:
mergefiles - 価値 (表現、クリック)
fx):base64ToBinary(items('Apply_to_each')?['streamFile'])
- 名前:

これが全てを結びつける唯一の線だ。 ドキュメント生成(複数)は、base64文字列を出力します ストリームファイル複数のPDFファイルを結合するには、バイナリバッファが必要です。 base64ToBinary(...) は橋渡し役です。これがないと、マージ処理で「無効なコンテンツ」というエラーが発生します。
ステップ6:PDF4me:複数のPDFファイルを1つのPDFファイルに結合する
これまでの流れ: トリガー + ファイルコンテンツの取得 + ドキュメントの生成 (複数) + 変数の初期化 + 各項目への適用 + 複数の PDF の結合。
これで配列全体が入力され、1つのPDFが出力されます。
- 「各ループに適用」の下にある + 新しいステップ、 検索 PDF4me、 選ぶ 複数のPDFファイルを1つのPDFファイルに結合する。
- 設定する:
- 本文/ドキュメントコンテンツ: 選ぶ
mergefiles変数トークン - 出力ファイル名:
Test.pdf
- 本文/ドキュメントコンテンツ: 選ぶ
マージアクションの設定

- このアクションは、PDF を連結します。 配列の順序これはJSONの順序です。下流のコンシューマーが特定の順序(アルファベット順、債務者番号順、地域順など)を期待している場合は、ステップ3の前にJSONをソートしてください。そうすれば、残りのフローはその順序を維持します。
ヒント。 実行ごとに異なる出力ファイル名が必要ですか?動的に構築するには concat('Invitations_', utcNow('yyyy-MM-dd'), '.pdf') 出力ファイル名フィールドに入力します。結合されたPDFファイルには日付スタンプが付与され、再実行しても上書きされません。
ステップ7:Dropbox:ファイルの作成
これまでの流れ: トリガー、ファイルコンテンツの取得、ドキュメントの生成(複数)、変数の初期化、各項目への適用、複数の PDF の結合、ファイルの作成。
結合したPDFファイルをDropboxに書き戻します。
- クリック + 新しいステップ、 選ぶ Dropbox、 ファイルを作成する。
- 設定する:
- フォルダパス:
/blog data/merge blog template/output - ファイル名:
Merged_files.pdf - ファイルの内容: 選ぶ ファイルの内容 ステップ6(複数のPDFを結合する)からのトークン
- フォルダパス:
- 保存 流れ。
ファイル構成を作成する

フローを実行して検証する
- クリック テスト 右上で、 手動で、 クリック テスト、 それから フローを実行する。
- フロー実行パネルは、アクションが実行されるたびに緑色に変わります。「ドキュメントの生成(複数)」は、通常、単一ページテンプレートのレコードごとに1秒かかります。複数のPDFを結合すると、受信者が2人の場合、さらに1~2秒かかります。
- Dropboxを開く
/blog data/merge blog template/output/. ファイルMerged_files.pdfありますか。
出力は、並べて表示されます。


実際に何を作ったのですか? 単一のDOCX形式のメールとJSON形式の受信者リストを、印刷、署名、アーカイブ、添付が可能な統合PDFファイルに変換する、ゼロタッチ一括メール送信ツールです。受信者が2人でも2,000人でも、フィールド値を変更することなく同じパターンで処理できます。このパターンは、Make(イテレータとPDF4me Mergeモジュール)とZapier(Zapierのループ処理とPDF4me Mergeアクション)の両方で動作します。
再構築せずに追加できる一般的なバリエーション
Merged_files.pdf そして、郵送物はDropboxを経由することなく、財務、運用、または印刷部門に直接送られます。PDF/A-2bDropboxに保存されたコピーは、アーカイブに適した状態であり、ISO 19005規格に準拠しています。トラブルシューティング
の 価値 配列に追加の式はラップされていません base64ToBinary(...)変換を行わないと、マージアクションはバイナリバッファではなくbase64文字列を受け取ります。配列に追加を再度開き、式エディタに切り替えて貼り付けます。 base64ToBinary(items('Apply_to_each')?['streamFile']) 原文のまま。
JSONキーがテンプレートトークンと一致しません。「ドキュメント生成(複数)」では、不足しているキーを空の文字列で置き換えます。これは許容範囲は広いものの、入力ミスがあってもエラーが表示されません。DOCXトークンリストとJSONキーを比較してください。どちらも大文字と小文字を区別します。
「各項目に適用」ループが間違ったソースを反復処理しています。ループを開いて確認してください。 前の手順から出力を選択します を指差す 本文/出力ドキュメント (配列全体)であって、1つのレコードの単一のプロパティではない。
ページ順序は JSON 順序と一致します。ドキュメント生成 (複数) の前に JSON 配列をソートします。 選択 または 作曲する 受信者が必要な順序で届くようにアクションを実行します。
次のステップ
Power Automate でのあらゆる一括パーソナライズメール配信には、同じ 7 つのステップ (トリガー、テンプレートの取得、バッチの生成、配列へのループ、マージ、保存) が機能します。1 通配信すれば、次の配信はほとんどコストがかかりません。