`
simple_hui
  • 浏览: 153164 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

jxl处理图片

阅读更多
这两天要用,临时在网上找的。
  
/*
   // ok: 从本地文件得到图片资源,写到xls中
   java.io.File image8 = new java.io.File("E:\\logo.png");
   WritableImage wimage = new WritableImage( 2, 7, 2.5, 2.5, image8 );
   ws.addImage( wimage );
   */
        
        // ok: 从internet得到图片资源,写到xls中
        HttpClient client = new HttpClient();
        String url76 = "http://www.google.cn/images/nav_logo3.png";
        GetMethod get77 = new GetMethod( url76 );
        client.executeMethod( get77 );
        byte[] bb77 = get77.getResponseBody();
        java.io.InputStream is77 = get77.getResponseBodyAsStream();
        // 关闭 HttpClient 连接
        get77.releaseConnection();
        
        // 获取图象大小, ok: 2007-12-11 17:29:35
        BufferedImage bi7 = ImageIO.read( is77 );
        
        // another interface such as: read(InputStream input) 
        int picWidth = bi7.getWidth(); // 图片宽, 像素 150
        int picHeight = bi7.getHeight(); // 图片高, 像素 105
        
        //test
        System.out.println("--1703");
        System.out.println("Width=" + picWidth );
        System.out.println("Height=" + picHeight );

        // 输入参数, 图片显示的位置
        double picBeginCol = 1.2;
        double picBeginRow = 1.2;

        /*
            实际像素: 150/105 = 2.78 cm / 3.97 cm = 4832 / 1590
            实际像素: 300/210 =           2倍大小 = 9600 / 3150 比率: 32 / 15
        */
        // 计算参数( picCellWidth, picCellHeight ), 图片显示大小, 默认 100% 显示: begin
        //     图片cell宽度 = 图片实际跨越每个cell所占长度的相对各个cell ratio的和
        //     方法: 根据起始位置,计算图片实际跨越的区域, 然后计算相对ratio,然后累加
        // 
        double picCellWidth = 0.0; // 是 cell的跨越个数, 可小数
        double picCellHeight = 0.0;
        // wc = ws.getWritableCell( picBeginCol, picBeginRow ); // 列,行
        // ws.getColumnView( picBeginCol ).getSize();
        // ws.getRowView( picBeginRow ).getSize();

        int _picWidth = picWidth * 32 ; // pic的宽度,循环递减, 是jxl的宽度单位, 32/15
        for(int x=0; x< 1234; x++)
        {
            int bc = (int)Math.floor( picBeginCol + x ); // 3.6 to 3 // 本次循环所在cell位置
            System.out.println("x =" + x ); //test
            System.out.println("bc =" + bc ); //test
            int v = ws.getColumnView( bc ).getSize(); //本次cell宽,jxl单位
            double _offset0 = 0.0; // >= 0 // 离左边的偏移量, 仅 x = 0 的时候才用
            if( 0 == x )
                _offset0 = ( picBeginCol - bc ) * v ; // 
            
            System.out.println("_offset0 =" + _offset0 ); //test
            System.out.println("_picWidth =" + _picWidth ); //test
            System.out.println("v =" + v ); //test
            System.out.println("cw 00=" + ws.getColumnView( 0 ).getSize() ); //test
            System.out.println("ch 00=" + ws.getRowView( 0 ).getSize() ); //test
            System.out.println("cw 22=" + ws.getColumnView( 2 ).getSize() ); //test
            System.out.println("ch 22=" + ws.getRowView( 2 ).getSize() ); //test
            
            if( 0.0 + _offset0 + _picWidth > v ) // _picWidth 剩余长度超过一个cell时
            {
                // 计算本次cell内, pic 所占 ratio值, 累加到 picCellWidth
                double _ratio = 1.0;
                if( 0 == x )
                    _ratio = ( 0.0 + v - _offset0 ) / v;
                System.out.println("_ratio =" + _ratio ); //test
                // picCellWidth += 1.0;
                picCellWidth += _ratio;
                _picWidth -= (int)( 0.0 + v - _offset0 ); // int
            } 
            else // _picWidth 剩余长度在一个cell内时
            {
                double _ratio = 0.0;
                if( v != 0 )
                    _ratio = ( 0.0 + _picWidth ) / v;
                picCellWidth += _ratio;
                System.out.println("for: picCellWidth =" + picCellWidth ); //test
                break;
            }
            if( x >= 1233 )
                ntTool.ntSysOut("enwl_print_report_xls: 446: x >= 1233,循环超限,不影响运行,影响速度"); //
        } // for
        // 此时 picCellWidth 是图片实际的值了

        //
        int _picHeight = picHeight * 15 ; // pic的高度,循环递减, 是jxl的高度单位, 32/15
        for(int x=0; x< 1234; x++)
        {
            int bc = (int)Math.floor( picBeginRow + x ); // 3.6 to 3 // 本次循环所在cell位置
            int v = ws.getRowView( bc ).getSize(); //本次cell高,jxl单位
            double _offset0 = 0.0; // >= 0 // 离顶部的偏移量, 仅 x = 0 的时候才用
            if( 0 == x )
                _offset0 = ( picBeginRow - bc ) * v ; // 
            if( 0.0 + _offset0 + _picHeight > v ) // _picHeight 剩余长度超过一个cell时
            {
                // 计算本次cell内, pic 所占 ratio值, 累加到 picCellHeight
                double _ratio = 1.0;
                if( 0 == x )
                    _ratio = ( 0.0 + v - _offset0 ) / v;
                // picCellHeight += 1.0;
                picCellHeight += _ratio;
                _picHeight -= (int)( 0.0 + v - _offset0 ); // int
            } 
            else // _picHeight 剩余长度在一个cell内时
            {
                double _ratio = 0.0;
                if( v != 0 )
                    _ratio = ( 0.0 + _picHeight ) / v;
                picCellHeight += _ratio;
                break;
            }
            if( x >= 1233 )
                ntTool.ntSysOut("enwl_print_report_xls: 446: x >= 1233,循环超限,不影响运行,影响速度"); //
        } // for
        // 此时 picCellHeight 是图片实际的值了
        // 计算参数( picCellWidth, picCellHeight ), 图片显示大小, 默认 100% 显示: end
       

        //test
        System.out.println("picBeginCol=" + picBeginCol );
        System.out.println("picBeginRow=" + picBeginRow );
        System.out.println("picCellWidth=" + picCellWidth );
        System.out.println("picCellHeight=" + picCellHeight );
       

        WritableImage wimage = new WritableImage( picBeginCol,picBeginRow, picCellWidth,picCellHeight, bb77 );
        
        // WritableImage wimage = new WritableImage( 2.2, 3.2, 2.3, 2.8, bb77 );
        
        // 图片写到xls中
        ws.addImage( wimage );
        // 写图片: end
        
        
        
        // 保护, 不让修改, protect:
        if( is_rpt_readOnly )
        {
            ws.getSettings().setProtected(true);
            ws.getSettings().setPassword( rpt_readOnly_pwd );
        }

        jxl.write.WritableCell wc = null; // equal to global

    
    // 处理第 i_sheet 张 Sheet表
    Sheet rs = rwb.getSheet( i_sheet );
   
分享到:
评论
2 楼 zhangyatong 2012-10-23  
zhangyatong 写道
ws.getColumnView( bc ).getSize() 这个值 jxl单位  怎么跟px 运算?

明白了,实际大小 * 32是宽度

宽度是30倍
高度是15倍

1 楼 zhangyatong 2012-10-23  
ws.getColumnView( bc ).getSize() 这个值 jxl单位  怎么跟px 运算?

相关推荐

    JXL插件和使用说明文档

    jxl是一个韩国人写的java操作excel的工具, 在java的开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI(即jxl)... 需要补充说明的是,jxl对图形和图表的支持很有限,而且 仅仅识别PNG格式的图片。

    excel操作(jxl)

    java导入导出excel操作(jxl) ...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确 的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式

    jxl.jar使用文档

    jxl.jar 通过java操作excel表格的工具类库 支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。...

    jxl-2.6.jar

    jxl.jar是通过java操作excel表格的工具 类库支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键...

    JXL(Java操作Excel的源代码及例子)

    最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件...

    jxl.jar源码 jar包

    jxl.jar是通过java操作excel表格的工具 类库支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键...

    jxl.jar 技术文档

    通过java操作excel表格的工具...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

    jxl.jar包(java导入导出Excel文件)

    通过java来操作Excel表格的工具类库。 支持字体、数字、日期操作,能够修饰单元格属性,能支持图像和图表,可以正确的处理Excel文件。 附使用方法。

    jxl-2.4.3.jar

    支持Excel 95-2000的所有版本 ...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

    通过java操作excel表格的工具类库jxl

     支持图像和图表  应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的...

    Excel数据操纵-jar包-jxl.jar

     支持图像和图表  应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表...

    jxl使用说明文档

    通过java操作excel表格的工具...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

    最新 JXL API

    通过java操作excel表格的工具...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

    jxl的使用 导入导出exec数据

    1支持Excel 95-2000的所有版本...最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

    Java读写Excel的jar包

    最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 将下载后的文件解包,得到...

    java导入导出详解

    最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包...

    ● 生成Excel 2000标准格式 jimet

    最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件...

    Java_Web开发实战1200例第1卷.part2

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    Java_Web开发实战1200例第1卷.part3

    21.1 应用JXL组件操作Excel 776 21.2 应用POI组件操作Excel 807 第22章 报表与打印 829 22.1 Web打印 830 22.2 利用Word打印报表 833 22.3 利用Excel打印报表 838 22.4 应用WebBrowser+CSS套打邮寄 22.5 打印库存...

    ttshop-b-s-:ttshop bs 在线销售管理系统

    包括入货开单,查看入货单,统计入货信息4、零售,包括销售开单,查询单,统计销售数据等等5、调货及退货的处理 , 库存盘查6、涉及以上所有操作的库存更新处理7、销售发票打印样式设置,提供4样固定的样式及一个...

Global site tag (gtag.js) - Google Analytics