java利用poi为excel添加图片水印,还没研究文字水印的。。

所需jar包:poi-3.17.jar, poi-ooxml-3.17.jar, ooxml-schemas-1.3.jar,commons-collections4-4.1.jar,xmlbeans-2.6.0.jar,
Spire.Office.jar或Spire.Xls.jar(这两得在这下载 https://www.e-iceblue.cn/)
其他jar包可在这里下载:https://mvnrepository.com/
或者要送我分也行,嘿嘿:excel水印jar包.rar

代码

import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;import javax.imageio.ImageIO;import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ExcelWaterMarkUtil {/*** excel文件添加图片水印* @param srcPath 输入的文件路径* @param destPath 输出的文件路径* @param imagePath 水印图片的路径* @throws Exception*/public static void addWaterMark(String srcPath, String destPath, String imagePath) throws Exception {//若excel文件扩展名是xls(Excel2003及以前的版本),转换为xlsx(Excel2007及以后的版本)//HSSFWorkbook用于xls,XSSFWorkbook用于xlsxif (srcPath.endsWith("xls")) {//workbook = new HSSFWorkbook(new FileInputStream(srcPath));//存放转换后的文件的路径String tempPath = srcPath.substring(0, srcPath.lastIndexOf(File.separator)) + File.separator + "tempFile" + File.separator + srcPath.substring(srcPath.lastIndexOf(File.separator)+1);tempPath += "x";//xls改为xlsxdestPath += "x";//xls转换为xlsxExcelUtil.xlsToXlsx(srcPath, tempPath);srcPath = tempPath;}Workbook workbook = new XSSFWorkbook(new FileInputStream(srcPath));//加载水印图片BufferedImage image = ImageIO.read(new FileInputStream(imagePath));//导出到字节流ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(image, "png", os);int pictureIdx = workbook.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);POIXMLDocumentPart poixmlDocumentPart = (POIXMLDocumentPart) workbook.getAllPictures().get(pictureIdx);int sheetsNum = workbook.getNumberOfSheets();for (int i=0; i<sheetsNum; i++) {XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(i);if (sheet == null) {continue;}//poi-3.17String rID = sheet.addRelation(null, XSSFRelation.IMAGES, poixmlDocumentPart).getRelationship().getId();//poi-3.9/*String rID = sheet.getPackagePart().addRelationship(poixmlDocumentPart.getPackagePart().getPartName(), TargetMode.INTERNAL, XSSFRelation.IMAGES.getRelation(), null).getId();*/sheet.getCTWorksheet().addNewPicture().setId(rID);}workbook.write(new FileOutputStream(destPath));//poi-3.17if (workbook != null)workbook.close();if (os != null)os.close();}public static void main(String[] args) throws Exception {addWaterMark("E:\\测试.xls", "E:\\测试水印.xls", "E:\\waterMark.png");addWaterMark("E:\\测试.xlsx", "E:\\测试水印2.xlsx", "E:\\waterMark.png");}
}

xls转换为xlsx得工具类

import com.spire.xls.FileFormat;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;public class ExcelUtil {/*** 将xls的表复制到新建的xlsx文档,实现xls转换为xlsx* @param srcPath* @param destPath* @throws Exception*/public static void xlsToXlsx (String srcPath, String destPath) throws Exception {//新建空文档,用于复制Workbook destWorkbook = new Workbook();//加载原文档Workbook srcWorkbook = new Workbook();srcWorkbook.loadFromFile(srcPath);//原文档表数int count = srcWorkbook.getWorksheets().size();for (int i=0; i<count; i++) {//获取原文档第 i 张表Worksheet srcSheet = srcWorkbook.getWorksheets().get(i);//获取空文档第 i 张表,若没有则自动添加,Worksheet destSheet = destWorkbook.getWorksheets().get(i);//表名与原文档的表名保持一致destSheet.setName(srcSheet.getName());/*if (i > 0) {//添加新的工作表destSheet = destWorkbook.getWorksheets().add(srcSheet.getName());}*///复制destSheet.copyFrom(srcSheet);}//保存文档destWorkbook.saveToFile(destPath, FileFormat.Version2010);}public static void main(String[] args) throws Exception {xlsToXlsx("E:\\测试.xls", "E:\\测试.xlsx");}
}

java利用poi为excel添加图片水印相关推荐

  1. java利用poi导出excel功能-附带图片导出

    java利用poi导出excel功能-附带图片导出 写在前面 最近刚离职,闲来无事,于是把上两家公司都有碰到过的需求但都没有去研究实现:即导出带图片的excel报表.于是就折腾了一下这个功能,研究出来 ...

  2. java利用poi实现Excel考勤报表的输出

    java利用poi实现Excel考勤报表的输出 实现效果 SXSSFWorkbook超大数据导出 标题.表头.内容有样式 可以多个sheet(满65535行数据换新的sheet) 一度为快 maven ...

  3. java实现给PDF文件添加图片水印,java实现给PDF文件添加文字水印

    接上一篇,pdf跟tif 是一起做的 java实现 1.给PDF文件添加图片水印: public static void waterMark1(String inputFile,String outp ...

  4. Java 利用POI处理Excel的时间格式

    问题: 用Java的POI处理Excel中的时间单元格,往往得到的格式不是我们想要的.比如: 按上图中方式设置好后,通过以下代码 XSSFRow row = sheet.getRow(0);Cell ...

  5. Java向word文档添加图片水印

    前言: 水印可以说是一个标识,有时我们希望向文档中插入公司名称作为水印,或者将公司logo插入到文档中作为水印.先来看看本地word文档如何插水印吧! 然后选择图片水印选择图片添加即可. 那么想要通过 ...

  6. Java使用POi导出Excel(包含图片)

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  7. Java 利用poi给word添加页眉页脚,页眉左边为公司logo图片,右为公司全称,页脚左为公司地址,右为页码总页数

    参考链接: http://www.it1352.com/219785.html 1. 生成带公司logo的页眉 public void createHeader(XWPFDocument doc, S ...

  8. Java利用POI生成Excel强制换行

    前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行.  于是我在网上找 ...

  9. java 利用POI 读取Excel数据的真实有效行数

    前言 最近发现java导入excel数据时,我的excel数据明明只有4条数据,可是java程序却读取到了第6行.检查代码发现5.6行不小心设置了行高,导致poi的getLastRowNum()方法读 ...

  10. java利用poi生成excel如何自动换行

    1.首先设置单元格内容自动换行 // 生成一个样式,用于设置内容样式 HSSFWorkbook workbook = new HSSFWorkbook(); HSSFCellStyle cellSty ...

最新文章

  1. Python中单元测试出错了,会怎么样?
  2. C# 连接Oracle数据库以及一些简单的操作
  3. wordpress 外部数据接口_使用接口方式获取WordPress用户信息的方法
  4. 大模型炼丹无从下手?谷歌、OpenAI烧了几百万刀,总结出这些方法论…
  5. 刚刚,百度和小米宣布在一起,我还以为是谁收购了谁
  6. java中的控制执行流程
  7. sentaurus学习笔记(一)器件仿真
  8. java实现一个旅游网站
  9. 学习笔记(1):机器学习数学基础之凸优化视频教学-(1.2)机器学习中的优化问题及实例...
  10. 计算机的k代表什么意思,电脑CPU后缀K、U、HQ、M分别代表什么你清楚吗?
  11. mysql运算符xor_MySql运算符
  12. matlab表格数据输入方式,matlab输入excel表格数据-matlab怎么把数据写入excel
  13. 深度学习平台——Paddle核心框架介绍
  14. UI设计中的排版设计技巧
  15. 【QT 5 学习笔记-学习绘图相关+画线图形等+绘图事件+基础学习(1)】
  16. ios代码混淆-字符串加密的优点和其他破解方法
  17. 什么是「逼格」?怎么才能提高「逼格」?
  18. 232层3D闪存芯片来了:单片容量2TB,传输速度提高50%
  19. ubuntu14.04+cuda6.5+opencv2.4.9+cuda-convnet2配置
  20. 手把手教您搭建 AWS 大数据云平台

热门文章

  1. LED字体下载,可视化大屏,数据可视化必备
  2. python 通达信公式函数,python使用通达信公式,请人用python编写如下公式,我对编程一窍不通...
  3. 2021年最值得推荐的10款数据可视化工具,看完我收藏了
  4. android基于xposed框架,基于Xposed框架的模块:Android EagleEye
  5. 论文解读:MOEA/D with Adaptive Weight Adjustment
  6. 长焦拍照对比:小米10至尊纪念版和一加8 Pro、vivo X50 Pro+~~~~
  7. TopFormer 新的语义分割Transformer 结构
  8. malloc函数java_malloc函数详解及用法举例
  9. ppt大赛优秀作品计算机,ppt大赛获奖作品展示.ppt
  10. java计算机毕业设计家教到家平台源码+mysql数据库+系统+lw文档+部署