DnA*_*DnA 2 java excel apache-poi
我正在使用 apache poi 3.15 的工作文件在 Excel 中插入图像,但我想向图像添加边框线,可以通过右键单击图像 --> 设置图片格式 --> 填充和线条 --> 线条 --> 实线来完成MS Office 中的 Line在 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) {
}
}
Run Code Online (Sandbox Code Playgroud)
我可以使用 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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |