Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Silnik scalania przyjmuje dokument jako dane wejściowe, szuka w nim pól MERGEFIELD
i zastępuje je danymi uzyskanymi ze źródła danych. Zazwyczaj wstawiany jest zwykły tekst i HTML, ale użytkownicy Aspose.Words mogą również wygenerować dokument, który obsługuje bardziej nietypowe scenariusze dla pól Mail Merge.
Potężna funkcjonalność Aspose.Words pozwala rozszerzyć proces Mail Merge:
Czasami konieczne jest wykonanie operacji Mail Merge, aby w polu scalania nie podstawiono tekstu, ale checkbox lub pole wprowadzania tekstu. Chociaż nie jest to najczęstszy scenariusz, jest bardzo przydatny w przypadku niektórych zadań.
Poniższy zrzut ekranu dokumentu Word pokazuje szablon z polami scalania:
Ten zrzut ekranu dokumentu Word poniżej pokazuje już wygenerowany dokument:
Subject
zostało zastąpione polem wprowadzania tekstu.
Poniższy przykład kodu pokazuje, jak wstawić checkboxes i wprowadzić pola tekstowe do dokumentu podczas 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; | |
} |
Podczas wykonywania operacji Mail Merge można wstawiać obrazy z bazy danych do dokumentu za pomocą specjalnych pól image Mail Merge. Pole image Mail Merge jest polem scalania o nazwie Image: MyFieldName.
Podczas mail merge, gdy napotkane jest pole obraz Mail Merge w dokumencie, Zdarzenie FieldMergingCallback jest uruchamiane. Możesz odpowiedzieć na to zdarzenie, aby zwrócić nazwę pliku, strumień lub obiekt obrazu do silnika Mail Merge, aby można go było wstawić do dokumentu.
Poniższy przykład kodu pokazuje, jak wstawić obrazy zapisane w bazie danych BLOB pole do raportu:
// 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); | |
} | |
} |
Podczas scalania pola scalania obrazu czasami może być konieczne kontrolowanie różnych właściwości obrazu, takich jak WrapType.
Obecnie za pomocą ImageFieldMergingArgs można ustawić tylko odpowiednio właściwości szerokości lub wysokości obrazu. Aby rozwiązać ten problem, Aspose.Words udostępnia Właściwość Shape, która ułatwia uzyskanie pełnej kontroli nad wstawionym obrazem lub dowolnym innym kształtem.
Poniższy przykład kodu pokazuje, jak ustawić różne właściwości obrazu:
// 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); | |
} | |
} |
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.