0

我正在使用带有 Velocity 的 XDocReport 来生成 DOCX 文件。我目前正在处理图像,暂时,我已经能够应付它们。

但现在,我试图弄清楚如何实现以下内容:

我有一组端口。每个端口可能有 1 到 N 个目录。每个目录都有一个IImageProvider的HashMap(可以改成List)。

不知道能不能实现。这是示例类:

//The list of ports seems like:
List<Port> ports = ....

public class Port{

      private String descriptionPort;
      private String title;
      private String detail;
      private IImageProvider image1;
      private IImageProvider image2;
      private ArrayList<Catalogue> listCatalogue;
      .......
}

public class Catalogue{

      private String description;
      private String detail;
      private String duration;
      /* Formerly I had this one (it worked) instead of logos:
       * private IImageProvider logo;
       */
      //new: multiple images per catalogue
      private HashMap<String, IImageProvider> logos;
      private Number logosCount;
      ..........
}

因此,在创建 DOCX 报告时:

InputStream in = fileTemp.getBinaryStream();
IXDocReport report = XDocReportRegistry.getRegistry().loadReport(in,   TemplateEngineKind.Velocity);
FieldsMetadata fieldsMetadata = report.createFieldsMetadata();
fieldsMetadata.load("ports", Port.class);
fieldsMetadata.addFieldAsImage("photoPort1", "p.Image1");
fieldsMetadata.addFieldAsImage("photoPort2", "p.Image2");
/*Formerly it worked this one when having a unique Image per Catalogue:
 *fieldsMetadata.addFieldAsImage("photoCat", "cat.Logo.");
 */
report.setFieldsMetadata(fieldsMetadata);
IContext context = report.createContext();
context.put("ports", ports);
report.process(context, outputStream); //ignore outputStream

因此,我想知道如何从一组目录的哈希中添加图像。XDocReport 支持我的提议吗?

提前致谢。每一次帮助对我来说都意义重大,我将不胜感激:)。

4

1 回答 1

1

使用示例中描述的 POJO (DeveloperWithImage.java)

/* Load the photos as list in the metadata */
FieldsMetadata metadata = report.createFieldsMetadata();
metadata.load( "photos", Photo.class, true );
report.setFieldsMetadata(metadata);

List<Photo> photos = ...
context.put( "photos", photos );

Photo.java:

public class Photo {
private IImageProvider photo;

@FieldMetadata( images = { @ImageMetadata( name = "photo" ) }, description="Photo"  )
public IImageProvider getPhoto() {
    return photo;
}

public void setPhoto(IImageProvider photo) {
    this.photo = photo;
}}

docx 书签如下所示: 在此处输入图像描述

在这里分享一篇文章

于 2020-07-25T04:45:10.997 回答