Chinaunix首页 | 论坛 | 博客
  • 博客访问: 545908
  • 博文数量: 298
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3077
  • 用 户 组: 普通用户
  • 注册时间: 2019-06-17 10:57
文章分类

全部博文(298)

文章存档

2022年(96)

2021年(201)

2019年(1)

我的朋友

分类: Java

2021-04-21 10:30:41


程序环境:

  • 测试文档:Office Excel 2013
  • 编译环境:IntelliJ IDEA 2018
  • JDK版本:1.8.0
  • Excel库:Java系列free spire.xls.jar 3.9.1
  • java 项目 www fhadmin org
  • 单一水印效果:


  • 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, (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         {
            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;
    }
}


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



阅读(1208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~