แทรก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; | |
} | |
} | |
} |