差し込み印刷は、手紙、ラベル、封筒などの文書をすばやく簡単に作成するための Microsoft Word の機能です。Aspose.Words Cloud は、標準的な差し込み印刷をさらに進化させ、レポート、カタログ、在庫、請求書などのさらに複雑な文書を生成できる本格的なレポート ソリューションに変えています。Aspose.Words Cloud レポート ソリューションの利点は次のとおりです。

  • 標準の差し込み印刷フィールドを使用して Microsoft Word でレポートを設計する
  • 注文の詳細行など、文書内で拡大する領域を定義する
  • 差し込み印刷中に画像を挿入する
  • 差し込み印刷中に HTML を挿入する

基本的な手順

差し込み印刷を実行する手順は非常に簡単です。まず、Microsoft Word を使用して、通常テンプレートと呼ばれる Word 文書を作成および設計します。文書は Microsoft Word テンプレート (.dot) である必要はなく、通常の .doc 文書でもかまいません。データ ソースから後でデータを挿入する場所に、差し込みフィールドと呼ばれる特別なフィールドをテンプレートに挿入します。次に、Aspose.Words REST API を使用して差し込み印刷操作を実行します。差し込み印刷操作では、データ ソースからデータを取得して文書に差し込みます。

また、文書内に繰り返し可能な差し込み印刷領域を指定したり、画像などの他のコンテンツを挿入できる特別な差し込み印刷フィールドを挿入したりすることもできます。文書内の差し込み印刷フィールドと繰り返し可能な領域の設定方法に応じて、文書はデータ ソース内の複数のレコードを収容できるように拡張されます。差し込み印刷領域を使用しない場合、差し込み印刷は Microsoft Word の差し込み印刷に類似したものになり、文書全体のコンテンツがデータ ソース内の各レコードに対して繰り返されます。繰り返し可能な差し込み印刷領域を使用すると、文書内でデータ ソース内の各レコードに対して繰り返される部分を指定できます。たとえば、表の行を繰り返し可能な領域としてマークすると、この表の行が繰り返され、表はすべてのデータを収容できるように動的に拡張されます。

文書を準備する

差し込み印刷を実行する前に、ドキュメント テンプレートを準備する必要があります。データ ソースの値に置き換えられる差し込みフィールドを挿入する必要があります。

文書に差し込みフィールドを挿入する

ドキュメントにマージフィールドを挿入するには:

  1. Microsoft Word でドキュメントを開きます。
  2. ドキュメント内で、差し込みフィールドを配置する場所をクリックします。
  3. [挿入] メニューを開き、[フィールド] を選択して [フィールド] ダイアログを開きます。
  4. フィールド名リストから、MergeField を選択します。
  5. [フィールド名] テキスト ボックスにマージ フィールドの名前を入力し、[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 を挿入する

executeMailMergeexecuteTemplate の両方の 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 を簡単に呼び出すことができます。

おすすめの投稿: