Java在Excel中添加水印的实现(单一水印、平铺水印)

网友投稿 279 2022-10-28


Java在Excel中添加水印的实现(单一水印、平铺水印)

在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果。本文通过java程序代码介绍具体实现方法。可添加单一水印效果,即水印是以单个文本字样来呈现;也可添加多个平铺水印效果,即水印是以多个文本字样来页面中平铺。详细内容见下文。

程序环境:

测试文档:Office Excel 2013

编译环境:IntelliJ IDEA 2018

JDK版本:1.8.0

Excel库:Java系列free spire.xls.jar 3.9.1

1.单一水印效果

import com.spire.xls.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import static java.awt.image.BufferedImage.TYPE_INT_ARGB;

public class SingleWatermark {

public static void main(String[] args) {

//加载Excel测试文档

Workbook wb = new Workbook();

wb.loadFromFile("test.xlsx");

//设置文本和字体大小

Font font = new Font("仿宋", Font.PLAIN, 40);

for (int i =0;i

{

Worksheet sheet = wb.getWorksheets().get(i);

//调用DrawText() 方法插入图片

BufferedImage imgWtrmrk = drawText("内部专用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

//将图片设置为页眉

sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);

sheet.getPageSetup().setCenterHeader("&G");

//将显示模式设置为Layout

sheet.setViewMode(ViewMode.Layout);

}

//保存文档

wb.saveToFile("SingleWatermark.xlsx", ExcelVersion.Version2013);

}

private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width)

{

//定义图片宽度和高度

BufferedImage img = new BufferedImage((int) width, (ineaMbDyt) height, TYPE_INT_ARGB);

Graphics2D loGraphic = img.createGraphics();

//获取文本size

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;

}

}

单一水印效果:

2.平铺水印效果

import com.spire.xls.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import static java.awt.image.BufferedImage.TYPE_INT_ARGB;

public class TiledWatermark {

public static void main(String[] args) {

//加载Excel测试文档

Workbook wb = new Workbook();

wb.loadFromFile("test.xlsx");

//设置文本和字体大小

Font font = new Font("仿宋", Font.PLAIN, 25);

for (int i =0;i

{

Worksheet sheet = wb.getWorksheets().get(i);

//调用DraweaMbDyText() 方法插入图片

BufferedImage imgWtrmrk = drawText("内部专用 内部专用 内部专用 内部专用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

//将图片设置为页眉

sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);

sheet.getPageSetup().setCenterHeader("&G");

//将显示模式设置为Layout

sheet.setViewMode(ViewMode.Layout);

}

//保存文档

wb.saveToFile("TiledWatermark.xlsx", ExcelVersion.Version2013);

}

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();

//获取文本size

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) /6 , ((int) height - liStrHeight) /6);

loGraphic.drawString(text,((int) width - liStrWidth) /3, ((int) height - liStrHeight) /3);

loGraphic.drawString(text,((int) width - liStrWidth) /2, ((int) height - liStrHeight) /2);

loGraphic.dispose();

return img;

}

}

平铺水印效果:

★ 需要注意的是:在添加完水印效果后,查看文档时,在“普通视图”水印不可见,需在“页面布局”模式或“打印预览”模式下查看。

{

Worksheet sheet = wb.getWorksheets().get(i);

//调用DrawText() 方法插入图片

BufferedImage imgWtrmrk = drawText("内部专用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

//将图片设置为页眉

sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);

sheet.getPageSetup().setCenterHeader("&G");

//将显示模式设置为Layout

sheet.setViewMode(ViewMode.Layout);

}

//保存文档

wb.saveToFile("SingleWatermark.xlsx", ExcelVersion.Version2013);

}

private static BufferedImage drawText (String text, Font font, Color textColor, Color backColor,double height, double width)

{

//定义图片宽度和高度

BufferedImage img = new BufferedImage((int) width, (ineaMbDyt) height, TYPE_INT_ARGB);

Graphics2D loGraphic = img.createGraphics();

//获取文本size

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;

}

}

单一水印效果:

2.平铺水印效果

import com.spire.xls.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import static java.awt.image.BufferedImage.TYPE_INT_ARGB;

public class TiledWatermark {

public static void main(String[] args) {

//加载Excel测试文档

Workbook wb = new Workbook();

wb.loadFromFile("test.xlsx");

//设置文本和字体大小

Font font = new Font("仿宋", Font.PLAIN, 25);

for (int i =0;i

{

Worksheet sheet = wb.getWorksheets().get(i);

//调用DraweaMbDyText() 方法插入图片

BufferedImage imgWtrmrk = drawText("内部专用 内部专用 内部专用 内部专用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

//将图片设置为页眉

sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);

sheet.getPageSetup().setCenterHeader("&G");

//将显示模式设置为Layout

sheet.setViewMode(ViewMode.Layout);

}

//保存文档

wb.saveToFile("TiledWatermark.xlsx", ExcelVersion.Version2013);

}

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();

//获取文本size

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) /6 , ((int) height - liStrHeight) /6);

loGraphic.drawString(text,((int) width - liStrWidth) /3, ((int) height - liStrHeight) /3);

loGraphic.drawString(text,((int) width - liStrWidth) /2, ((int) height - liStrHeight) /2);

loGraphic.dispose();

return img;

}

}

平铺水印效果:

★ 需要注意的是:在添加完水印效果后,查看文档时,在“普通视图”水印不可见,需在“页面布局”模式或“打印预览”模式下查看。

{

Worksheet sheet = wb.getWorksheets().get(i);

//调用DraweaMbDyText() 方法插入图片

BufferedImage imgWtrmrk = drawText("内部专用 内部专用 内部专用 内部专用", font, Color.pink, Color.white, sheet.getPageSetup().getPageHeight(), sheet.getPageSetup().getPageWidth());

//将图片设置为页眉

sheet.getPageSetup().setCenterHeaderImage(imgWtrmrk);

sheet.getPageSetup().setCenterHeader("&G");

//将显示模式设置为Layout

sheet.setViewMode(ViewMode.Layout);

}

//保存文档

wb.saveToFile("TiledWatermark.xlsx", ExcelVersion.Version2013);

}

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();

//获取文本size

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) /6 , ((int) height - liStrHeight) /6);

loGraphic.drawString(text,((int) width - liStrWidth) /3, ((int) height - liStrHeight) /3);

loGraphic.drawString(text,((int) width - liStrWidth) /2, ((int) height - liStrHeight) /2);

loGraphic.dispose();

return img;

}

}

平铺水印效果:

★ 需要注意的是:在添加完水印效果后,查看文档时,在“普通视图”水印不可见,需在“页面布局”模式或“打印预览”模式下查看。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SHELL DATE 命令详解
下一篇:ZABBIX3.0配置邮件报警
相关文章

 发表评论

暂时没有评论,来抢沙发吧~