Format Picture with Fill and Line using apache poi in Java

一曲冷凌霜 提交于 2020-01-24 21:56:07

问题


I am inserting image in excel using apache poi 3.15 its working file but I want to add border line to image which can be done by right click on image --> Format Picture --> Fill & Line --> Line --> Solid Line in MS Office searched a lot on SO and apache documentation but have no clue how to achieve this using poi. Following my code

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet,
        int row1, int row2, int col1, int col2, String fileName) {
    try {

        InputStream is = new FileInputStream(fileName);
        byte[] bytes = IOUtils.toByteArray(is);
        int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
        is.close();
        CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper();

        // Create the drawing patriarch. This is the top level container for
        // all shapes.
        Drawing drawing = sitePhotosSheet.createDrawingPatriarch();

        // add a picture shape
        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );


        // set top-left corner of the picture,
        // subsequent call of Picture#resize() will operate relative to it
        anchor.setCol1(col1);
        anchor.setCol2(col2);
        anchor.setRow1(row1);
        anchor.setRow2(row2);

        drawing.createPicture(anchor, pictureIdx);

    } catch(Exception e) {
    }
}

I am able to draw line around image using XSSFSimpleShape but it is not what I wanted exactly and also tried with setBorderXXX() but these borders or lines do not move with image as when set using MS Office. First image show what I am getting and second shows what I want


回答1:


This can be achieved by using XSSFPicture's setLineXXX() method as follows,

private void drawImageOnExcelSheetForGLOS(XSSFSheet sitePhotosSheet,
        int row1, int row2, int col1, int col2, String fileName) {
    try {

        InputStream is = new FileInputStream(fileName);
        byte[] bytes = IOUtils.toByteArray(is);
        int pictureIdx = sitePhotosSheet.getWorkbook().addPicture(bytes,Workbook.PICTURE_TYPE_JPEG);
        is.close();
        CreationHelper helper = sitePhotosSheet.getWorkbook().getCreationHelper();

        XSSFDrawing drawing = sitePhotosSheet.createDrawingPatriarch();

        ClientAnchor anchor = helper.createClientAnchor();
        anchor.setAnchorType( ClientAnchor.MOVE_AND_RESIZE );

        anchor.setCol1(col1);
        anchor.setCol2(col2);
        anchor.setRow1(row1);
        anchor.setRow2(row2);

        // setLineXXX() methods can be used to set line border to image
        XSSFPicture pic = drawing.createPicture(anchor, pictureIdx);
        // 0 indicates solid line
        pic.setLineStyle(0);
        // rgb color code for black line
        pic.setLineStyleColor(0, 0, 0);
        // double number for line width
        pic.setLineWidth(1.5);
    } catch(Exception e) {
        e.printStackTrace();
    }
}


来源:https://stackoverflow.com/questions/42248697/format-picture-with-fill-and-line-using-apache-poi-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!