Hi John,
Thanks for being patient. Regarding WORDSJAVA-1287, the problem occurs because the ADO API of Aspose.Words for Java had been reworked since version 14.10.0. Now, please specify types of columns before you put value in DataRow. Otherwise ByteArrayOutputStrem will be serialized to String. Please see the following sample:
Document doc = new Document(getMyDir() + “Aspose.doc”);
DataSet allRiskData = new DataSet();
DataTable riskDataTable = new DataTable(“RiskList”);
// Set data type for column explicitly
DataColumn riskIdCol = new DataColumn(“riskIDString”, String.class);
DataColumn testImageCol = new DataColumn(“testImage”, ByteArrayOutputStream.class);
DataColumn testTextCol = new DataColumn(“testText”, String.class);
riskDataTable.getColumns().add(riskIdCol);
riskDataTable.getColumns().add(testImageCol);
riskDataTable.getColumns().add(testTextCol);
allRiskData.getTables().add(riskDataTable);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedImage img = ImageIO.read(new File(getMyDir() + “Aspose.jpg”));
ImageIO.write(img, “jpg”, baos);
DataRow row = riskDataTable.newRow();
row.set(0, “_9999”);
row.set(1, baos);
row.set(2, “testdata”);
riskDataTable.getRows().add(row);
doc.getMailMerge().setFieldMergingCallback(new HandleMergeImageFieldFromBlob());
doc.getMailMerge().executeWithRegions(allRiskData);
doc.save(getMyDir() + “awjava-15.12.0.docx”);
private static class HandleMergeImageFieldFromBlob implements IFieldMergingCallback {
public void fieldMerging(FieldMergingArgs e) throws Exception {
// Do nothing
}
public void imageFieldMerging(ImageFieldMergingArgs e) throws Exception {
// The field value is a byte array, just cast it and create a stream on it.
if ( “testImage”.equals(e.getFieldName()) ) {
if (e.getFieldValue() == null)
return;
ByteArrayOutputStream baos = (ByteArrayOutputStream) e.getFieldValue();
ByteArrayInputStream imageStream = new ByteArrayInputStream(baos.toByteArray());
e.setImageStream(imageStream);
}
}
}
Hope, this helps.
Best regards,