我使用ireport设计器设计了一个jasper报告,其中我在报告的标题中添加了徽标图像。此图像是从本地计算机上的硬编码路径添加的。我需要从我的项目类路径中添加徽标图像。为此,我在报告中为程序提供了图像参数。
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);
以下是报告中的图片摘录:
<image>
<reportElement x="0" y="1" width="555" height="61"/>
<imageExpression><![CDATA[$P{logo}]]>
</imageExpression>
</image>
答案 0 :(得分:29)
我们总是传入图像而不是InputStream。首先加载图像并将其设置在参数图中:
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 :(得分:1)
您可以轻松地从classpath / classloader获取URL。这是&lt; imageExpression&gt;的有效输入。因此,您可以使用它在您的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>
一些额外的观察
答案 2 :(得分:0)
我没有设法使其与任何这些方法一起使用,我遇到了错误:
Error evaluating expression for source text
使用Java编译报告时
在Java中,您必须将图像输入到输入流中,
byte[] image = imageRepository.getLogo();
InputStream logo= new ByteArrayInputStream(image);
parameters.put("logo",logo);
因为我正在从数据库中将图像作为字节数组获取,但是如果您在JAR中将其保存在某个位置:
ResourceLoader resourceLoader;
InputStream logo= resourceLoader.getResource("classpath:/image/logo.jpg").getInputStream();
parameters.put("logo",logo);
然后在jrxml中,它简单地给出:
<parameter name="logo" class="java.io.InputStream"/>
<image scaleImage="RealSize">
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>