Checkboxes, Metin Girişi veya Resim Ekleme
Birleştirme altyapısı bir belgeyi girdi olarak alır, içindeki MERGEFIELD
alanları arar ve bunları veri kaynağından elde edilen verilerle değiştirir. Genellikle düz metin ve HTML eklenir, ancak Aspose.Words kullanıcıları Mail Merge alanlar için daha sıra dışı senaryoları işleyen bir belge de oluşturabilir.
Güçlü Aspose.Words işlevi, Mail Merge işlemini genişletmenize olanak tanır:
- mail merge sırasında belgeye checkboxes ve metin giriş formu alanları ekleyin
- herhangi bir özel depolama alanından (dosyalar, BLOB alanlar vb.) Görüntüler ekleyin.)
Mail Merge sırasında Checkbox es ve Metin Girişi ekleyin
Bazen birleştirme alanında metnin yerine Mail Merge değil, checkbox veya metin giriş alanının geçmesi için bir checkbox işlemi gerçekleştirmek gerekir. Bu en yaygın senaryo olmasa da, bazı görevler için çok kullanışlıdır.
Word belgesinin aşağıdaki ekran görüntüsü, birleştirme alanlarına sahip bir şablonu gösterir:

Aşağıdaki Word belgesinin bu ekran görüntüsü, önceden oluşturulmuş belgeyi gösterir:

Subject
alanının bir metin giriş alanıyla değiştirildiğini unutmayın.
Aşağıdaki kod örneği, bir mail merge sırasında bir belgeye checkbox’lerin nasıl ekleneceğini ve metin alanlarının nasıl girileceğini gösterir.:
// 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 sırasında Resim ekleme
Bir Mail Merge işlemi gerçekleştirirken, özel ımage Mail Merge alanlarını kullanarak veritabanından görüntüleri belgeye ekleyebilirsiniz. Image Mail Merge alanı, Image:MyFieldName adlı bir birleştirme alanıdır.
Veritabanından Resim Ekleme
Bir mail merge sırasında, bir belgede bir görüntü Mail Merge alanıyla karşılaşıldığında, FieldMergingCallback olayı tetiklenir. Belgeye eklenebilmesi için Mail Merge altyapısına bir dosya adı, akış veya görüntü nesnesi döndürmek üzere bu olaya yanıt verebilirsiniz.
Aşağıdaki kod örneği, bir veritabanı BLOB alanında depolanan görüntülerin bir rapora nasıl ekleneceğini gösterir:
// 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 sırasında Görüntü Özelliklerini Ayarlama
Bir görüntü birleştirme alanını birleştirirken, bazen WrapType gibi çeşitli görüntü özelliklerini kontrol etmeniz gerekebilir.
Şu anda ImageFieldMergingArgs kullanarak sırasıyla yalnızca görüntü genişliği veya yükseklik özelliklerini ayarlayabilirsiniz. Bu sorunun üstesinden gelmek için Aspose.Words, eklenen görüntü veya başka herhangi bir şekil üzerinde tam kontrol sahibi olmayı kolaylaştıran Shape özelliğini sağlar.
Aşağıdaki kod örneği, çeşitli görüntü özelliklerinin nasıl ayarlanacağını gösterir:
// 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; | |
} | |
} | |
} |