JR 精品文章 - iReport整合向量图形
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java GUI 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
iReport整合向量图形
efly 原创   更新:2004-06-09 16:34:04  版本: 1.0   

笔者最近通过试用iReport并整合了打了向量图形的补丁后的JasperReports,发现iReport的功能和易用性接近商业化的报表工具。成为开源报表工具的首选。Svg补丁直接使用了iText对Java Graphics2D的wrap来实现pdf文件的svg图形。

iReport主页

JasperReports向量图形patch


补丁方式
通过svg-patch-src修补jasperreports cvs源码,编译后与iReport源码整合。笔者发现了少数中文和xml校验等问题,通过修改源码可以解决。所以建议iText,jasperreports,jfreechart,iReport都使用cvs源码。

中文问题
修改com.lowagie.text.pdf.DefaultFontMapper类的awtToPdf方法:
BaseFont bf = null;
        try {
            bf =
                BaseFont.createFont(
    System.getProperty(“font.chinese.SIMYOU”),"D:/wiki/iReport-0.3.0/fonts/SIMYOU.TTF",
                    BaseFont.IDENTITY_H,
                    BaseFont.EMBEDDED);
        } catch (DocumentException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

在Linux平台上部署的时候需要修改jfreechart相应的字体。

iReport Chart
iReport目前对chart支持很有限,不过通过image标签和scriptlet可以很好的嵌入jfreechart图形, 嵌入其它chart比如jcharts方法一样。


Scriptlet代码

public class ChartScriptlet extends JRDefaultScriptlet
{
    /**
     *
     */
    public void afterReportInit() throws JRScriptletException
    {
        Connection con=null;
        DefaultPieDataset pieDataset = new DefaultPieDataset();
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {

            con =
                DriverManager.getConnection(
                    "jdbc:oracle:thin:@127.0.0.1.38:1521:ora8i",
                    "user",
                    "password");

            String query =
                "select province.name as name,sum(bill.total) as total from province,bill,node where bill.node_id =node.id and node.province_id=province.id and bill.CREATE_TIME > to_date('2004-1-1','yyyy-MM-dd') group by province.name";
            Statement stmt = con.createStatement();

            // Submit a query, creating a ResultSet object

            ResultSet rs = stmt.executeQuery(query);

            while (rs.next()) {
                System.out.println(rs.getString("name"));
                pieDataset.setValue(
                    rs.getString("name"),
                    rs.getDouble("total"));
            }
            rs.close();
            stmt.close();
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
        JFreeChart chart =
            ChartFactory.createPieChart(
                "2004-1-1至今各省帐单数据统计图",
                pieDataset,
                true,
                true,
                false);
        JCommonDrawableWrapper chartWrapper = new JCommonDrawableWrapper(chart);

        this.setVariableValue("ChartImage", chartWrapper);

        BufferedImage image = chart.createBufferedImage(246, 303);
        this.setVariableValue("ChartImage2", image);
    
    }
}

生成pdf
作为对比,笔者同时使用了svg和位图,svg在编辑模式下可以copy文本,并且放大显示后不会出现像那样位图模糊不清的情况。图形渲染质量和打印效果也非常好。
Example pdf下载



版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     9       0
作者其它文章: 作者全部文章
评论人:panpa 发表时间: Tue Jun 15 10:44:50 CST 2004
嗯,不错!试了有个问题请教一下:
用这个patch画出来的图表中文字字体很粗,中文显示则会超出那个提示框
不知道在哪儿能更改字体,这个图表的字体取决于哪个对象呢
是那个DefaultFontMapper还是Graphics2D或是其他哪个?
评论人:panpa 发表时间: Tue Jun 15 10:55:14 CST 2004
发现作者scriplet代码里的
this.setVariableValue("ChartImage2", image);
给的是一个Image对象
而在图中给Image设置的类是dori.jasper.util.Renderable
这是否有矛盾呢,要想用矢量能给定Image对象吗?你的scriplet到底是出矢量图的还是位图的
游客: efly 发表时间: Tue Jun 15 18:07:55 CST 2004
panpa的第一个问题是修改DefaultFontMapper来解决的.
第二个问题,大概你没有看我最下面提供的pdf example,可以下载来看,它绘了两个
图,一个是graphics2D的,一个是普通的位图.
评论人:panpa 发表时间: Wed Jun 16 09:10:49 CST 2004
哦,谢谢!
另外我还想问你怎么让饼图里面的文字都变成矢量可选的,我发现我做完后只有注释里面的文字比较漂亮是可选择拷贝的
看:我的PDF
游客: efly 发表时间: Wed Jun 16 09:31:53 CST 2004
to panpa:
我已经不记得了,可能是修改了哪个地方的代码。打包的4个工程包括代码大概有80M,你可以找我以前的同事zou_2000@263.net索取,我这里没有。
评论人:vampire_315 发表时间: Sat Dec 16 17:03:33 CST 2006
不错的东东啊

这个文章共有 6 条评论
主题: JNI完全手册(一) 上一篇文章
返回文章列表 返回〔Java GUI〕
下一篇文章 主题: ASN.1/BER/DER编码子集入门指南(completed)


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号