/** * 在excel单元格中插入图片,一个单元格显示一张图片 */ private static void drawImage(XSSFWorkbook wb, XSSFSheet sheet, int curRowIdx, int curCol, XSSFRow row, JSONArray jsonArray){ jsonArray = null == jsonArray? new JSONArray() : jsonArray; for(int a = 0; a < jsonArray.size(); a ++) { int idxColScreenShot = curCol; String imageUrl = jsonArray.getString(a); byte[] data = getImageData(imageUrl); if(null != data) { XSSFDrawing drawingPatriarch = sheet.createDrawingPatriarch(); //一个单元格插入一张图片,图片与单元格边框留5格像素的距离 XSSFClientAnchor anchor = new XSSFClientAnchor(XSSFShape.EMU_PER_PIXEL * 5, XSSFShape.EMU_PER_PIXEL * 5, XSSFShape.EMU_PER_PIXEL * (-5), XSSFShape.EMU_PER_PIXEL * (-5), (short)idxColScreenShot + a, curRowIdx, (short) idxColScreenShot + a+1, curRowIdx+1); anchor.setAnchorType(AnchorType.MOVE_AND_RESIZE); drawingPatriarch.createPicture(anchor, wb.addPicture(data, XSSFWorkbook.PICTURE_TYPE_PNG)); } else { //图片已经不存在时这样处理? genNormalCell(wb, row, idxColScreenShot + a, "NOT FOUND: "+jsonArray.getString(a)); } sheet.setColumnWidth(idxColScreenShot + a, 6750); } if(jsonArray.size() > 0) { row.setHeight((short)5550); } } private static XSSFCell genNormalCell(XSSFWorkbook wb, XSSFRow titleRow, int columnIdx, String cellValue){ XSSFCell cell = titleRow.createCell(columnIdx); cell.setCellValue(new XSSFRichTextString(StringUtils.isBlank(cellValue)?"":cellValue)); XSSFCellStyle style = getWhiteBgSytle(wb); cell.setCellStyle(style); return cell; } private static XSSFCellStyle getWhiteBgSytle (XSSFWorkbook xworkbook) { //设置样式 XSSFCellStyle style = genBaseStyle(xworkbook, new XSSFColor(new Color(255,255,255)), new XSSFColor(new Color(242,242,242))); //设置字体 XSSFFont font = genFontStyle(xworkbook); font.setFontHeightInPoints((short) 11); font.setFontName("微软雅黑 Light"); style.setFont(font); return style; } private static XSSFCellStyle genBaseStyle(XSSFWorkbook xworkbook, XSSFColor bgColor, XSSFColor borderColor) { //设置样式 XSSFCellStyle style = xworkbook.createCellStyle(); //设置填充方案 style.setFillPattern(FillPatternType.SOLID_FOREGROUND); //设置自定义填充颜色 if(null != bgColor) { style.setFillForegroundColor(bgColor); } //设置一个细边框 if(null != borderColor) { style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); style.setBorderColor(BorderSide.TOP, borderColor); style.setBorderColor(BorderSide.BOTTOM, borderColor); style.setBorderColor(BorderSide.LEFT, borderColor); style.setBorderColor(BorderSide.RIGHT, borderColor); } //启动单元格内换行 style.setWrapText(true); style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中 return style; } /** * 将本地图片/图片url链接,转化成byte[] * @param filePath * @return */ public static byte[] getImageData(String filePath){ if(!checkImageContain(filePath)){ return null; } ByteArrayOutputStream baos = new ByteArrayOutputStream(); InputStream inStream = null; try { String tmpStr = filePath.toUpperCase(); if(tmpStr.startsWith("HTTP://") || tmpStr.startsWith("HTTPS://") || tmpStr.startsWith("//")) { //但给的图片地址是url时 URL httpUrl = new URL(filePath); HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5 * 1000); try { inStream = conn.getInputStream();//通过输入流获取图片数据 if (null == inStream) { return null; } } catch (FileNotFoundException e) { log.error("getImageData({}) : ", filePath, e); return null; } //从输入流中获取数据 byte[] buffer = new byte[1024]; int len = 0; while( (len=inStream.read(buffer)) != -1 ){ baos.write(buffer, 0, len); } byte[] data = baos.toByteArray(); return data; } else { BufferedImage bufferedImage = ImageIO.read(new File(filePath)); String suffix = getSuffix(filePath); suffix = null == suffix? "png":suffix; ImageIO.write(bufferedImage, suffix, baos); byte[] data = baos.toByteArray(); return data; } } catch (Exception e) { log.error("getImageData({}) : ", filePath, e); } finally { try { if(null != inStream) { inStream.close(); } baos.close(); } catch (Exception e) { log.error("getImageData({}) fail to close(): ", filePath, e); } } return null; }
相关推荐
在本文中,我们将深入探讨如何使用POI库向Excel工作簿中插入图片。这将涵盖相关的API,步骤以及一些实用技巧。 首先,我们需要理解Excel的内部结构。在Excel文件中,图片是以OLE对象的形式存储的。POI提供了...
总结起来,Java实现Excel中插入图片的核心步骤包括:导入Apache POI库,创建并操作工作簿和工作表,读取和创建图片对象,创建绘图工作表,设置图片位置,最后保存工作簿。在实际开发中,可能还需要处理图片格式转换...
在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...
本篇文章将详细介绍如何利用Java和Apache POI库向Excel工作表中插入图片。 首先,我们需要理解Apache POI的工作原理。POI提供了一个名为HSSFPatriarch的类,它是Excel中的图形绘制容器,可以用于插入图片。对于....
在这个场景中,我们关注的是如何使用POI来创建一个功能丰富的Excel导出工具类,它能够自动设置标题、列名、文件名,并且支持插入图片以及合并单元格。下面将详细介绍这些功能的实现。 首先,要创建一个Excel工作簿...
POI 还支持更复杂的功能,如合并单元格、插入图片、应用公式、处理图表等。例如,你可以使用 `setCellStyle()` 为单元格设置样式,`setFormula()` 设置公式。 在学习和实践中,可以基于这个小例子不断扩展,了解并...
总结来说,Apache POI提供了一个强大的接口,让我们能够方便地在Java环境中创建和编辑PowerPoint文件,包括插入图片。通过熟练掌握POI库的使用,我们可以构建高效、灵活的PPT生成和编辑工具,满足各种业务需求。
Apache POI是一个流行的Java库,用于读取、创建和修改Microsoft Office格式的文件,特别是Excel工作簿。在本文中,我们将深入探讨如何使用POI库将图片插入到Excel文档中,以便创建包含图像的丰富报告。 首先,让...
6. **图表和图片**:可以创建和修改Excel中的图表,插入图片到工作表中。 7. **高级功能**:如条件格式、数据验证、合并单元格等。 在实际使用中,Java开发者首先需要将对应的JAR包添加到项目的类路径中,然后就...
在这个"利用POI解析excel并存入数据库demo"中,我们将关注如何使用 POI 库来读取 Excel 文件,并将数据有效地存入 MySQL 数据库。 首先,要开始使用 POI,你需要在你的项目中引入相应的依赖。如果你使用的是 Maven...
3. **插入图片**:加载Excel工作簿后,你可以使用Sheet对象的createDrawingPatriarch()方法创建一个绘图父元素,这是在Excel工作表上添加图形的起点。接下来,使用ClientAnchor类来定位和设置图片的大小,并使用...
在POI-3.9版本中,你还可以使用高级特性,如图表、图片插入、公式计算等。不过要注意,这个版本相对较旧,可能不支持Apache POI的最新功能。对于新项目,通常建议使用较新的版本,以获取更好的性能和更多的功能支持...
在实际开发中,你可能还需要处理更复杂的情况,比如合并单元格、插入图片、读取数据验证规则等。Apache POI提供了一系列的API来处理这些功能。因此,熟练掌握Java POI库对于进行Java与Excel交互的开发者来说是至关...
Java POI是一个强大的库,主要用于处理Microsoft Office格式的文件,如Word、Excel和PowerPoint。在本示例中,我们将探讨如何使用POI进行一系列操作,包括将Word文档转换为HTML,以及从数据库导出数据到Excel。 1. ...
以上代码示例涵盖了读取Excel内容、创建新的Excel文件、向Excel中插入文字以及插入图片的基本操作。请注意替换代码中的文件路径以匹配你的实际文件位置。通过这些基本操作,你可以根据需求构建更复杂的Excel处理逻辑...
2. **读取模板**:在Java代码中,你需要使用POI的XSSFWorkbook类打开模板文件。通过`OPCPackage.openExisting()`方法读取模板文件,然后使用`WorkbookFactory.create()`方法创建一个Workbook对象。 3. **数据准备**...
Java中的Apache POI库是一个强大的工具,专门用于处理Microsoft Office格式的文件,如Excel和Word。在本场景中,我们关注的是如何利用POI来生成Excel报表以及处理Word文档。 一、Java POI与Excel报表生成 1. 创建...
例如,你可以使用`FormulaEvaluator`来评估单元格中的公式,或者使用`ClientAnchor`和`Drawing`接口来插入图片。 总之,Java POI为Java开发者提供了强大的工具来处理Excel文件。无论是简单的数据交换还是复杂的报告...
在Java中,使用POI库可以方便地创建、修改和处理Excel文档,无论是.xls(BIFF8格式,Excel 97-2003)还是.xlsx(Office Open XML格式,Excel 2007及以上版本)。 首先,我们需要导入对应的POI库。在描述中提到"包含...
8. **图表和图像**: 可以创建和编辑Excel中的图表,也可以插入图片到工作表中。 9. **事件模型**: 使用事件模型可以高效地处理大量数据,而不需要一次性加载整个工作簿到内存。 10. **高级功能**: 包括合并单元格...