2012-11-28 4 views
4

나는 보고서의 제목에 로고 이미지를 추가 한 ireport 디자이너를 사용하여 벽옥 보고서를 디자인했습니다. 이 이미지는 로컬 컴퓨터의 하드 코딩 된 경로에서 추가됩니다. 내 프로젝트 classpath에서 로고 이미지를 추가해야한다. 이를 위해 프로그램에서 제공되는 보고서의 이미지 매개 변수를 만들었습니다.프로젝트에서 매개 변수로 이미지를 추가하는 방법 재스퍼 보고서의 클래스 경로

<image> 
    <reportElement x="0" y="1" width="555" height="61"/> 
    <imageExpression><![CDATA[$P{logo}]]> 
    </imageExpression> 
</image> 

답변

22

우리는 항상 대신의 InputStream의 이미지를 전달 아래

InputStream imgInputStream = this.getClass().getResourceAsStream("header.png"); 

HashMap<String, Object> parameters = new HashMap<String, Object>(); 
parameters.put("dateFrom", datum1); 
parameters.put("dateTo", datum2); 
parameters.put("logo", imgInputStream); 


strQuery = "Select calldate,src,dst,duration,disposition,cdrcost from cdrcost where date(calldate) between '" + datum1 + "' and '" + datum2 + "'"; 

rs = conexiondb.Consulta(strQuery); 
JRResultSetDataSource resultSetDataSource = new JRResultSetDataSource(rs); 
//JasperPrint jasperPrint = JasperFillManager.fillReport(reportStream, parameters); 

JasperRunManager.runReportToPdfStream(reportStream, fos, parameters, resultSetDataSource); 

그리고

보고서에서 이미지 조각이다. 먼저 이미지를로드하고 매개 변수 맵에서 설정 :

다음
BufferedImage image = ImageIO.read(getClass().getResource("/images/IMAGE.png")); 
parameters.put("logo", image); 

매개 변수는 다음과 같이 정의한다 :

<parameter name="logo" class="Object" isForPrompting="false"> 
    <parameterDescription><![CDATA[The letterhead image]]></parameterDescription> 
    <defaultValueExpression><![CDATA[]]></defaultValueExpression> 
</parameter> 

그리고 보고서에 배치하는 경우는 다음과 같습니다

<image> 
    <reportElement x="324" y="16" width="154" height="38"/> 
    <imageExpression><![CDATA[$P{logo}]]></imageExpression> 
</image> 
+1

선생님 내가 같은했지만 그것은 – Amit

+0

선생님 이미지와로드되지 생성되지 않은 이미지가 클래스 경로 및 PDF 보고서에서로드되지 일어나지 않았다 이 코드와 에러가 발생한다 "java.lang.IllegalArgumentException : input == null!" – Amit

+0

''/images/IMAGE.png ''''를''header.png "'로 대체했다고 가정합니다. 병의 기본 패키지에 있다면''/header.png ''를 시도하십시오. –

0

클래스 패스/클래스 로더에서 쉽게 URL을 가져올 수 있습니다. 이것은 <imageexpression>에 대한 유효한 입력이며 따라서 PDF에 이미지를 포함시키는 데 사용할 수 있습니다. 은 나를 위해 일한 다음 :

매개 변수를 설정 :

URL url = this.getClass().getClassLoader().getResource("pdf/my_image.tif"); 
parameters.put("logo", url); 

선언을 보고서에 : 보고서에

<parameter name="logo" class="java.net.URL"> 
    <defaultValueExpression><![CDATA[]]></defaultValueExpression> 
</parameter> 

사용합니다.

<image> 
    <reportElement x="100" y="30" width="135" height="30"/> 
    <imageExpression><![CDATA[$P{logo}]]></imageExpression> 
</image> 

일부 추가 관찰

  • 내가의 InputStream를 사용하고 한 번만 이미지를 표시 할 때 그것을 잘 작동하기 전에. 이미지를 반복 할 필요가있을 때 스트림이 첫 번째 디스플레이에서 소비되어 이후에 사용할 수 없기 때문에 InputStream이 작동하지 않았습니다. 나는 그것을 재설정하는 쉬운 방법을 찾지 못했습니다.
  • 나는 URL을 여기에서 사용될 수 있다는 것을 발견 : http://jasperreports.sourceforge.net/sample.reference/images/index.html
관련 문제