使用PostgreSql在Ireports中显示图像 [英] Displaying image in Ireports using PostgreSql

查看:181
本文介绍了使用PostgreSql在Ireports中显示图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将图像从PostgreSQL数据库加载到jaspersoft ireports(4.0)但我收到错误。

I am trying to load image from PostgreSQL database into jaspersoft ireports(4.0) but I am receiving an error.

在PostgreSQL图像中存储为bytea对象。在ireports中,我将图像字段的属性更改为 java.io.InputStream

In PostgreSQL image is stored as bytea object. In ireports I have changed the property of image field to java.io.InputStream.

将图像放入报告以下属性已设置:

After placing the image in report following properties were set:

表达式类: java.io.InputStream
图像表达式:图片字段

我也试过这个教程在ireport中显示blob图像。

I also tried this tutorial to show blob images in ireport.

关注显示错误:

Error filling print... Image read failed. 
Setting up the file resolver... 
net.sf.jasperreports.engine.JRException: Image read failed. 
    at net.sf.jasperreports.engine.util.JRJdk14ImageReader.readImage(JRJdk14ImageReader.java:73) 
    at net.sf.jasperreports.engine.util.JRImageLoader.loadImage(JRImageLoader.java:245) 
    at net.sf.jasperreports.engine.JRImageRenderer.getImage(JRImageRenderer.java:476) 
    at net.sf.jasperreports.engine.JRImageRenderer.getDimension(JRImageRenderer.java:512) 
    at net.sf.jasperreports.engine.fill.JRFillImage.fitImage(JRFillImage.java:1251) 
    at net.sf.jasperreports.engine.fill.JRFillImage.prepare(JRFillImage.java:1173) 
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:329) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:419) 
    at net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:378) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2038) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:760) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:270) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:128) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:946) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845) 
    at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417) 
    at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247) 
    at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:877) 
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) 
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) 
Print not filled. Try to use an EmptyDataSource...


推荐答案

花费近一个一天,终于找到了解决方案;

spending nearly one day, finally found the solution;


  1. 在sql查询中选择转换(your_image,'base64')为img from yourtable

  2. 将图像表达式类设置为 java.io.InputStream

  3. 图像表达式中的
  4. net.sf.jasperreports.engine.util.JRImageLoader.getInstance(new SimpleJasperReportsContext())。loadAwtImageFromBytes(javax.xml.bind.DatatypeConverter.parseBase64Binary($ F {img}) )

  1. in sql query select convert(your_image,'base64') as img from yourtable
  2. set image expression class to java.io.InputStream
  3. in image expression net.sf.jasperreports.engine.util.JRImageLoader.getInstance(new SimpleJasperReportsContext()).loadAwtImageFromBytes(javax.xml.bind.DatatypeConverter.parseBase64Binary($F{img}))

编辑:

我的Postgresql版本是: 9.4

My Postgresql version is : 9.4,

感谢FiruzzZ他在postgresql 9.1中声明 而不是转换函数,编码(bytea,'base64')可用。

Thanks to FiruzzZ he stated that in postgresql 9.1 instead of convert function, encode(bytea,'base64') is available.

这篇关于使用PostgreSql在Ireports中显示图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆