qq_34417433
Gosse0405
采纳率24%
2018-08-01 07:04 阅读 2.9k

java poi excel 生成图片

20

图片说明

我想要通过 1 **的数据。。怎么样在excel 插入图片的时候 让图片能够等比例的缩放呢
也就是我想问的 **2
里面的数据怎么写呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • qq_36291682 grace.free 2018-08-03 06:43
            ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
            BufferedImage bufferedImg = ImageIO.read(new File("e:\\111.png"));
            int imgH = bufferedImg.getHeight();
            int imgW = bufferedImg.getWidth();
            ImageIO.write(bufferedImg, "png", byteArrayOut);
            HSSFWorkbook workbook = new HSSFWorkbook();// 创建个空白的workbook
            HSSFSheet sheet = workbook.createSheet();// 创建个空白的sheet
            // 单元格宽度
            int w = sheet.getColumnWidth(0) / 256;
            HSSFRow row = sheet.createRow(0);
            // 单元格高度
            float hp = row.getHeightInPoints();
            int h = (int) (row.getHeight() / hp);
            // sheet.createRow(rownum)
            System.out.println(h);
            HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
            System.out.println("图片:高:宽" + imgH + "==" + imgW);
            System.out.println("单元格:高:宽" + h + "==" + w);
            // 比如你想让图片占10行
            // HSSFClientAnchor 参数
            // dx1 dy1起始单元格x y 坐标
            int dx1 = 0;
            int dy1 = 0;
            // dx2 dy2 结束单元格 x y 坐标
            int dx2 = w;
            int dy2 = h;
            // 起始列 起始行
            short col1 = 0;
            int row1 = 0;
            // 结束列 结束行
            int row2 = 10;// 因为你想占10行 所以这里是10
            int colInt = row2 * w * imgH / imgW / h;
            short col2 = (short) colInt;
            HSSFClientAnchor anchor = new HSSFClientAnchor(dx1, dy1, dx2, dy2,
                    col1, row1, col2, row2);
            patriarch.createPicture(anchor, workbook.addPicture(
                    byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG));
            FileOutputStream fileOut = new FileOutputStream("e:\\111.xls");
            workbook.write(fileOut);
    
        基本计算公式就是图片高/图片宽 = (行数*行宽)/(列数*列宽) 这样结果肯定在转换的时候有一点点差距 但是差距不大
    
    点赞 1 评论 复制链接分享
  • googletai googletai 2018-08-01 07:11

    设置图片的缩放比例 这样等比例应该没问题了

    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2018-08-01 16:07

    先看下这个 http://www.bubuko.com/infodetail-2310009.html

    你要等比例缩放,无非就是固定x,算出对应比例的y,或者固定y,算出对应比例的x。
    根据上面的链接,以及假设你的图片从(0,0)开始,可以看出,x的长度等于它跨过所有单元格的宽度+最后一个单元格里的长度,由dx制定
    y则是跨越单元格的高度的总和和最后一个单元格中的高度,由dy指定。

    点赞 评论 复制链接分享

相关推荐