差し込み印刷は、手紙、ラベル、封筒などの文書をすばやく簡単に作成するための Microsoft Word の機能です。Aspose.Words Cloud は、標準的な差し込み印刷をさらに進化させ、レポート、カタログ、在庫、請求書などのさらに複雑な文書を生成できる本格的なレポート ソリューションに変えています。Aspose.Words Cloud レポート ソリューションの利点は次のとおりです。
- 標準の差し込み印刷フィールドを使用して Microsoft Word でレポートを設計する
- 注文の詳細行など、文書内で拡大する領域を定義する
- 差し込み印刷中に画像を挿入する
- 差し込み印刷中に HTML を挿入する
基本的な手順
差し込み印刷を実行する手順は非常に簡単です。まず、Microsoft Word を使用して、通常テンプレートと呼ばれる Word 文書を作成および設計します。文書は Microsoft Word テンプレート (.dot) である必要はなく、通常の .doc 文書でもかまいません。データ ソースから後でデータを挿入する場所に、差し込みフィールドと呼ばれる特別なフィールドをテンプレートに挿入します。次に、Aspose.Words REST API を使用して差し込み印刷操作を実行します。差し込み印刷操作では、データ ソースからデータを取得して文書に差し込みます。
また、文書内に繰り返し可能な差し込み印刷領域を指定したり、画像などの他のコンテンツを挿入できる特別な差し込み印刷フィールドを挿入したりすることもできます。文書内の差し込み印刷フィールドと繰り返し可能な領域の設定方法に応じて、文書はデータ ソース内の複数のレコードを収容できるように拡張されます。差し込み印刷領域を使用しない場合、差し込み印刷は Microsoft Word の差し込み印刷に類似したものになり、文書全体のコンテンツがデータ ソース内の各レコードに対して繰り返されます。繰り返し可能な差し込み印刷領域を使用すると、文書内でデータ ソース内の各レコードに対して繰り返される部分を指定できます。たとえば、表の行を繰り返し可能な領域としてマークすると、この表の行が繰り返され、表はすべてのデータを収容できるように動的に拡張されます。
文書を準備する
差し込み印刷を実行する前に、ドキュメント テンプレートを準備する必要があります。データ ソースの値に置き換えられる差し込みフィールドを挿入する必要があります。
文書に差し込みフィールドを挿入する
ドキュメントにマージフィールドを挿入するには:
- Microsoft Word でドキュメントを開きます。
- ドキュメント内で、差し込みフィールドを配置する場所をクリックします。
- [挿入] メニューを開き、[フィールド] を選択して [フィールド] ダイアログを開きます。
- フィールド名リストから、MergeField を選択します。
- [フィールド名] テキスト ボックスにマージ フィールドの名前を入力し、[OK] を押します。
差し込みフィールドは通常の Microsoft Word フィールドであるため、キーボード ショートカット Alt+F9 を使用して、Microsoft Word のドキュメントでフィールド コードと結果の表示を切り替えることができます。フィールド コードは中括弧内に表示されます。
シンプルな差し込み印刷
テンプレートを準備して、単純な差し込み印刷 (領域なし、Microsoft Word で使用できる従来の差し込み印刷に類似) を実行するには、データ ソースからのデータを入力する場所に 1 つ以上の差し込みフィールドを挿入するだけです。
ディナー招待状のデモを見てみましょう。このデモでは、データ ソースで定義されたクライアントの一覧に対するレターを作成します。テンプレートには、2 つのデータ ソースから入力される多数の差し込みフィールドが含まれています。つまり、2 つの差し込み印刷が順番に実行されます。最初に、最初のデータ ソースのデータがテンプレートに差し込まれます。このデータ ソースには、招待者に関する情報であるため 1 行しか含まれません。そのため、ドキュメント コンテンツ全体が繰り返されることはなく、適切なフィールドにのみデータが入力されます。次に、2 番目の差し込み印刷操作が実行されます。この操作で使用されるデータ ソースには、クライアントに関する情報が含まれています。テンプレート全体が各データ行に対して繰り返され、繰り返されるすべてのコピーに、対応するクライアントのデータが入力されます。
その結果、記入済みで完全な、個人化された招待状 5 通で構成される文書ができました (最初の招待状の一部を以下に示します)。
ご覧のとおり、同じテンプレートを使用して複数のマージ操作を実行し、段階的にデータを追加することが可能であり、場合によっては便利です。Word 文書に NEXT フィールドを挿入すると、差し込み印刷エンジンがデータ ソースから次のレコードを選択し、マージを続行します。エンジンが NEXT フィールドを検出すると、データ ソースの次のレコードを選択し、コンテンツをコピーせずにマージを続行します。これは、宛名ラベルなどの文書を作成するときに使用できます。
シンプルな差し込み印刷を実行するコードを以下に示します。
// 完全な例とデータファイルについては、https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet をご覧ください。
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "DinnerInvitation.docx";
var destFileName = "InviterAdded.docx";
var data = File.ReadAllText(@"c:\Data\" + "Inviter.xml");
string folder = null; // File exists at the root of the storage
// ソースドキュメントをクラウドストレージにアップロードする
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
// 初めて差し込み印刷操作を実行する
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
// 差し込み印刷操作を2回目に実行する
fileName = destFileName;
destFileName = "FinalDinnerInvitation.docx";
data = File.ReadAllText(@"c:\Data\" + "Clients.xml");
executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
領域付きメールマージ
ドキュメント内の部分を動的に拡張する場合は、領域付きの差し込み印刷を使用します。ドキュメント内に差し込み印刷領域を指定するには、差し込み印刷領域の開始と終了を示す差し込み印刷フィールドを 2 つ挿入する必要があります。差し込み印刷領域内に含まれるすべてのドキュメント コンテンツは、データ ソース内のすべてのレコードに対して自動的に繰り返されます。
差し込み印刷領域の開始をマークするには、TableStart:MyTable という名前の MERGEFIELD を挿入します。ここで、MyTable はそれぞれ XML または JSON のタグまたはキーに対応します。差し込み印刷領域の終了をマークするには、TableEnd:MyTable という名前の別の MERGEFIELD を挿入します。これらのマーク フィールドの間に、データ ソースのフィールドに対応する差し込みフィールドを配置します。これらの差し込みフィールドには、データ ソースの最初の行のデータが入力され、次に領域全体が繰り返され、新しいフィールドには 2 番目の行のデータが入力されるというように続きます。
領域をマークするときは、次の簡単なルールに従ってください。
- TableStart フィールドと TableEnd フィールドは、ドキュメント内の同じセクション内に存在する必要があります。
- テーブル内で使用する場合、TableStart と TableEnd はテーブル内の同じ行内になければなりません。
- 差し込み印刷領域は互いにネストすることができます
- 差し込み印刷領域は適切に構成されている必要があります (同じテーブル名を持つ一致する TableStart と TableEnd のペアが常に存在します)
例として、アイテム カタログのデモをご覧ください。以下は、差し込み印刷用に準備された領域の一部です。
マーキング フィールド TableStart:Item と TableEnd:Item の両方が Word テーブルの同じ行内に配置されていることに注意してください。差し込み印刷を実行すると、次のようになります。
領域を指定して差し込み印刷を実行するコードを以下に示します。
// 完全な例とデータファイルについては、https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet をご覧ください。
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "Invoice_Template.doc";
var destFileName = "Invoice_Template_out_.doc";
var data = File.ReadAllText(@"c:\Data\" + "CustomerData.xml");
string folder = null; // File exists at the root of the storage
// 入力ドキュメントをクラウドストレージにアップロードする
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: true);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
「Mustache」テンプレート構文を使用した差し込み印刷
この構文を使用すると、差し込み印刷フィールドの代わりにプレーン テキスト マーカーを使用する差し込み印刷用のテンプレートを作成できます。これらのマーカーは次のようになります: {{ FieldName }}
オブジェクト.属性構文
次の構文を使用して、フィールドの属性を簡単にマージできます。
{{ Address.Street }}
これにより、次のような XML データからのデータがマージされます。
<Order> // <-- Current context is here.
<Number>23</Number>
<Address>
<Street>Nelson Street</Street>
<Suburb>Howick</Suburb>
<City>Auckland</City>
</Address>
<PhoneNumber>543 1234</PhoneNumber>
</Order>
Foreachブロック
foreach タグを使用して、複数のレコードのデータを結合できます。これは、従来の結合フィールドを使用したメール結合領域に似ています。このようなブロックをネストできます。
{{ #foreach Order }}
{{ Number }}
{{ Address.Street }}
{{ #foreach Item }}
{{ Description }} {{ Cost}} {{ Total }}
{{/foreach Item }}
{{ /foreach Order }}
これらのフィールドを混在させて、IF フィールドや数式フィールドなどの他の Microsoft Word フィールド内に配置することもできます。
条件ブロック
Aspose.Words Cloud を使用すると、IF ステートメントで差し込み印刷を使用できます。IF ブロックは、関連付けられているブール式が true の場合にのみ実行されます。IF の構文を以下に示します。
{ IF "{{ GENDER }}" = “MALE” “true text” “false text” }
「Mustache」テンプレートを使用して差し込み印刷を実行するコードを以下に示します。
// 完全な例とデータファイルについては、https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet をご覧ください。
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "VendorTemplate.doc";
var destFileName = "VendorTemplate_Out.docx";
string folder = null; // File exists at the root of the storage
var data = File.ReadAllText(@"c:\Data\" + "Vendors.xml");
// 入力ドキュメントをクラウドストレージにアップロードする
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
var postExecuteTemplateRequest = new PostExecuteTemplateRequest(fileName, data, folder, destFileName: destFileName);
var actual = wordsApi.PostExecuteTemplate(postExecuteTemplateRequest);
差し込み印刷中に HTML を挿入する
executeMailMerge と executeTemplate の両方の API は、マージ フィールドに HTML を挿入するためのサポートを提供します。データ ソース文字列内の HTML 文字をエスケープし、以下に示すように “format”=“html” 属性を使用するようにしてください。
{
"dataSourceList": {
"contractDS": {
"contractDescription": {
"format":"html",
"htmlText": "<b>Test me 1<br><br><i>Test me 2<br><br><u>Test me 2</u></i></b><br>"
}
}
}
}
次のコードは、差し込み印刷中に HTML を挿入する方法を示しています。
// 完全な例とデータファイルについては、https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet をご覧ください。
using System;
using System.IO;
using Aspose.Words.Cloud.Sdk;
using Aspose.Words.Cloud.Sdk.Model;
using Aspose.Words.Cloud.Sdk.Model.Requests;
namespace Aspose.Words.Cloud.Examples.CSharp
{
public class PopulateMailMergeTemplateWithHTMLData
{
public static void Run()
{
WordsApi wordsApi = new WordsApi(Constants.AppKey, Constants.AppSID);
try
{
string fileName = "template.doc";
string destName = "Out_PostDocumentExecuteMailMergeWithHTMLData.docx";
// 元の文書をクラウドストレージにアップロードする
wordsApi.UploadFile(new UploadFileRequest(File.Open("..\\..\\..\\Resources\\" + fileName, FileMode.Open), fileName, Constants.MYStorage));
string data = File.ReadAllText("..\\..\\..\\Resources\\TestPostDocumentExecuteMailMerge.txt", System.Text.Encoding.UTF8);
ExecuteMailMergeRequest request = new ExecuteMailMergeRequest(fileName, data, null, Constants.MYStorage, null, null, null, null, null, null, destName);
DocumentResponse result = wordsApi.ExecuteMailMerge(request);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
差し込み印刷中に画像を挿入する
差し込みフィールドに画像を挿入することもできます。画像のスケール係数は、「%」、「px」、または「比例スケーリング」を使用して設定できます。差し込み印刷中に画像を挿入するコードを以下に示します。
// 完全な例とデータファイルについては、https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet をご覧ください。
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "TestMailMergeWithImages.doc";
var destFileName = "TestMailMergeWithImages_Out.docx";
var data = File.ReadAllText(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + "MailMergeData.txt");
string folder = null; // File exists at the root of the storage
// 入力ドキュメントをクラウドストレージにアップロードする
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + fileName), null, null);
storageApi.PutCreate(request);
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
クラウド SDK
上記のコードは .NET ですが、Aspose.Words Cloud SDK は .NET、Java、Ruby、Python、Node.js の 5 つの言語で利用できます。そのため、これらの言語のいずれかで Mail Merge API を簡単に呼び出すことができます。