jasperreport生成HTML报表时的图片img_0_0_1问题解决(图片控件在HTML...

昨天网上找了很久都只见有人问img_0_0_1问题,就是没有正确的答案,很郁闷,网上最多的是说的px图片显示的解决,那个比较简单,加个参数指定下路径就行,今天不多讲了,只讲关于自已插入的图片控件设好正确的地址最后还是显示不出来,而被替换成img_0_0_1的问题,最后不得已只能反了它的原代码自已来找原因。

原码片段如下:net.sf.jasperreports.engine.export.JRHtmlExporter

 

 this.writer.write("<img");
      String imagePath = null;
      String imageMapName = null;
      List imageMapAreas = null;

      ScaleImageEnum scaleImage = image.getScaleImageValue();

      if (renderer != null)
      {
        if ((renderer.getType() == 0) && (this.rendererToImagePathMap.containsKey(renderer.getId())))
        {
          imagePath = (String)this.rendererToImagePathMap.get(renderer.getId());
        }
        else
        {
          if (image.isLazy())
                imagePath = ((JRImageRenderer)renderer).getImageLocation();
          }
          else
          {
            JRPrintElementIndex imageIndex = getElementIndex(gridCell);
            this.imagesToProcess.add(imageIndex);

            String imageName = getImageName(imageIndex);
            imagePath = this.imagesURI + imageName;

            if (this.imageNameToImageDataMap != null)
            {
              if (renderer.getType() == 1)
              {
                renderer = new JRWrappingSvgRenderer(renderer, new Dimension(image.getWidth(), image.getHeight()), ModeEnum.OPAQUE == image.getModeValue() ? image.getBackcolor() : null);
              }

              this.imageNameToImageDataMap.put(imageName, renderer.getImageData());
            }

          }

          this.rendererToImagePathMap.put(renderer.getId(), imagePath);
        }

看到 String imageName = getImageName(imageIndex);
            imagePath = this.imagesURI + imageName;
imageIndex 值是图片索引值,第一张是1
String imageName = getImageName(imageIndex);
这句之后imageName 值是img_0_0_1哦,原来这个是这么来的
 imagePath = this.imagesURI + imageName;这句之后就是你的基础路径+img_0_0_1,所以HTML上是怎么也出不来了
PDF XLS能出来估计生成代码是不一样的。

那么,怎么解决呢?

看它上面这段:
    if (image.isLazy())
        {
           
imagePath = ((JRImageRenderer)renderer).getImageLocation();
          }
原来还可以懒加载的,这样它就去读getImageLocation()应该是自己给你URL
不管是这段还是之前那段,最后都会放到MAP
 this.rendererToImagePathMap.put(renderer.getId(), imagePath);

不多说了,直接看解决方法:

JAVA中写到:
report_params.put("image1_url","/springMVC/report/images/2010.jpg");

ireport中需要这样:
1、在报表中放入IMG对象
2、对象属性设置
     ExpressionClass :java.lang.String
     IMAGE EXPRESSION :$P{REPORT_PARAMETERS_MAP}.get("image1_url")
     Is Lazy打上勾

jasperreport生成HTML报表时的图片img_0_0_1问题解决(图片控件在HTML..._第1张图片
    
jasperreport生成HTML报表时的图片img_0_0_1问题解决(图片控件在HTML..._第2张图片
总结,其实jasperreport中还有很多密秘哦,你不防去反个原码看个底透。
更多可配置参数:
JRHtmlExporterParameter.HTML_HEADER
JRHtmlExporterParameter.BETWEEN_PAGES_HTML
JRHtmlExporterParameter.HTML_FOOTER
JRHtmlExporterParameter.IMAGES_DIR
JRHtmlExporterParameter.IMAGES_DIR_NAME
JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS
JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND
JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR
JRHtmlExporterParameter.IMAGES_URI
JRHtmlExporterParameter.IMAGES_MAP
JRHtmlExporterParameter.IS_WRAP_BREAK_WORD
JRHtmlExporterParameter.SIZE_UNIT
JRHtmlExporterParameter.ZOOM_RATIO  缩放哦,你去试试 2.0f
JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN
JRHtmlExporterParameter.FRAMES_AS_NESTED_TABLES
JRHtmlExporterParameter.FLUSH_OUTPUT

你可能感兴趣的:(无法显示,jasperReport,HTML报表,img_0_0_1问题)