Checkboxes, tekstinvoer of afbeeldingen invoegen

De merge engine neemt een document als invoer, zoekt naar MERGEFIELD velden erin en vervangt deze door de gegevens die uit de gegevensbron zijn verkregen. Normaal gesproken worden platte tekst en HTML ingevoegd, maar Aspose.Words gebruikers kunnen ook een document genereren dat meer ongebruikelijke scenario ' s voor Mail Merge velden behandelt.

Met de krachtige Aspose.Words - functionaliteit kunt u het Mail Merge - proces uitbreiden:

  • invoegen checkbox es en tekst invoer formuliervelden in het document tijdens een mail merge
  • afbeeldingen invoegen vanuit een aangepaste opslag (bestanden, BLOB velden, enz.)

Checkboxes en tekstinvoer invoegen tijdens Mail Merge

Soms is het nodig om een Mail Merge - bewerking uit te voeren, zodat er geen tekst wordt vervangen in het samenvoegveld, maar een checkbox - of tekstinvoerveld. Hoewel dit niet het meest voorkomende scenario is, is het erg handig voor sommige taken.

De volgende schermafbeelding van een Word document toont een sjabloon met samenvoegvelden:

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

Deze screenshot van het Word document hieronder toont het reeds gegenereerde document:

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

Het volgende codevoorbeeld laat zien hoe u checkboxes invoegt en tekstvelden invoert in een document tijdens een 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;
}

Afbeeldingen invoegen tijdens Mail Merge

Wanneer u een bewerking Mail Merge uitvoert, kunt u afbeeldingen uit de database in het document invoegen met behulp van speciale velden voor Afbeelding Mail Merge. Het veld Afbeelding Mail Merge is een samenvoegveld met de naam afbeelding:MyFieldName.

Afbeeldingen uit een Database Invoegen

Tijdens een mail merge, wanneer een afbeelding Mail Merge veld wordt aangetroffen in een document, wordt de FieldMergingCallback gebeurtenis gestart. U kunt op deze gebeurtenis reageren om een bestandsnaam, stream of afbeeldingsobject terug te sturen naar de engine Mail Merge, zodat deze in het document kan worden ingevoegd.

Het volgende codevoorbeeld laat zien hoe u afbeeldingen die zijn opgeslagen in een databaseveld BLOB invoegt in een rapport:

// 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);
}
}

Afbeeldingseigenschappen instellen tijdens Mail Merge

Tijdens het samenvoegen van een veld voor het samenvoegen van afbeeldingen moet u soms verschillende afbeeldingseigenschappen beheren, zoals WrapType.

Op dit moment kunt u met ImageFieldMergingArgs alleen de eigenschappen breedte of hoogte van de afbeelding instellen. Om dit probleem op te lossen, biedt Aspose.Words De Eigenschap Shape, waarmee u volledige controle krijgt over de ingevoegde afbeelding of een andere vorm.

Het volgende codevoorbeeld laat zien hoe u verschillende afbeeldingseigenschappen instelt:

// 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);
}
}