Sisipkan Checkboxes, Masukan Teks, atau Gambar

Mesin penggabungan mengambil dokumen sebagai masukan, mencari bidang MERGEFIELD di dalamnya, dan menggantinya dengan data yang diperoleh dari sumber data. Biasanya, teks biasa dan HTML disisipkan, tetapi pengguna Aspose.Words juga dapat membuat dokumen yang menangani skenario yang lebih tidak biasa untuk bidang Mail Merge.

Fungsionalitas Aspose.Words yang kuat memungkinkan Anda untuk memperpanjang proses Mail Merge:

  • sisipkan checkboxes dan kolom formulir masukan teks ke dalam dokumen selama mail merge
  • sisipkan gambar dari penyimpanan khusus apa pun (file, bidang BLOB, dll.)

Sisipkan Checkbox es dan Masukan Teks selama Mail Merge

Terkadang perlu untuk melakukan operasi Mail Merge agar bukan teks yang diganti di bidang gabungan, tetapi checkbox atau bidang input teks. Meskipun ini bukan skenario yang paling umum, ini sangat berguna untuk beberapa tugas.

Tangkapan layar berikut dari dokumen Word menunjukkan templat dengan bidang gabungan:

insert-checkboxes-html-or-images-during-mail-merge-aspose-words-java-1

Tangkapan layar dokumen Word di bawah ini menunjukkan dokumen yang sudah dibuat:

insert-checkboxes-html-or-images-during-mail-merge-aspose-words-java-2

Contoh kode berikut menunjukkan cara menyisipkan checkbox es dan memasukkan bidang teks ke dalam dokumen selama mail merge:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document(getMyDir() + "Mail merge destinations - Fax.docx");
// Setup mail merge event handler to do the custom work.
doc.getMailMerge().setFieldMergingCallback(new HandleMergeField());
// Trim trailing and leading whitespaces mail merge values.
doc.getMailMerge().setTrimWhitespaces(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.getMailMerge().execute(fieldNames, fieldValues);
doc.save(getArtifactsDir() + "WorkingWithFields.MailMergeFormFields.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class HandleMergeField implements IFieldMergingCallback
{
/// <summary>
/// This handler is called for every mail merge field found in the document,
/// for every record found in the data source.
/// </summary>
public void /*IFieldMergingCallback.*/fieldMerging(FieldMergingArgs e) throws Exception
{
if (mBuilder == null)
mBuilder = new DocumentBuilder(e.getDocument());
// We decided that we want all boolean values to be output as check box form fields.
if (e.getFieldValue() instanceof /*boolean*/Boolean)
{
// Move the "cursor" to the current merge field.
mBuilder.moveToMergeField(e.getFieldName());
String checkBoxName = MessageFormat.format("{0}{1}", e.getFieldName(), e.getRecordIndex());
mBuilder.insertCheckBox(checkBoxName, (Boolean) e.getFieldValue(), 0);
return;
}
switch (e.getFieldName())
{
case "Body":
mBuilder.moveToMergeField(e.getFieldName());
mBuilder.insertHtml((String) e.getFieldValue());
break;
case "Subject":
{
mBuilder.moveToMergeField(e.getFieldName());
String textInputName = MessageFormat.format("{0}{1}", e.getFieldName(), e.getRecordIndex());
mBuilder.insertTextInput(textInputName, TextFormFieldType.REGULAR, "", (String) e.getFieldValue(), 0);
break;
}
}
}
public void imageFieldMerging(ImageFieldMergingArgs args)
{
args.setImageFileName("Image.png");
args.getImageWidth().setValue(200.0);
args.setImageHeight(new MergeFieldImageDimension(200.0, MergeFieldImageDimensionUnit.PERCENT));
}
private DocumentBuilder mBuilder;
}

Sisipkan Gambar selama Mail Merge

Saat melakukan operasi Mail Merge, Anda dapat menyisipkan gambar dari database ke dalam dokumen menggunakan bidang gambar khusus Mail Merge. Bidang image Mail Merge adalah bidang gabungan bernama Image: MyFieldName.

Menyisipkan Gambar dari Database

Selama mail merge, saat bidang image Mail Merge ditemukan dalam dokumen, peristiwa FieldMergingCallback diaktifkan. Anda dapat menanggapi peristiwa ini untuk mengembalikan nama file, aliran, atau objek gambar ke mesin Mail Merge sehingga dapat disisipkan ke dalam dokumen.

Contoh kode berikut menunjukkan cara menyisipkan gambar yang disimpan dalam bidang database BLOB ke dalam laporan:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
public void mailMergeImageFromBlob() throws Exception
{
Document doc = new Document(getMyDir() + "Mail merge destination - Northwind employees.docx");
doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageFieldFromBlob());
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String connString = "jdbc:ucanaccess://" + getDatabaseDir() + "Northwind.mdb";
Connection connection = DriverManager.getConnection(connString, "Admin", "");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM Employees");
DataTable dataTable = new DataTable(resultSet, "Employees");
IDataReader dataReader = new DataTableReader(dataTable);
doc.getMailMerge().executeWithRegions(dataReader, "Employees");
connection.close();
doc.save(getArtifactsDir() + "WorkingWithFields.MailMergeImageFromBlob.docx");
}
public static class HandleMergeImageFieldFromBlob implements IFieldMergingCallback
{
public void 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>
public void imageFieldMerging(ImageFieldMergingArgs e) throws Exception
{
// The field value is a byte array, just cast it and create a stream on it.
ByteArrayInputStream imageStream = new ByteArrayInputStream((byte[]) e.getFieldValue());
// Now the mail merge engine will retrieve the image from the stream.
e.setImageStream(imageStream);
}
}

Setel Properti Gambar selama Mail Merge

Saat menggabungkan bidang penggabungan gambar, terkadang Anda mungkin perlu mengontrol berbagai properti gambar, seperti WrapType.

Saat ini, menggunakan ImageFieldMergingArgs Anda hanya dapat mengatur properti lebar atau tinggi gambar. Untuk mengatasi masalah ini, Aspose.Words menyediakan properti Shape, yang memudahkan untuk mendapatkan kontrol penuh atas gambar yang disisipkan atau bentuk lainnya.

Contoh kode berikut menunjukkan cara mengatur berbagai properti gambar:

// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.writeln("{{#foreach example}}");
builder.writeln("{{Image(126pt;126pt):stempel}}");
builder.writeln("{{/foreach example}}");
doc.getMailMerge().setUseNonMergeFields(true);
doc.getMailMerge().setTrimWhitespaces(true);
doc.getMailMerge().setUseWholeParagraphAsRegion(false);
doc.getMailMerge().setCleanupOptions(MailMergeCleanupOptions.REMOVE_EMPTY_TABLE_ROWS
| MailMergeCleanupOptions.REMOVE_CONTAINING_FIELDS
| MailMergeCleanupOptions.REMOVE_UNUSED_REGIONS
| MailMergeCleanupOptions.REMOVE_UNUSED_FIELDS);
doc.getMailMerge().setFieldMergingCallback(new ImageFieldMergingHandler());
doc.getMailMerge().executeWithRegions(new DataSourceRoot());
doc.save(getArtifactsDir() + "WorkingWithFields.MailMergeImageField.docx");
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java
private static class ImageFieldMergingHandler implements IFieldMergingCallback
{
public void fieldMerging(FieldMergingArgs args)
{
// Implementation is not required.
}
public void imageFieldMerging(ImageFieldMergingArgs args) throws Exception
{
Shape shape = new Shape(args.getDocument(), ShapeType.IMAGE);
{
shape.setWidth(126.0); shape.setHeight(126.0); shape.setWrapType(WrapType.SQUARE);
}
shape.getImageData().setImage(getMyDir() + "Mail merge image.png");
args.setShape(shape);
}
}