แทรกCheckboxการป้อนข้อความหรือรูปภาพ

โปรแกรมผสานใช้เอกสารเป็นอินพุตมองหาฟิลด์MERGEFIELDในนั้นและแทนที่ด้วยข้อมูลที่ได้จากแหล่งข้ โดยทั่วไปแล้วข้อความธรรมดาและHTMLจะถูกแทรกแต่ผู้ใช้Aspose.Wordsยังสามารถสร้างเอกสารที่จัดการกับสถานการณ์ที่ผิดปกติมากขึ้นสำหรับฟิลด์Mail Merge.

ฟังก์ชั่นที่มีประสิทธิภาพAspose.Wordsช่วยให้คุณสามารถขยายกระบวนการMail Merge:

  • แทรกcheckboxและฟิลด์แบบฟอร์มการป้อนข้อความลงในเอกสารระหว่างmail merge
  • แทรกภาพจากการจัดเก็บข้อมูลที่กำหนดเองใดๆ(ไฟล์BLOBฟิลด์ฯลฯ)

แทรกCheckboxและป้อนข้อความในระหว่างMail Merge

บางครั้งจำเป็นต้องดำเนินการMail Mergeเพื่อไม่ให้ข้อความถูกแทนที่ในฟิลด์ผสานแต่เป็นcheckboxหรือฟิลด์ป้อ แม้ว่านี้ไม่ได้เป็นสถานการณ์ที่พบบ่อยที่สุดก็จะมีประโยชน์มากสำหรับงานบางอย่าง.

ภาพหน้าจอต่อไปนี้ของเอกสารWordแสดงเทมเพลตที่มีฟิลด์ผสาน:

insert-checkboxes-or-images-mail-merge-aspose-words

ภาพหน้าจอของเอกสารWordด้านล่างนี้แสดงเอกสารที่สร้างขึ้นแล้ว:

insert-checkboxes-html-or-images-mail-merge-aspose-words

ตัวอย่างรหัสต่อไปนี้แสดงวิธีการแทรก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;
}
}
}