当前位置: 代码迷 >> ASP >> JasperReports 的进阶运用
  详细解决方案

JasperReports 的进阶运用

热度:834   发布时间:2012-11-06 14:07:00.0
JasperReports 的进阶使用

?注:当前在《建立第一个JavaBean数据源报表.doc》基础上进行操作

一.PDF中文不显示问题
中文问题一般出现在生成PDF的时候,出现症状为所有中文都不显示。
iReport 3.0
选择PDF预览,然后再次选择“执行报表(使用动态链接)”,就可以生成当前报表的PDF文件了。

默认情况下,在iReport的安装目录下可以找到生成的PDF文档,看一下,是不是所有的中文字符都丢失了呢。

咱们解决这个问题呢,很简单,在可能显示中文的地方,鼠标选中,右键选择属性,弹出窗口,点击“Font”进行字体设置:

注意:
Font Name :
选择宋体或其它
PDF Font Name?
选择STSong-Light

PDF Embedded 勾选

PDF Encoding 要选择UniGB-UCS2-H(Chinese Simplified)


再次“执行报表(使用动态链接)”即可。

二.引入图表显示
??????
在报表中,一般少不了图表进行形象显示:

在模板页面上点击右键,选择“栏的属性”,弹出,选择“summary”(用于总结报表的报表栏):

?

我们准备在 summary 栏内,显示图表,但其所具有的高度不能为020个高度太小了啊吧 ?那就200吧。填写完毕,一定要选择 "Apply" 按钮,然后关闭。

在工具栏内,找到图表工具按钮:

?

点击之后,在"Summary"区域选择一片区域,自动弹出一个图表选择窗口:

?

这里选择3D柱状图。

下面要设置柱状图的属性,选中,右键,“Chart Properties”。

?

选中“Chart Data”选项卡,点击“Details”选项卡,点击”Add“按钮,弹出

?

输入如上图示表达式,然后OK即可。执行动态报表,即可看到效果。

PS:

若图表图片来自于已有的系统,是否可以融入到当前报表中来,答案是肯定的。

在工具栏内,找到图片按钮,部署到相应位置,即可设置图片的地址,宽和高等参数:

?

"Image Expression" 中,输入图片的访问地址,可附加参数,这样就和既有系统进行交互了。看看效果图吧:

?

.如何使用jasper文件进行生成PDF文档
??????
public static void main(String[] args) throws Exception {

?????? try {

?????????? // 生成测试数据

?????????? DailySales[] datas = { new DailySales(" 货号 1", " 物品1 ", 1, 1000),

????????????????? new DailySales(" 货号 2", " 物品 2", 2, 2000),

????????????????? new DailySales(" 货号 3", " 物品 3", 3, 3000),

????????????????? new DailySales(" 货号 4", " 物品 4", 4, 4000),

????????????????? new DailySales(" 货号 5", " 物品 5", 5, 5000),

????????????????? new DailySales(" 货号 6", " 物品 6", 6, 6000),

????????????????? new DailySales(" 货号 7", " 物品 7", 7, 7000),

????????????????? new DailySales(" 货号 8", " 物品 8", 8, 8000),

????????????????? new DailySales(" 货号 9", " 物品 9", 9, 9000),

????????????????? new DailySales(" 货号 10", " 物品 10", 10, 10000) };

?????????? List<DailySales> data = Arrays.asList(datas);

?????????? //获取数据源

?????????? JRDataSource dataSource = new JRBeanCollectionDataSource(data);

?????????? // 报表模板文件

?????????? String reportFilePath = "d:/ireport/First.jasper";

?????????? // 生成JasperPrint

?????????? JasperReport report = (JasperReport) JRLoader

????????????????? .loadObject(reportFilePath);

?????????? // 要传入的参数数组

?????????? Map params = new HashMap();

?????????? JasperPrint jasperPrint = JasperFillManager.fillReport(report,

????????????????? params, dataSource);

?????????? // 设定输出格式以及输出路径

?????????? OutputStream ouputStream = new FileOutputStream("d:/test.pdf");

?????????? // 使用JRPdfExproter导出器导出pdf,导出不同格式文件,需要使用不同的导出器

?????????? JRPdfExporter exporter = new JRPdfExporter();

?????????? // 设置JasperPrintList

?????????? exporter

.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);

?????????? exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,

????????????????? ouputStream);

?????????? exporter.exportReport();

?????????? ouputStream.close();

?????? } catch (Exception e) {

?????????? e.printStackTrace();

?????? }

}
.生成HTML格式报表图片显示不出来

?????? a.假如报表不含有图表的话,可直接把 pr 文件放入到web项目images目录下
??? b.
若含有复杂报表图片等,则需要在web项目的web.xml文件中添加一个图片servlet 路径映射:
<servlet>

?????? <servlet-name>ImageServlet</servlet-name> ??? <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>

??? </servlet>

??? <servlet-mapping>

?????? <servlet-name>ImageServlet</servlet-name>

?????? <url-pattern>/servlets/image</url-pattern>

</servlet-mapping>

1 楼 nopain_nogain 2009-03-15  

    Find it,thank you so much.