2017-02-16 378 views
0

我向模板插入两个图像:“徽标”和“背景” 但模板中只显示背景图像。XDocReport无法在生成的文档中显示两个图像

创建ImageProdiver

private IImageProvider createImageProvider(IXDocReport ixDocReport, String fieldName, Blob image) { 
    FieldsMetadata metadata = ixDocReport.createFieldsMetadata(); 
    metadata.addFieldAsImage(fieldName); 
    ixDocReport.setFieldsMetadata(metadata); 
    InputStream inputStream = null; 

    try { 
     inputStream = image.getBinaryStream(); 
     IImageProvider logo = new ByteArrayImageProvider(inputStream); 
     logo.setUseImageSize(true); 
     logo.setResize(true); 
     inputStream.close(); 
     return logo; 
    } catch (SQLException | IOException e) { 
     throw new GeneralException("Error reading logo"); 
    } finally { 
     if(inputStream != null) { 
      IOUtils.closeQuietly(inputStream); 
     } 
    } 
} 

创建两个图像提供商

IImageProvider logo = createImageProdider(report, "logo", blobimage)); 
IImageProvider background = createImageProdider(report, "logo", blobimagebacground)); 

,并插入到context中,建设者

context = this.report.createContext(); 
context.put("logo", logo); 
context.put("background", background); 

生成文件后,只存在背景图像。

我不明白为什么会出现这个问题,为什么只显示一张图片。

如何解决这个问题?

回答

2

这是因为您将FieldsMetadata设置为报告两次。 您需要创建一个FieldsMetadata元数据= ixDocReport.createFieldsMetadata()并向其中添加两个图像。 敌人示例:

FieldsMetadata metadata = new FieldsMetadata(); 
metadata.addFieldAsImage("chart1"); 
metadata.addFieldAsImage("chart2"); 
report.setFieldsMetadata(metadata); 

IImageProvider logo = new FileImageProvider(new File("path/to/image1"), true); 
context.put("chart1", logo); 

IImageProvider logo2 = new FileImageProvider(new File("path/to/image2"), true); 
context.put("chart2", logo2); 
+0

感谢您的回答! – martinixs