在Java中使用apache poi格式化填充和线条图片
我插入图像在Excel中使用Apache poi 3.15其工作文件,但我想添加边框线,可以通过右键单击图像 – >格式图片 – >填充和线 – >线 – >固体在MS Office的线search了很多SO和Apache文档,但不知道如何使用poi实现这一点。 遵循我的代码
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) { } }
我能够使用XSSFSimpleShape绘制线条图像,但它不是我想要的,也尝试了setBorderXXX(),但是这些边框或线条不像图像一样使用MS Office设置。 第一张图片显示我所得到的,第二张显示我想要的
这可以通过使用XSSFPicture的setLineXXX()方法来实现,如下所示,
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(); } }