本文通过Java程序代码介绍添加水印的方法。可添加单一水印效果,即水印是以单个文本字样来呈现;也可添加多个平铺水印效果,即水印是以多个文本字样来页面中平铺。本文着重介绍第二种,添加平铺水印。

程序环境:

  •   测试文档:Office Excel 2013

  •   编译环境:IntelliJ IDEA 2018

  •   JDK版本:1.8.0

  •   Excel Jar 包:free spire.xls.jar 3.9.1

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<wb.getWorksheets().getCount();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("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;
     }
 }

多行水印效果:

Java 给Excel添加多行文本水印_Java