-
java导出excel水印_java实现导出带有水印的excel
2021-03-15 20:29:14java导出带有水印的excel起因实现思路代码实现思考起因最近接到了一个比较恶心的需求,要求在导出的excel中增加水印,并且要求必须是要excel,因为他们要对excel中的数据做操作(既然要操作那水印同样可以删掉,完全...java导出带有水印的excel
起因
实现思路
代码实现
思考
起因
最近接到了一个比较恶心的需求,要求在导出的excel中增加水印,并且要求必须是要excel,因为他们要对excel中的数据做操作(既然要操作那水印同样可以删掉,完全是没有用的需求,但是无奈技术做不了主,只能硬着头皮干了)
实现思路
完全没有思路,根本没有相关api,于是百度、谷歌、github查个遍,最有定了方案。
方案有两种:
先弄好有水印的空excel,然后再往这个excel中写入数据。但是业务要求每个人的水印不同,所以此方案不合适。
动态生成水印图片在画到生成的excel中。可以满足业务要求,最终决定用此方式。
代码实现
实现很简单,就是先通过createWaterMark方法生成水印图片,在将图片画到所有的sheet中,具体实现如下:
public class ExcelWaterRemarkUtil {
public static void painWaterMark(Workbook wb,String content) throws IOException {
String imgFileName = "waterMark_photo_"+content+".png";
createWaterMark(content,imgFileName);
int sheetSize = wb.getNumberOfSheets();
for(int i=0;i
思考
这个方法每次都会生成新的水印图片,其实每个人的水印图片是不会变的,所有可以将水印图片放到某个目录下,每次生成前看看以后没有对应人员的水印图片,有就拿来用,没有就重新生成(也可是其他维度不一定是人员维度,主要是找到不变的元素)。和我们的缓存的想法很像。
-
java excel 水印_Java 添加Excel水印
2021-02-26 12:31:34前言Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只有在打印预览或视图模式为“页面视图”下才能...前言
Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只有在打印预览或视图模式为“页面视图”下才能直观可见。
通常情况下,水印分为文本水印和图片水印。本文将介绍如何使用Java程序来将文本以图片形式添加到Excel中,最终呈现文本水印的效果。
Jar包获取及导入方法
其一: 在官网上下载Free Spire.XLS for Java产品包,解压后将lib文件夹下的Spire.Xls.jar手动导入IDEA。
其二(推荐使用):通过Maven仓库安装导入产品及依赖。创建一个Maven项目,在pom.xml文件中输入以下代码,然后点击“Import Changes”即可。
com.e-iceblue
http://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.xls.free
2.2.0
最终导入效果如下图所示:
代码示例import com.spire.xls.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
public class AddWatermark {
public static void main(String[] args) {
//加载示例文档
Workbook workbook = new Workbook();
workbook.loadFromFile("C:UsersTest1DesktopSample.xlsx");
//设置水印文字和字体
Font font = new Font("仿宋", Font.PLAIN, 40);
String watermark = "内部专用";
//在页眉中插入图片作为模拟水印
for (Worksheet sheet : (Iterable) workbook.getWorksheets()) {
//调用DrawText() 方法创建图片
BufferedImage imgWtrmrk = drawText(watermark, font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());
//插入图片作为LeftHeaderImage
sheet.getPageSetup().setLeftHeaderImage(imgWtrmrk);
sheet.getPageSetup().setLeftHeader("&G");
//设置视图模式,页眉水印仅在Layout模式下直观可见
sheet.setViewMode(ViewMode.Layout);
}
//保存文档
workbook.saveToFile("output/AddWatermark.xlsx", ExcelVersion.Version2010);
}
private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width)
{
//将用来作为水印的文本返回为图片并设置其展示样式
BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);//定义图片宽度和高度
Graphics2D loGraphic = img.createGraphics();
//获取文本大小
FontMetrics loFontMetrics = loGraphic.getFontMetrics(font);
int liStrWidth = loFontMetrics.stringWidth(text);
int liStrHeight = loFontMetrics.getHeight();
//文本显示样式及位置
loGraphic.setColor(backColor);
loGraphic.fillRect(0, 0, (int) width, (int) height);
loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);
loGraphic.rotate(Math.toRadians(-45));
loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2);
loGraphic.setFont(font);
loGraphic.setColor(textColor);
loGraphic.drawString(text, ((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2);
loGraphic.dispose();
return img;
}
}
添加效果
(本文完)
-
java操作excel实现水印图片
2017-05-05 11:22:45java操作excel实现水印图片 -
aspose.cell for java 去水印_Java 添加Excel水印
2020-12-26 15:38:25前言Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只有在打印预览或视图模式为“页面视图”下才能...前言
Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只有在打印预览或视图模式为“页面视图”下才能直观可见。
通常情况下,水印分为文本水印和图片水印。本文将介绍如何使用Java程序来将文本以图片形式添加到Excel中,最终呈现文本水印的效果。
Jar包获取及导入方法
其一: 在E-iceblue中文官网上下载Free Spire.XLS for Java产品包,解压后将lib文件夹下的Spire.Xls.jar手动导入IDEA。
其二(推荐使用):通过Maven仓库安装导入产品及依赖。创建一个Maven项目,在pom.xml文件中输入以下代码,然后点击“Import Changes”即可。
com.e-icebluehttp://repo.e-iceblue.cn/repository/maven-public/e-iceblue spire.xls.free 2.2.0
最终导入效果如下图所示:
代码示例
import com.spire.xls.*;import java.awt.*;import java.awt.image.BufferedImage;import static java.awt.image.BufferedImage.TYPE_INT_ARGB;public class AddWatermark { public static void main(String[] args) { //加载示例文档 Workbook workbook = new Workbook(); workbook.loadFromFile("C:甥敳獲Test1DesktopSample.xlsx"); //设置水印文字和字体 Font font = new Font("仿宋", Font.PLAIN, 40); String watermark = "内部专用"; //在页眉中插入图片作为模拟水印 for (Worksheet sheet : (Iterable) workbook.getWorksheets()) { //调用DrawText() 方法创建图片 BufferedImage imgWtrmrk = drawText(watermark, font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth()); //插入图片作为LeftHeaderImage sheet.getPageSetup().setLeftHeaderImage(imgWtrmrk); sheet.getPageSetup().setLeftHeader("&G"); //设置视图模式,页眉水印仅在Layout模式下直观可见 sheet.setViewMode(ViewMode.Layout); } //保存文档 workbook.saveToFile("output/AddWatermark.xlsx", ExcelVersion.Version2010); } private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width) { //将用来作为水印的文本返回为图片并设置其展示样式 BufferedImage img = new BufferedImage((int) width, (int) height, TYPE_INT_ARGB);//定义图片宽度和高度 Graphics2D loGraphic = img.createGraphics(); //获取文本大小 FontMetrics loFontMetrics = loGraphic.getFontMetrics(font); int liStrWidth = loFontMetrics.stringWidth(text); int liStrHeight = loFontMetrics.getHeight(); //文本显示样式及位置 loGraphic.setColor(backColor); loGraphic.fillRect(0, 0, (int) width, (int) height); loGraphic.translate(((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2); loGraphic.rotate(Math.toRadians(-45)); loGraphic.translate(-((int) width - liStrWidth) / 2, -((int) height - liStrHeight) / 2); loGraphic.setFont(font); loGraphic.setColor(textColor); loGraphic.drawString(text, ((int) width - liStrWidth) / 2, ((int) height - liStrHeight) / 2); loGraphic.dispose(); return img; }}
添加效果
(本文完)
-
java操作excel实现图片水印
2017-05-05 11:19:14java操作excel实现图片水印是不可能实现的 不过可以先添加背景图,再在背景图上填写代码 模板一:只有背景图 模板二:只有数据 模板三:二者合并下载链接:http://download.csdn.net/detail/u012102536/9834232
java操作excel实现图片水印是不可能实现的 不过可以先添加背景图,再在背景图上填写代码
模板一:只有背景图
模板二:只有数据
模板三:二者合并
代码的一部分:
package com.ekingstar.zcgl.bean.waterPrint;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class copy2 {
public static void main(String[] args) throws Exception {
File file = new File("d:\\CW_JFKZXSJ.xls");
String[][] result = getData(file, 1);
int rowLength = result.length;
for(int i=0;i<rowLength;i++) {
for(int j=0;j<result[i].length;j++) {
System.out.print(result[i][j]+"\t\t");
}
System.out.println();
}
}
/**
* 读取Excel的内容,第一维数组存储的是一行中格列的值,二维数组存储的是多少个行
* @param file 读取数据的源Excel
* @param ignoreRows 读取数据忽略的行数,比喻行头不需要读入 忽略的行数为1
* @return 读出的Excel中数据的内容
* @throws FileNotFoundException
* @throws IOException
*/
public static String[][] getData(File file, int ignoreRows)
throws FileNotFoundException, IOException {
List<String[]> result = new ArrayList<String[]>();
int rowSize = 0;
BufferedInputStream in = new BufferedInputStream(new FileInputStream(
file));
// 打开HSSFWorkbook
POIFSFileSystem fs = new POIFSFileSystem(in);
HSSFWorkbook wb = new HSSFWorkbook(fs);
String filename0="d://test99.xls";
HSSFWorkbook wb1 = new HSSFWorkbook(new FileInputStream(new File(filename0)));
HSSFCell cell = null;
for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
HSSFSheet st = wb.getSheetAt(sheetIndex);
HSSFSheet st1 = wb1.getSheetAt(sheetIndex);
// 第一行为标题,不取
for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
HSSFRow row = st.getRow(rowIndex);
HSSFRow row1 = st1.getRow(rowIndex);
if (row == null) {
continue;
}
int tempRowSize = row.getLastCellNum() + 1;
if (tempRowSize > rowSize) {
rowSize = tempRowSize;
}
String[] values = new String[rowSize];
Arrays.fill(values, "");
boolean hasValue = false;
for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
String value = "";
cell = row.getCell(columnIndex);
if (cell != null) {
// 注意:一定要设成这个,否则可能会出现乱码
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
Date date = cell.getDateCellValue();
if (date != null) {
value = new SimpleDateFormat("yyyy-MM-dd")
.format(date);
} else {
value = "";
}
} else {
value = new DecimalFormat("0").format(cell
.getNumericCellValue());
}
break;
case HSSFCell.CELL_TYPE_FORMULA:
// 导入时如果为公式生成的数据则无值
if (!cell.getStringCellValue().equals("")) {
value = cell.getStringCellValue();
} else {
value = cell.getNumericCellValue() + "";
}
。。。。。。请下载我的资源 就一个java文件
-
java ofd文件怎么添加水印_Java 添加Excel水印
2021-01-30 22:31:48前言Microsoft Excel没有直接的方法内置水印在Excel工作表中,我们可通过添加页眉页脚功能,将图片或文字加到Excel文档内容背后,实现类似水印的效果。但是该类水印只有在打印预览或视图模式为“页面视图”下才能... -
java实现动态水印.zip
2020-06-23 16:34:46主要用于实现excel下载时添加动态水印功能,附件包含了添加水印的核心方法和所需jar包,jar包是修改过源码后可用的jar包 -
java excel 水印_Java下载文件加文字水印(Excel、PDF、图片)
2021-02-27 19:41:55一、导出Excel加文字水印方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出。比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加水印)我是在原有导出的方法上... -
java实现导出带有水印的excel
2020-06-16 11:39:54java导出带有水印的excel起因实现思路代码实现思考 起因 最近接到了一个比较恶心的需求,要求在导出的excel中增加水印,并且要求必须是要excel,因为他们要对excel中的数据做操作(既然要操作那水印同样可以删掉,... -
java导出excel加水印且加密(已实现)
2021-01-18 15:55:02水印是以图片形式加在excel上的,介意的不需要往下看了. 加密是真正的加密. 水印效果图: 密码效果图: 废话不多说,直接上代码: package com.cpic.excelWater; import org.apache.poi.hssf.usermodel.HSSFWorkbook;... -
接上一篇:Java实现导出Excel并附带水印
2020-10-12 19:37:29上篇介绍了Java使用poi操作excel表格的导入和修改,在日常开发中经常也会遇到在页面上点击按钮将数据库中的数据导出到excel表中; 今天我就遇到这么一个需求:根据条件将查询到的数据导出到Excel表格中要支持xls/... -
Java 在Excel中添加水印
2021-03-23 14:53:40在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果。本文通过Java程序代码介绍具体实现方法。 程序环境: 测试文档:Office Excel 2013 编译环境:IntelliJ IDEA 2018 JDK版本:1.8.0... -
java POI为excel添加水印
2020-05-06 14:38:19网络上充斥着各种为excel添加水印的方法,但是多数效果不敢恭维,这里介绍两种添加excel水印的方法,最终实现的效果跟excel工具添加的水印无异,个人比较喜欢比较推荐。 这里说是两种,其实原理是一种,只不过因为... -
java poi excel无法添加水印替代方法
2020-01-30 14:41:13提供一种可行办法就是预留一份现成的带有水印的excel模板,以模板创建workbook,再向其添加内容,这样即可实现导出带有水印的excel,需要注意的是poi版本不能太老,太老的不支持此操作。 代码试例如下: @Web... -
java jxl 添加水印 修改编译版
2017-09-28 17:48:03java jxl 添加水印 修改编译版,实现excel水印必备 java jxl 添加水印 修改编译版,实现excel水印必备 -
JAVA POI导出Excel文件并添加水印
2021-03-01 10:32:28本文将介绍导出的excel文件增加水印和jsp页面增加水印两种 本文参考https://www.cnblogs.com/liuyu666/p/13282864.html;https://gitee.com/guo492273770/POIexcel/blob/master/src/ExcelWaterRemarkUtils.java ... -
java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
2021-03-16 04:13:39一、导出Excel加文字水印方法:通过实现准备一个带有水印的Excel文件,然后将数据覆盖该文件然后输出。比如我准备了如下的一个带水印的模板,我起名为water.xlsx(网上有如何给Excel加水印)我是在原有导出的方法上... -
java实现word转pdf无水印,水印自定义
2020-01-15 11:12:59在网上也是找了好久才找到的一些比较好的资料,我自己整理了一下,方便后面...这里还有有excel的包,有没有很开心啊,当然我还有excel转pdf的博客,不用你到处找啦。如果对你有用点个赞!欧耶 直接上源码 import... -
JAVA实现word doc docx pdf excel的在线浏览 - 仿百度文库 源码
2019-09-22 00:36:33我们具体实现思路是这样的 首先下载并安装openoffice和swftools openoffice下载地址:http://www.openoffice.org/download/index.html swftools下载地址:http://www.swftools.org/download.html 本源码下载地址:... -
java项目实战:处理图片水印,提取图片信息,生成excel表
2018-06-24 10:50:17,具体要求就是:从给出的带水印的图片中提取出企业名称和企业注册号,并根据这些信息生成excel表格。 刚刚开始以为这个要求挺难实现的,图片识别好像是很高深的技术啊。但是认真做起来从开工到完成也没花多少时间... -
JAVA:Excel文档转无水印PDF文档
2021-02-23 17:32:46我这里用的是Aspose的jar包,因为它是收费的所以不交钱会有水印,需要自己破解一下。破解用到的文件就是下载中的xml文件。 实现 将文件放到下图所示文件。 package com.demo.demo.controller; import ... -
java实现提取图片文字信息并生成表格
2018-06-24 11:16:19对图片进行水印处理,利用TESS4J识别图片并提取信息生成excel表格。里面有字库文件所以占用空间较大。 说明:https://blog.csdn.net/xlantian/article/details/80789115 -
Java使用aspose实现其他格式转PDF
2021-03-18 16:58:42Java使用aspose实现其他格式转PDF 文件转换格式 openOffice免费 下载软件 aspose收费 试用有水印 我用的破解版aspose 记录一下 maven仓库上是没有的,需要自己手动导入jar包 aspose-word:对应word aspose-cells:... -
分享28个java常用的工具类源码打包下载
2013-07-20 12:21:5228个java常用的工具类源码打包下载包括了(Java实现添加水印,文件上传,生成略缩图,文件操作,Md5加密码,时间日期操作、字符串操作,过滤器,数据导出Excel等实用功能) -
EasyExcel导出添加水印(设置背景,非插入图片的方式)
2021-04-09 20:36:59本文添加水印通过java生成图片,设置为excel背景图片实现。不仅仅局限于EasyExcel,凡是采用POI实现都可以采用该方案,但唯一的局限在于必须使用POI中的XSSFWorkbook对象,也就是对应Excel2007的版本,扩展名是.xlsx...