2011-12-01 51 views
2

打开输入流,我设计使用iReport的碧玉报告,从给定的URL需要一个参数,获取的图像:碧玉:错误的URL

的参数是在Twitter上用户的网名和网址它是个人资料图片。

<image> 
     <reportElement x="4" y="51" width="73" height="64"/> 
      <imageExpression><![CDATA["https://api.twitter.com/1/users/profile_image?screen_name="+$F{user_screen_name}+"&size=bigger"]]></imageExpression> 
    </image> 

它在图像存在时效果很好。如果它不抛出以下异常:

Error filling print... net.sf.jasperreports.engine.JRException: Error opening input stream from URL : 
    https://api.twitter.com/1/users/profile_image?screen_name=CPTCurtisHervey&size=bigger 
    Setting up the file resolver... net.sf.jasperreports.engine.JRRuntimeException: 
    net.sf.jasperreports.engine.JRException: Error opening input stream from URL : 
    https://api.twitter.com/1/users/profile_image?screen_name=CPTCurtisHervey&size=bigger 
    at net.sf.jasperreports.repo.DefaultRepositoryService.getInputStream(DefaultRepositoryService.java:138) 
    at net.sf.jasperreports.repo.RepositoryUtil.findInputStream(RepositoryUtil.java:186)  
    at net.sf.jasperreports.repo.RepositoryUtil.getBytes(RepositoryUtil.java:202) 
    at net.sf.jasperreports.engine.JRImageRenderer.getInstance(JRImageRenderer.java:141)  
    at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:498) 
    at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:441) 
    at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257) 
    at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:468) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2037)  
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:761)  
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:291) 
    at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:133)  
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:903) 
    at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:813) 
    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:878) 
    at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572) 
    at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997) Caused by: 
    net.sf.jasperreports.engine.JRException: Error opening input stream from URL : 
    https://api.twitter.com/1/users/profile_image?screen_name=CPTCurtisHervey&size=bigger  
    at net.sf.jasperreports.engine.util.JRLoader.getInputStream(JRLoader.java:314) 
    at net.sf.jasperreports.repo.DefaultRepositoryService.getInputStream(DefaultRepositoryService.java:121) 
    ... 19 more Caused by: java.io.FileNotFoundException: 
    https://api.twitter.com/1/users/profile_image?screen_name=CPTCurtisHervey&size=bigger  
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1401)  
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    at java.net.URL.openStream(URL.java:1029)  
    at net.sf.jasperreports.engine.util.JRLoader.getInputStream(JRLoader.java:310)... 20 more 
    Print not filled. Try to use an EmptyDataSource... 

我该如何处理jrxml文件中的这种情况?

我想简单地添加一个固定的URL地址,以防万一找不到。

任何人有什么建议吗?

谢谢!

回答

2

我认为你需要添加一个辅助类来处理这个问题。你需要一个静态方法boolean urlExists(String url),它会让你把这个在imageExpression:

MyClass.urlExists($F{image_url}) ? $F{image_url} : $P{fallback_image} 

这将是一个简单的类来写......但显然在另一个.jar文件增加的额外的复杂性。如果没有这种方法,我看不到在.jrxml中进行处理的任何方法。

在JRXML文件
+0

谢谢! 帮了很多! – Etay

0

, 以显示URL资源,利用图像表达URL()

像下面的图片,例如$F{ADPN_NO}是从报表参数

<imageExpression><![CDATA[new URL("http://anyserver:7001/images/"+$F{ADPN_NO}+".jpg")]]></imageExpression> 

onError发生,它会显示空白项,图标或在jrxml上设置的错误。

的其他方式,JRXML文件外,你可以使用Java地图对象包含IMG的网址是URL()File() Exception检查..

0

在我来说,我有一个报告,说明我“注入”了图像的网址,它是导致证书错误(我注射的网址是IP,它必须是证书的名称)。我改变了它的网址后,