Java 在Excel中添加水印

在Excel中没有直接添加水印的功能,但依旧可以通过一定方式来实现类似水印效果。本文通过Java程序代码介绍具体实现方法。

程序环境:

  • 测试文档:Office Excel 2013

  • 编译环境:IntelliJ IDEA 2018

  • JDK版本:1.8.0

  • Excel库:Java系列spire.xls.jar 3.9.1(本次测试使用免费版)

Java全部测试代码

import com.spire.xls.*; import java.awt.*; import java.awt.image.BufferedImage; import static java.awt.image.BufferedImage.TYPE_INT_ARGB;  public class TextWatermark {     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<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().setLeftHeaderImage(imgWtrmrk);             sheet.getPageSetup().setLeftHeader("&G");               //将显示模式设置为Layout             sheet.setViewMode(ViewMode.Layout);         }          //保存文档         wb.saveToFile("TextWatermark.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) / 2, ((int) height - liStrHeight) / 2);         loGraphic.dispose();         return img;     } }

水印效果如图:

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

来源:https://www.icode9.com/content-1-903351.html

(0)

相关推荐