jasper iReport 插入图片问题

时间:2022-02-03 21:40:23

网摘一

问题:

我插入图片之后,将$P{url}(我新建的一个变量)作为图片路径,然后再jsp里面传递了一个全路径进去,但是无法显示,请问各位大虾,这是为什么呢?求教完整的解决办法,谢谢!!!!!

解答:

看了一些别的资料,解决了

如下:

File reportFile = new File(application.getRealPath("reports/picture.jasper"));
Map parameters = new HashMap();
parameters.put("path",".//");   
parameters.put("images_paths",request.getRealPath("/reports/images/")+"/");
parameters.put("url","tomcat-power.gif");
parameters.put("SUBREPORT_DIR",request.getRealPath("/reports/")+"/");
//这一个是为子报表设置路径,如果创建子报表,一般会自动创建一个SUBREPORT_DIR变量,如果没有,那么就手动创建
JasperReport report=(JasperReport)JRLoader.loadObject(reportFile.getAbsolutePath());
JRHtmlExporter exporter=null;
    exporter = new JRHtmlExporter();
    StringBuffer sbuffer = new StringBuffer();
    Map imagesMap = new HashMap();   
    //重要的解析开始 
    JasperPrint jasperPrint=JasperFillManager.fillReport(report, parameters,sqlCon);   
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    //exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "GBK");
    exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "./reports/images/");  
    exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME,request.getRealPath("/reports/images")+"//");
//设置允许输出图片
       exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR,Boolean.TRUE);
       exporter.setParameter(JRHtmlExporterParameter.SIZE_UNIT,"pt");
    exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE);
    exporter.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
    exporter.exportReport();
我在报表里面为图片设置了3个变量,分别是:url,path,images_paths

url默认为 new String("hi.gif")

path 默认为".//"

images_paths默认设置为new String("C://")

然后在图片的属性的“Image”下将其路径设置为“$P{images_paths}+$P{url}”

以Tomcat服务器,cre这个工程为例,cre放在服务器根目录下面,JavaBean的包放在webapps/ROOT/cre/WEB-INF/classes下面。将字报表放在工程reports目录下面,即/webapps/ROOT/cre/下面。将图片放在/reports/images目录下面。

特殊情况下,如果还是找不到字报表或者图片,请将reports文件夹放到/webapps/ROOT下面,JavaBean的包放在webapps/ROOT/WEB-INF/classes下面。

网摘二

我在ireport设计的时候,内嵌有网站logo图和一个条形码,结果调试的时候,图形都无法显示,查了网上资料才知道是
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE, jasperPrint);
需要把jasperPrint放入session,这样,ireport的图片显示服务器才能访问jasperPrint对象,显示出相应的图像出来
ireport显示外部图片的具体步骤:
1.在web-bin设置ireport图片显示服务:

<servlet>

        <servlet-name>ImageServlet</servlet-name>

        <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>

</servlet>

<servlet-mapping>

        <servlet-name>ImageServlet</servlet-name>

        <url-pattern>/servlets/image</url-pattern>

</servlet-mapping>

2.设置ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTEsession
request.getSession().setAttribute(ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,jasperPrint);
3.设置图片servlet服务的路径:
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,"/servlets/image?image=");

网摘三

例如:数据库图片字段PICTURE_ATTACH类型为blob,在邦定字段时,
设置ireport中字段(Fields)PICTURE_ATTACH属性:
该字段类型 Field Class设置为 java.io.InputStream
然后添加一个图片来显示该图片字段,选择图片,设置属性:
属性image expression设置为 $F{PICTURE_ATTACH}
属性Expression class 设置为java.io.InputStream
Jasperreport 导出pdf 粗体,宋体,黑体字体设置
1.为了显示中文,需要在ireport中设置文本属性: 
   font中选中宋体,
   pdf font 选中strong-light, 
   pdf-encode 选中 UniGB-UCS2-H (Chinese Simplified) 
   Pdf Embedded true
2.在导出pdf时,需要宋体或黑体中文加粗或斜体时需要设置如下
  Map fontMap = new HashMap();
  // 宋体,加粗,非斜体的参数设置,宋体不需要引入字体文件,如果需要斜体的话,把false值变为true即可
  fontMap.put(new FontKey("宋体", true, false), new PdfFont("STSong-Light","UniGB-UCS2-H", true, true, false)); 
 //黑体的话,在ireport的Font中选中黑体,加粗,还要引入字体文件simhei.ttf,该文件可从C:\WINDOWS\Fonts中获得
  FontKey key = new FontKey("黑体", true, false); //黑体,true表示加粗,false表示非斜体,如果需要变为斜体,只需变为true即可
  PdfFont font = new PdfFont("c:\\simhei.ttf" "Identity-H", true, true, false); //该false值表示非斜体,如果需要变为斜体,只需变为true即可
  fontMap.put(key, font);
  exporter.setParameter(JRExporterParameter.FONT_MAP, fontMap);
 jasperrepor导出大数据量数据时,减小占用大量内存实现方法如下:
  //report virtualizer"可以用来序列化临时数据到硬盘上来优化内存的使用. 
  //第一个参数2表示放入内存中的页数,如果超过2页,第3页以后的数据,都会放到硬盘的文件夹/reports/tmp下,
  //第二个参数表示临时文件存放的目录
  JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, sc.getRealPath("/reports/tmp"));  
  //设置该参数
  parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer); 
  jasperPrint = JasperFillManager.fillReport(jasperReport,parameters, dataSource);