使用PostgreSql在Ireports中显示图像 [英] Displaying image in Ireports using PostgreSql
问题描述
我正在尝试将图像从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;
- 在sql查询中
选择转换(your_image,'base64')为img from yourtable
- 将图像表达式类设置为
java.io.InputStream
-
net.sf.jasperreports.engine.util.JRImageLoader.getInstance(new SimpleJasperReportsContext())。loadAwtImageFromBytes(javax.xml.bind.DatatypeConverter.parseBase64Binary($ F {img}) )
图像表达式中的
- in sql query
select convert(your_image,'base64') as img from yourtable
- set image expression class to
java.io.InputStream
- 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屋!