首页 文章

Apache POI插入图像

提问于
浏览
11

我在制作excel表中插入图片时遇到了麻烦 . 关于这个问题有很多问题,但我根本无法弄清楚我做错了什么 . 我的代码运行,显示没有错误,但我没有看到插入的图像:(

这是代码:

InputStream is = new FileInputStream("nasuto_tlo.png");
    byte [] bytes = IOUtils.toByteArray(is); 
    int pictureIndex = wb.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);
    is.close();

    CreationHelper helper = wb.getCreationHelper();
    Drawing drawingPatriarch = sheet.createDrawingPatriarch();
    ClientAnchor anchor = helper.createClientAnchor();

    anchor.setCol1(2);
    anchor.setRow1(3);
    Picture pict = drawingPatriarch.createPicture(anchor, pictureIndex);
    pict.resize();

    try {
        FileOutputStream out = new FileOutputStream(root+"/Busotina/Busotina1.xls");
        wb.write(out);
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

1 回答

  • 16

    问题是你的锚不正确 . 您需要设置所有4个值,因为默认值为0 - 但您的第一列不能比第二列更正确;)您将获得负面范围 . 当您打开Excel文件已损坏时,您应该收到警告 .

    所以试试吧

    anchor.setCol1(2);
    anchor.setCol2(3);
    anchor.setRow1(3);
    anchor.setRow2(4);
    

    我写的一些代码的工作示例:

    // read the image to the stream
    final FileInputStream stream =
            new FileInputStream( imagePath );
    final CreationHelper helper = workbook.getCreationHelper();
    final Drawing drawing = sheet.createDrawingPatriarch();
    
    final ClientAnchor anchor = helper.createClientAnchor();
    anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );
    
    
    final int pictureIndex =
            workbook.addPicture(IOUtils.toByteArray(stream), Workbook.PICTURE_TYPE_PNG);
    
    
    anchor.setCol1( 0 );
    anchor.setRow1( LOGO_ROW ); // same row is okay
    anchor.setRow2( LOGO_ROW );
    anchor.setCol2( 1 );
    final Picture pict = drawing.createPicture( anchor, pictureIndex );
    pict.resize();
    

相关问题