您现在的位置是:首页 > 文章详情

Java 在Excel里面加水印 单一水印 以及 平铺水印

日期:2021-04-21点击:483

程序环境:

  • 测试文档:Office Excel 2013
  • 编译环境:IntelliJ IDEA 2018
  • JDK版本:1.8.0
  • Excel库:Java系列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; //java项目www.fhadmin.org 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<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("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, (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;     } }

单一水印效果:

2.平铺水印效果

import com.spire.xls.*; import java.awt.*; import java.awt.image.BufferedImage; import static java.awt.image.BufferedImage.TYPE_INT_ARGB; //java项目www.fhadmin.org 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;     } }

平铺水印效果:


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


原文链接:https://blog.51cto.com/u_14622073/2721560
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章