Вмъкване CheckboxЕС, въвеждане на текст или изображения
Обединяващият двигател взема документ като вход, търси MERGEFIELD
полета в него и ги замества с данните, получени от източника на данни. Обикновено се вмъкват обикновен текст и HTML, но Aspose.Words потребителите могат също да генерират документ, който обработва по-необичайни сценарии за Mail Merge полета.
Мощната Aspose.Words функционалност ви позволява да разширите процеса Mail Merge:
- въведете полетата checkboxи текстова форма за въвеждане в документа по време на А mail merge
- вмъкване на изображения от всяко персонализирано хранилище (файлове, BLOB полета и т.н.)
Въведете CheckboxЕС и текст по време на Mail Merge
Понякога е необходимо да се извърши операция Mail Merge, така че в полето за обединяване да не се замества текст, а поле checkbox или въвеждане на текст. Въпреки че това не е най-често срещаният сценарий, той е много удобен за някои задачи.
Следващата екранна снимка на документ Word показва шаблон с полета за обединяване:

Тази екранна снимка на документа Word по-долу показва вече генерирания документ:

Subject
е заменено с поле за въвеждане на текст.
Следващият пример за код показва как да вмъквате checkboxЕС и полета за въвеждане на текст в документ по време на mail merge:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Mail merge destinations - Fax.docx"); | |
// Setup mail merge event handler to do the custom work. | |
doc.MailMerge.FieldMergingCallback = new HandleMergeField(); | |
// Trim trailing and leading whitespaces mail merge values. | |
doc.MailMerge.TrimWhitespaces = false; | |
string[] fieldNames = { | |
"RecipientName", "SenderName", "FaxNumber", "PhoneNumber", | |
"Subject", "Body", "Urgent", "ForReview", "PleaseComment" | |
}; | |
object[] fieldValues = { | |
"Josh", "Jenny", "123456789", "", "Hello", | |
"<b>HTML Body Test message 1</b>", true, false, true | |
}; | |
doc.MailMerge.Execute(fieldNames, fieldValues); | |
doc.Save(ArtifactsDir + "WorkingWithFields.MailMergeFormFields.docx"); |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
private class HandleMergeField : IFieldMergingCallback | |
{ | |
/// <summary> | |
/// This handler is called for every mail merge field found in the document, | |
/// for every record found in the data source. | |
/// </summary> | |
void IFieldMergingCallback.FieldMerging(FieldMergingArgs e) | |
{ | |
if (mBuilder == null) | |
mBuilder = new DocumentBuilder(e.Document); | |
// We decided that we want all boolean values to be output as check box form fields. | |
if (e.FieldValue is bool) | |
{ | |
// Move the "cursor" to the current merge field. | |
mBuilder.MoveToMergeField(e.FieldName); | |
string checkBoxName = $"{e.FieldName}{e.RecordIndex}"; | |
mBuilder.InsertCheckBox(checkBoxName, (bool) e.FieldValue, 0); | |
return; | |
} | |
switch (e.FieldName) | |
{ | |
case "Body": | |
mBuilder.MoveToMergeField(e.FieldName); | |
mBuilder.InsertHtml((string) e.FieldValue); | |
break; | |
case "Subject": | |
{ | |
mBuilder.MoveToMergeField(e.FieldName); | |
string textInputName = $"{e.FieldName}{e.RecordIndex}"; | |
mBuilder.InsertTextInput(textInputName, TextFormFieldType.Regular, "", (string) e.FieldValue, 0); | |
break; | |
} | |
} | |
} | |
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args) | |
{ | |
args.ImageFileName = "Image.png"; | |
args.ImageWidth.Value = 200; | |
args.ImageHeight = new MergeFieldImageDimension(200, MergeFieldImageDimensionUnit.Percent); | |
} | |
private DocumentBuilder mBuilder; | |
} |
Вмъкване на изображения по време на Mail Merge
Когато извършвате операция Mail Merge, можете да вмъкнете изображения от базата данни в документа, като използвате специални полета за изображение Mail Merge. Полето изображение Mail Merge е поле за сливане, наречено изображение: MyFieldName.
Вмъкване на изображения от База данни
По време на mail merge, Когато поле за изображение Mail Merge се срещне в документ, събитието FieldMergingCallback се задейства. Можете да отговорите на това събитие, за да върнете име на файл, поток или обект на изображение на двигателя Mail Merge, така че да може да бъде вмъкнат в документа.
Следващият пример за код показва как да вмъкнете изображения, съхранени в поле на база данни BLOB, в отчет:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(MyDir + "Mail merge destination - Northwind employees.docx"); | |
doc.MailMerge.FieldMergingCallback = new HandleMergeImageFieldFromBlob(); | |
string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DatabaseDir + "Northwind.accdb"; | |
OleDbConnection conn = new OleDbConnection(connString); | |
conn.Open(); | |
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Employees", conn); | |
IDataReader dataReader = cmd.ExecuteReader(); | |
doc.MailMerge.ExecuteWithRegions(dataReader, "Employees"); | |
conn.Close(); | |
doc.Save(ArtifactsDir + "WorkingWithFields.MailMergeImageFromBlob.docx"); |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
public class HandleMergeImageFieldFromBlob : IFieldMergingCallback | |
{ | |
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args) | |
{ | |
// Do nothing. | |
} | |
/// <summary> | |
/// This is called when mail merge engine encounters Image:XXX merge field in the document. | |
/// You have a chance to return an Image object, file name, or a stream that contains the image. | |
/// </summary> | |
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs e) | |
{ | |
// The field value is a byte array, just cast it and create a stream on it. | |
MemoryStream imageStream = new MemoryStream((byte[]) e.FieldValue); | |
// Now the mail merge engine will retrieve the image from the stream. | |
e.ImageStream = imageStream; | |
} | |
} |
Задаване на свойства на изображението по време на Mail Merge
Докато обединявате поле за обединяване на изображение, понякога може да се наложи да контролирате различни свойства на изображението, като WrapType.
В момента, използвайки ImageFieldMergingArgs, можете да зададете съответно само свойства за ширина или височина на изображението. За да се преодолее този проблем, Aspose.Words осигурява Shape свойство, което улеснява получаването на пълен контрол върху вмъкнатото изображение или всяка друга форма.
Следният пример за код показва как да зададете различни свойства на изображението:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
Document doc = new Document(); | |
DocumentBuilder builder = new DocumentBuilder(doc); | |
builder.Writeln("{{#foreach example}}"); | |
builder.Writeln("{{Image(126pt;126pt):stempel}}"); | |
builder.Writeln("{{/foreach example}}"); | |
doc.MailMerge.UseNonMergeFields = true; | |
doc.MailMerge.TrimWhitespaces = true; | |
doc.MailMerge.UseWholeParagraphAsRegion = false; | |
doc.MailMerge.CleanupOptions = MailMergeCleanupOptions.RemoveEmptyTableRows | |
| MailMergeCleanupOptions.RemoveContainingFields | |
| MailMergeCleanupOptions.RemoveUnusedRegions | |
| MailMergeCleanupOptions.RemoveUnusedFields; | |
doc.MailMerge.FieldMergingCallback = new ImageFieldMergingHandler(); | |
doc.MailMerge.ExecuteWithRegions(new DataSourceRoot()); | |
doc.Save(ArtifactsDir + "WorkingWithFields.MailMergeImageField.docx"); |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
private class ImageFieldMergingHandler : IFieldMergingCallback | |
{ | |
void IFieldMergingCallback.FieldMerging(FieldMergingArgs args) | |
{ | |
// Implementation is not required. | |
} | |
void IFieldMergingCallback.ImageFieldMerging(ImageFieldMergingArgs args) | |
{ | |
Shape shape = new Shape(args.Document, ShapeType.Image) | |
{ | |
Width = 126, Height = 126, WrapType = WrapType.Square | |
}; | |
shape.ImageData.SetImage(MyDir + "Mail merge image.png"); | |
args.Shape = shape; | |
} | |
} |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET.git. | |
public class DataSourceRoot : IMailMergeDataSourceRoot | |
{ | |
public IMailMergeDataSource GetDataSource(string s) | |
{ | |
return new DataSource(); | |
} | |
private class DataSource : IMailMergeDataSource | |
{ | |
private bool next = true; | |
string IMailMergeDataSource.TableName => TableName(); | |
private string TableName() | |
{ | |
return "example"; | |
} | |
public bool MoveNext() | |
{ | |
bool result = next; | |
next = false; | |
return result; | |
} | |
public IMailMergeDataSource GetChildDataSource(string s) | |
{ | |
return null; | |
} | |
public bool GetValue(string fieldName, out object fieldValue) | |
{ | |
fieldValue = null; | |
return false; | |
} | |
} | |
} |