徽标图像仅显示在 Jasper Reports 页眉的第一页中
Logo image showing only in the first page on page header in Jasper Reports
我有一个独特的案例,我在 Jasper 的 PageHeader Band 上有一个徽标,我期望因为它在页眉上,所以它应该打印在每一页上,但它只打印在第一页上页。如果我 运行 来自 ireport 设计器,相同的 Jrxml 在所有页面上生成徽标,但在我的 Java 应用程序中,它仅在第一页上生成徽标。我做错了什么吗?
我的Java方法:
public void formatreport(String foracid, String reportDir, String fromdate, String todate, String currdate, int pid, String suffix) {
Connection conn = null;
try {
conn = db.prepareConn();
Map parameters = new HashMap();
ClassLoader classLoader = getClass().getClassLoader();
InputStream logourl = classLoader.getResourceAsStream("/com/sim/bulk/jrxml/logo.jpg");
parameters.put("account", foracid);
parameters.put("from_date", fromdate);
parameters.put("to_date", todate);
parameters.put("period_id", pid);
parameters.put("suffix", suffix);
parameters.put("logo", logourl);
log.debug("Bulk statement Parameters: account:" + foracid + "\nfrom_date:" + fromdate + "\nto_date:" + todate + "\nperiod_id:" + pid);
InputStream url = classLoader.getResourceAsStream("com/sim/bulk/jrxml/Bulkstatement.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(url);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
reportDestination = reportDir + "/Statement_" + foracid + "_" + currdate + ".pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint, reportDestination);
} catch (JRException asd) {
log.fatal(asd.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException asd) {
System.out.println(asd.getMessage());
}
}
}
以及 jrxml 的摘录:
<pageHeader>
<band height="162" splitType="Stretch">
<image onErrorType="Blank" evaluationTime="Now">
<reportElement uuid="a49076f0-b945-4742-bb15-737b2a927da2" x="12" y="12" width="74" height="50"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
</band>
</pageHeader>
为图片设置isUsingCache="true"。否则图像会多次尝试从输入流中读取数据,这是行不通的。
或者你可以直接使用资源路径(“/com/sim/bulk/jrxml/logo.jpg”)作为图像表达,在大多数情况下,JasperReports 可以从类加载器加载它。
我有一个独特的案例,我在 Jasper 的 PageHeader Band 上有一个徽标,我期望因为它在页眉上,所以它应该打印在每一页上,但它只打印在第一页上页。如果我 运行 来自 ireport 设计器,相同的 Jrxml 在所有页面上生成徽标,但在我的 Java 应用程序中,它仅在第一页上生成徽标。我做错了什么吗?
我的Java方法:
public void formatreport(String foracid, String reportDir, String fromdate, String todate, String currdate, int pid, String suffix) {
Connection conn = null;
try {
conn = db.prepareConn();
Map parameters = new HashMap();
ClassLoader classLoader = getClass().getClassLoader();
InputStream logourl = classLoader.getResourceAsStream("/com/sim/bulk/jrxml/logo.jpg");
parameters.put("account", foracid);
parameters.put("from_date", fromdate);
parameters.put("to_date", todate);
parameters.put("period_id", pid);
parameters.put("suffix", suffix);
parameters.put("logo", logourl);
log.debug("Bulk statement Parameters: account:" + foracid + "\nfrom_date:" + fromdate + "\nto_date:" + todate + "\nperiod_id:" + pid);
InputStream url = classLoader.getResourceAsStream("com/sim/bulk/jrxml/Bulkstatement.jrxml");
JasperReport jasperReport = JasperCompileManager.compileReport(url);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);
reportDestination = reportDir + "/Statement_" + foracid + "_" + currdate + ".pdf";
JasperExportManager.exportReportToPdfFile(jasperPrint, reportDestination);
} catch (JRException asd) {
log.fatal(asd.getMessage());
} finally {
try {
if (conn != null) {
conn.close();
}
} catch (SQLException asd) {
System.out.println(asd.getMessage());
}
}
}
以及 jrxml 的摘录:
<pageHeader>
<band height="162" splitType="Stretch">
<image onErrorType="Blank" evaluationTime="Now">
<reportElement uuid="a49076f0-b945-4742-bb15-737b2a927da2" x="12" y="12" width="74" height="50"/>
<imageExpression><![CDATA[$P{logo}]]></imageExpression>
</image>
</band>
</pageHeader>
为图片设置isUsingCache="true"。否则图像会多次尝试从输入流中读取数据,这是行不通的。
或者你可以直接使用资源路径(“/com/sim/bulk/jrxml/logo.jpg”)作为图像表达,在大多数情况下,JasperReports 可以从类加载器加载它。