Inserisci Checkboxes, Testo o immagini

Il motore di unione prende un documento come input, cerca i campi MERGEFIELD e li sostituisce con i dati ottenuti dall’origine dati. In genere vengono inseriti testo normale e HTML, ma gli utenti di Aspose.Words possono anche generare un documento che gestisce scenari più insoliti per i campi Mail Merge.

La potente funzionalità Aspose.Words consente di estendere il processo Mail Merge:

  • inserire checkbox es e campi modulo di immissione testo nel documento durante un mail merge
  • inserire immagini da qualsiasi archivio personalizzato (file ,campi BLOB, ecc.)

Inserisci Checkbox es e Input di testo durante Mail Merge

A volte è necessario eseguire un’operazione Mail Merge in modo che non venga sostituito il testo nel campo Unione, ma un checkbox o un campo di immissione del testo. Anche se questo non è lo scenario più comune, è molto utile per alcune attività.

La seguente schermata di un documento Word mostra un modello con campi di unione:

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

Questa schermata del documento di Word qui sotto mostra il documento già generato:

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

L’esempio di codice seguente mostra come inserire checkboxes e inserire campi di testo in un documento durante un 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;
}

Inserire immagini durante Mail Merge

Quando si esegue un’operazione Mail Merge, è possibile inserire immagini dal database nel documento utilizzando campi immagine speciali Mail Merge. Il campo image Mail Merge è un campo di unione denominato Image: MyFieldName.

Inserire immagini da un database

Durante un mail merge, quando viene rilevato un campo immagine Mail Merge in un documento, viene attivato l’evento FieldMergingCallback. È possibile rispondere a questo evento per restituire un nome file, un flusso o un oggetto immagine al motore Mail Merge in modo che possa essere inserito nel documento.

L’esempio di codice seguente mostra come inserire le immagini memorizzate in un campo database BLOB in un report:

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

Impostare le proprietà dell’immagine durante Mail Merge

Durante l’unione di un campo Unione immagine, a volte potrebbe essere necessario controllare varie proprietà dell’immagine, ad esempio WrapType.

Attualmente, usando ImageFieldMergingArgs è possibile impostare solo le proprietà larghezza immagine o altezza, rispettivamente. Per ovviare a questo problema, Aspose.Words fornisce la proprietà Shape, che facilita il controllo completo sull’immagine inserita o su qualsiasi altra forma.

Il seguente esempio di codice mostra come impostare varie proprietà dell’immagine:

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