دمج البريد هو ميزة من ميزات Microsoft Word لإنشاء مستندات مثل الرسائل والملصقات والمظاريف بسرعة وسهولة. يأخذ Aspose.Words Cloud دمج البريد القياسي ويتقدم به عدة خطوات للأمام، ويحوله إلى حل تقارير كامل يسمح لك بإنشاء مستندات أكثر تعقيدًا مثل التقارير والفهرسات والمخزونات والفواتير. تتمثل مزايا حل إعداد التقارير Aspose.Words Cloud في:
- تصميم التقارير في Microsoft Word باستخدام حقول دمج البريد القياسية
- قم بتحديد المناطق في المستند التي تنمو، مثل صفوف التفاصيل الخاصة بالترتيب
- إدراج الصور أثناء دمج البريد
- إدراج HTML أثناء دمج البريد
الخطوات الأساسية
تعتبر خطوات تنفيذ عملية دمج المراسلات سهلة للغاية. أولاً، يمكنك استخدام Microsoft Word لإنشاء وتصميم مستند Word، والذي يُسمى عادةً قالبًا. لاحظ أن المستند لا يجب أن يكون قالب Microsoft Word (.dot)، بل يمكن أن يكون مستندًا عاديًا بامتداد .doc. يمكنك إدراج بعض الحقول الخاصة المسماة حقول الدمج في القالب في الأماكن التي تريد إدراج البيانات من مصدر البيانات فيها لاحقًا. ثم باستخدام واجهة برمجة تطبيقات REST الخاصة بـ Aspose.Words، يمكنك تنفيذ عملية دمج المراسلات. ستأخذ عملية دمج المراسلات البيانات من مصدر البيانات وتدمجها في المستند.
يمكنك أيضًا تعيين مناطق دمج قابلة للتكرار في المستند أو إدراج حقول دمج خاصة تسمح لك بإدراج محتوى آخر مثل الصور. بناءً على كيفية إعداد حقول دمج البريد والمناطق القابلة للتكرار داخل المستند، سينمو المستند لاستيعاب سجلات متعددة في مصدر البيانات الخاص بك. إذا لم تستخدم مناطق دمج البريد، فسيكون دمج البريد مشابهًا لدمج البريد في Microsoft Word وسيتم تكرار محتوى المستند بالكامل لكل سجل في مصدر البيانات. باستخدام مناطق دمج البريد القابلة للتكرار، يمكنك تعيين أجزاء داخل المستند سيتم تكرارها لكل سجل في مصدر البيانات. على سبيل المثال، إذا قمت بتمييز صف جدول كمنطقة قابلة للتكرار، فسيتم تكرار صف الجدول هذا، مما يتسبب في نمو الجدول ديناميكيًا لاستيعاب جميع بياناتك.
إعداد وثيقة
قبل تنفيذ عملية دمج البريد، يجب عليك إعداد قالب المستند. يجب عليك إدراج حقول الدمج التي سيتم استبدالها بقيم من مصدر البيانات الخاص بك.
إدراج حقول الدمج في مستند
لإدراج حقول الدمج في مستند:
- افتح مستندك في Microsoft Word.
- في المستند، انقر فوق المكان الذي تريد وضع حقل الدمج فيه.
- افتح قائمة الإدراج وحدد الحقل لفتح مربع الحوار الحقل.
- من قائمة أسماء الحقول، حدد MergeField.
- في مربع النص اسم الحقل، أدخل اسمًا لحقل الدمج ثم اضغط على موافق.
نظرًا لأن حقل الدمج هو حقل عادي في Microsoft Word، فيمكنك التبديل بين عرض رموز الحقول والنتائج في مستندك في Microsoft Word باستخدام اختصار لوحة المفاتيح Alt+F9. تظهر رموز الحقول بين أقواس متعرجة.
دمج البريد البسيط
لتحضير القالب الخاص بك لأداء دمج بريد بسيط (بدون مناطق، على غرار دمج البريد الكلاسيكي المتوفر في Microsoft Word)، يجب عليك فقط إدراج حقل دمج واحد أو أكثر في الأماكن التي تريد ملؤها بالبيانات من مصدر البيانات.
دعونا نلقي نظرة على عرض تقديمي لدعوة العشاء. فهو ينشئ خطابًا لقائمة العملاء المحددين في مصدر البيانات. يحتوي القالب على عدد من حقول الدمج التي يتم ملؤها من مصدرين للبيانات؛ بمعنى آخر، يتم تنفيذ دمجين للبريد واحدًا تلو الآخر. أولاً، يتم دمج البيانات من مصدر البيانات الأول في القالب. يحتوي مصدر البيانات هذا على صف واحد فقط لأن هذه معلومات حول الداعي، وبالتالي لا يتم تكرار محتوى المستند بالكامل ويتم ملء الحقول المناسبة فقط بالبيانات. ثم يتم تنفيذ عملية دمج البريد الثانية. يحتوي مصدر البيانات الذي يستخدمه على معلومات حول العملاء. يتم تكرار القالب بالكامل لكل صف بيانات، ويتم ملء كل نسخة مكررة ببيانات العميل المقابل.
ونتيجة لذلك، أصبح لدينا مستند يتكون من خمسة خطابات دعوة مكتملة وكاملة وشخصية (يظهر أدناه جزء من الرسالة الأولى):
كما ترى، من الممكن، وفي بعض الأحيان يكون من المفيد، إجراء أكثر من عملية دمج باستخدام نفس القالب لإضافة البيانات على مراحل. يمكنك إدراج الحقول التالية في مستند 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 = "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);
// تنفيذ عملية دمج المراسلات للمرة الثانية
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);
دمج البريد مع المناطق
إذا كنت تريد زيادة أجزاء داخل المستند بشكل ديناميكي، فاستخدم دمج المراسلات مع المناطق. لتحديد منطقة دمج المراسلات في المستند، تحتاج إلى إدراج حقلين لدمج المراسلات لتحديد بداية ونهاية منطقة دمج المراسلات. سيتم تكرار كل محتوى المستند المضمن داخل منطقة دمج المراسلات تلقائيًا لكل سجل في مصدر البيانات.
لتحديد بداية منطقة دمج المراسلات، أدخل حقل MERGEFIELD باسم TableStart:MyTable، حيث يتوافق MyTable مع العلامة أو المفتاح في XML أو JSON على التوالي. لتحديد نهاية منطقة دمج المراسلات، أدخل حقل MERGEFIELD آخر باسم TableEnd:MyTable. بين حقول العلامة هذه، ضع حقول الدمج التي تتوافق مع حقول مصدر البيانات الخاص بك. سيتم ملء حقول الدمج هذه بالبيانات من الصف الأول من مصدر البيانات، ثم سيتم تكرار المنطقة بأكملها، وسيتم ملء الحقول الجديدة بالبيانات من الصف الثاني، وهكذا.
اتبع هذه القواعد البسيطة عند تحديد منطقة:
- يجب أن يكون الحقلان 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 }}
بناء جملة Object.Attribute
بإمكانك دمج سمات الحقول بسهولة باستخدام بناء الجملة التالي:
{{ 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 Order }}
{{ Number }}
{{ Address.Street }}
{{ #foreach Item }}
{{ Description }} {{ Cost}} {{ Total }}
{{/foreach Item }}
{{ /foreach Order }}
يمكنك أيضًا مزج هذه الحقول ووضعها داخل حقول Microsoft Word الأخرى، مثل حقول IF أو Formula.
كتلة شرطية
يمكنك استخدام دمج البريد مع عبارة IF باستخدام Aspose.Words Cloud. يتم تنفيذ كتلة IF فقط إذا كان التعبير المنطقي المرتبط بها صحيحًا. يظهر بناء جملة 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 دعمًا لإدراج 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 SDKs متوفرة بخمس لغات مختلفة: .NET وJava وRuby وPython وNode.js. وبالتالي، يمكنك بسهولة استدعاء واجهات برمجة تطبيقات الدمج البريدي بأي من هذه اللغات.