ireport3.1.2结合JFreeChart1.0.10能显示文字,但不显示图片

本文介绍如何在IReport3.1.2中集成JFreeChart1.0.10来显示图表,并提供了一个具体的示例代码。该示例包括jrxml文件的配置、自定义Scriptlet类以及报表填充和导出过程。
ireport3.1.2结合JFreeChart1.0.10显示不出图片
先生成jrxml,代码如下:

<?xml version="1.0" encoding="GBK"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20"
scriptletClass="com.todaysoft.openflex4j.security.producefunction.jasper.JFreeChartScriptlet" bottomMargin="20">
<property name="ireport.scriptlethandling" value="2" />
<property name="ireport.encoding" value="GBK" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<variable name="chart" class="net.sf.jasperreports.engine.JRRenderable"/>
<background>
<band/>
</background>
<title>
<band height="58">
<staticText>
<reportElement x="90" y="12" width="298" height="35"/>
<textElement textAlignment="Center">
<font fontName="宋体" size="14" isBold="true"/>
</textElement>
<text><![CDATA[在Jasperreport中添加Jfreechart图形]]></text>
</staticText>
</band>
</title>
<pageHeader>
<band/>
</pageHeader>
<columnHeader>
<band/>
</columnHeader>
<detail>
<band height="300">
<image>
<reportElement x="0" y="12" width="538" height="288"/>
<imageExpression class="net.sf.jasperreports.engine.JRRenderable"><![CDATA[$V{chart}]]></imageExpression>
</image>
</band>
</detail>
<columnFooter>
<band/>
</columnFooter>
<pageFooter>
<band/>
</pageFooter>
<summary>
<band/>
</summary>
</jasperReport>


在写生成图片的类,代码哪下:

package com.todaysoft.openflex4j.security.producefunction.jasper;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

import net.sf.jasperreports.engine.JRDefaultScriptlet;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.renderers.JCommonDrawableRenderer;


public class JFreeChartScriptlet extends JRDefaultScriptlet {
public void afterReportInit() throws JRScriptletException {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Java", 40.2F);
dataset.setValue("VB", 20.2F);
dataset.setValue("C/C++", 17.5F);
dataset.setValue("C#", 22.5F);
dataset.setValue("Perl", 1.0F);

JFreeChart chart = ChartFactory.createPieChart3D("各种语言使用率",
dataset, true, true, false);

PiePlot3D plot = (PiePlot3D)chart.getPlot();
plot.setStartAngle(290);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5f);
plot.setNoDataMessage("没有可显示的数据");

this.setVariableValue("chart", new JCommonDrawableRenderer(chart));
}
}


调用的类,代码如下:


package com.todaysoft.openflex4j.security.producefunction.jasper;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspWriter;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.j2ee.servlets.ImageServlet;

public class JFreeChartApp {
@SuppressWarnings("deprecation")
public void export(HttpServletRequest request, JspWriter writer)
throws IOException, Exception {

String reportSource;
reportSource = request.getSession().getServletContext()
.getRealPath("WEB-INF/jasper/jfreechart.jrxml");
File parent = new File(reportSource).getParentFile();
File child = new File(
parent, "jfreechart.jasper");
JasperCompileManager.compileReportToFile(reportSource,
child.getAbsolutePath());
// 编译成.jasper文件

if (!parent.exists())
throw new JRRuntimeException(".jasper文件找不到,无法编译.");

JasperReport jasperReport;

jasperReport = (JasperReport) JRLoader.loadObject(child.getAbsolutePath());

Map parameters = new HashMap();

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,
parameters, new JREmptyDataSource());

// 使用JRHtmlExproter导出Html格式
JRHtmlExporter exporter = new JRHtmlExporter();

(request.getSession()).setAttribute(
ImageServlet.DEFAULT_JASPER_PRINT_SESSION_ATTRIBUTE,
jasperPrint);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, writer);
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI,
"../OPENFLEX4J/image?image=");

exporter.exportReport();
}
}



JSP页面调用

<%@ page import="com.todaysoft.openflex4j.security.producefunction.jasper.*"%>
<%@ page contentType="text/html; charset=GBK"%>

<%
JFreeChartApp jfreeChartApp = new JFreeChartApp();
jfreeChartApp.export(request,out);
%>


运行后,能看到静态文本,但看不到图片,还有乱码,请各位大哥,大姐,指点下
[img]http://huanglppp.iteye.com/upload/attachment/51739/3c8e5574-c83b-3aa4-ab30-081da6d7d06f.bmp[/img]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值