需求:如何给文件添加水印

news2024/10/6 18:36:18

今天给大家介绍一个简单易用的水印添加框架,框架抽象了各个文件类型的对于水印添加的方法。仅使用几行代码即可为不同类型的文件添加相同样式的水印。

如果你有给PDF、图片添加水印的需求,EasyWatermark是一个很好的选择,主要功能就是传入一个文件,并设置本次要添加的水印,即可在文件中添加水印内容。

快速开始

添加依赖

pom.xml

    <dependency>  
      <groupId>org.easywatermark</groupId>  
      <artifactId>easy-watermark</artifactId>  
      <version>最新版本</version>  
    </dependency> 

添加水印

byte[] result = EasyWatermark.create()
        .file(fileData)
        .text("Easy-Watermark")
        .executor();

更多配置

预制水印类型

  1. CUSTOM:自定义水印,使用框架抽象的统一方法,对传入文件的每个页面进行特殊处理(开发中)
  2. CENTER:居中,在页面的各个居中位置上添加。
    • VERTICAL_CENTER:水印垂直居中
    • LEFT_CENTER:靠左居中
    • RIGHT_CENTER:靠右居中
    • TOP_CENTER:顶部居中
    • BOTTOM_CENTER:底部居中
  3. OVERSPREAD:页面铺满,可设置倾斜角度
    • LOW:低铺满,水印内容占比33%
    • NORMAL:一般铺满,水印内容占比66%
    • HIGH:高铺满,水印内容占比90%
  4. DIAGONAL:页面对角水印
    • TOP_TO_BOTTOM:文字从上到下
    • BOTTOM_TO_TOP:文字从下到上

水印配置

对应WatermarkConfig类,该类会对水印的各项属性进行设置。

WatermarkConfig.java

    public class WatermarkConfig {  
      // 水印颜色  
      private Color color = Color.BLACK;  
      // 忽略旋转,仍在开发  
      private boolean ignoreRotation = true;  
      // 水印透明度  
      private float alpha = 1;  
      // 铺满水印子类型  
      private OverspreadTypeEnum overspreadType = OverspreadTypeEnum.NORMAL;  
      // 居中水印子类型  
      private CenterLocationTypeEnum centerLocationType = CenterLocationTypeEnum.VERTICAL_CENTER;  
      // 对角水印子类型  
      private DiagonalDirectionTypeEnum diagonalDirectionType = DiagonalDirectionTypeEnum.TOP_TO_BOTTOM;  
      
      /**  
       * An angle, in degrees  
       * The angle of clockwise rotation  
       */  
      private float angle = 0;  
    }  

字体配置

对应FontConfig类,该类会对水印文字的各项属性进行设置。

FontConfig.java

    public class FontConfig {  
      // 字体颜色  
      private Color color = Color.BLACK;  
      // 字体文件  
      private File fontFile;  
      
      /**  
       * 默认的字体,目前仅在图片水印中生效  
       * Default font name is Dialog  
       */  
      private String fontName = "Dialog";  
      // 字体大小  
      private int fontSize = 12;  
      
      /**  
       * 字体样式:加粗、斜体、正常  
       * @see Font#PLAIN  
       * @see Font#BOLD  
       * @see Font#ITALIC  
       */  
      private int fontStyle = Font.PLAIN;  
    }  

进阶用法

使用预设水印类型

 File file = new File("E:\\doc\\23种设计模式知识要点.pdf");
 byte[] result = EasyWatermark.create().file(file).text("Easy-Watermark")
                // 选择不同的水印类型
                .easyWatermarkType(EasyWatermarkTypeEnum.CENTER).executor();

自定义水印配置以及字体配置

  File file = new File("E:\\doc\\23种设计模式知识要点.pdf");
        WatermarkConfig watermarkConfig = new WatermarkConfig();
        // 设置水印透明度
        watermarkConfig.setAlpha(0.5f);

        FontConfig fontConfig = new FontConfig();
        // 设置水印文字大小
        fontConfig.setFontSize(30);

        byte[] result = EasyWatermark.create().file(file)
                // 自定义配置
                .config(watermarkConfig).config(fontConfig)
                // 水印类型
                .easyWatermarkType(EasyWatermarkTypeEnum.CENTER).text("Easy-Watermark").executor();

完整代码

    @GetMapping("create1")
    public void create1() {
        File file = new File("E:\\doc\\23种设计模式知识要点.pdf");
        byte[] result = EasyWatermark.create().file(file).text("Easy-Watermark")
                // 选择不同的水印类型
                .easyWatermarkType(EasyWatermarkTypeEnum.CENTER).executor();
        createWatermarkedFile(new File("E:\\doc\\resFile1.pdf"), result);

    }

    @GetMapping("create2")
    public void create2() {
        File file = new File("E:\\doc\\23种设计模式知识要点.pdf");
        WatermarkConfig watermarkConfig = new WatermarkConfig();
        // 设置水印透明度
        watermarkConfig.setAlpha(0.5f);

        FontConfig fontConfig = new FontConfig();
        // 设置水印文字大小
        fontConfig.setFontSize(30);

        byte[] result = EasyWatermark.create().file(file)
                // 自定义配置
                .config(watermarkConfig).config(fontConfig)
                // 水印类型
                .easyWatermarkType(EasyWatermarkTypeEnum.CENTER).text("Easy-Watermark").executor();
        createWatermarkedFile(new File("E:\\doc\\resFile2.pdf"), result);


    }


    public static void createWatermarkedFile(File resFile, byte[] result) {
        try {
            FileOutputStream fos = new FileOutputStream(resFile);
            fos.write(result);
            fos.close();
            log.info("水印文件已成功创建:{}", resFile.getAbsolutePath());
        } catch (IOException e) {
            log.info("创建水印文件出错:{}", e.getMessage());
        }
    }

效果展示

resFile1.pdf文件

resFile2.pdf文件

开源地址

https://github.com/AzirZsk/easy-watermark

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1828877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis工作流程和插件开发

在了解插件开发之前&#xff0c;我们先总体的来梳理一下Mybatis的大致执行流程&#xff1a; 1.new SqlSessionFactoryBuilder().build(inputStream):先根据配置文件&#xff08;包含了全局配置文件和映射配置文件&#xff09;初始化一个对象Configuration&#xff08;这里对象里…

LaTex入门教程

目录 1.说明 2.页面的分区 3.入门介绍 &#xff08;1&#xff09;命令 &#xff08;2&#xff09;环境 &#xff08;3&#xff09;声明 &#xff08;4&#xff09;注释 4.代码结构 &#xff08;1&#xff09;导言区 &#xff08;2&#xff09;支持中文 &#xff08;3…

2024都市解压爆笑喜剧《脑洞大开》6月28日上映

随着暑期档的临近&#xff0c;电影市场迎来了一剂强心针——由何欢、王迅、克拉拉、卜钰、孙越、九孔等众多实力派笑星联袂主演的都市解压爆笑喜剧《脑洞大开》正式宣布定档&#xff0c;将于6月28日在全国各大影院欢乐上映&#xff0c;誓为观众带来今夏最畅快淋漓的笑声风暴。 …

逆天改命 17岁中专女生横扫全球数学竞赛

“逆天改命!17岁中专女生横扫全球数学竞赛,清华北大高手纷纷落马!” 最近全网被这则消息震惊了。 来!随便挑几个题目,让大家体验一下阿里巴巴全球数学竞赛的难度? 数学是人工智能算法的基石。它为算法提供了逻辑框架和分析工具,使得人工智能能够处理复杂的数据和问…

驾考模拟 | 电脑上使用浏览器模拟科目一考试

驾考模拟 背景 有个亲戚要考科目一&#xff0c;大叔之前没怎么用过电脑&#xff0c;想要在电脑上练习科目一&#xff0c;找找使用电脑考试的感觉。 有一些本地安装的软件可以满足这个需求&#xff0c;但通常要付费&#xff0c;没这个必要&#xff0c;毕竟只是用来模拟考的。 …

【最新鸿蒙应用开发】——鸿蒙中的“Slot插槽”?@BuilderParam

构建函数-BuilderParam 传递 UI 1. 引言 BuilderParam 该装饰器用于声明任意UI描述的一个元素&#xff0c;类似slot占位符。 简而言之&#xff1a;就是自定义组件允许外部传递 UI Entry Component struct Index {build() {Column({ space: 15 }) {SonCom() {// 直接传递进来…

《大数据分析》期末考试整理

一、单项选择题&#xff08;1*9&#xff09; 1.大数据发展历程&#xff1a;出现阶段、热门阶段和应用阶段 P2 2.大数据影响 P3 1&#xff09;大数据对科学活动的影响 2&#xff09;大数据对思维方式的影响 3&#xff09;大数据对社会发展的影响 4&#xff09;大数…

昂科烧录器支持Prolific旺玖科技的电力监控芯片PL7413C1FIG

芯片烧录行业领导者-昂科技术近日发布最新的烧录软件更新及新增支持的芯片型号列表&#xff0c;其中Prolific旺玖科技的高度集成的电力监控芯片PL7413C1FIG已经被昂科的通用烧录平台AP8000所支持。 PL7413C1FIG是一款高度集成的电力监控芯片&#xff0c;用于测量电力使用情况的…

vue-饼形图-详细

显示效果 代码 <template> <div style"height: 350px;"> <div :class"className" :style"{height:height,width:width}"></div> </div> </template> <script> import * as echarts from echarts; req…

Typora实现设置代码块默认语言_亲测有效(AutoHotKey方式和修改配置文件)

Typora实现设置代码块默认语言&#xff08;AutoHotKey方式和修改配置文件&#xff09; 前言&#xff0c;需求使用AutoHotKey热键脚本【最简单方便】实现步骤建议 最终效果其他方法自定义Typora代码块快捷键设置。应对ctrlshiftk快捷键被其他占用的情况。 前言&#xff0c;需求 …

07--Zabbix监控告警

前言&#xff1a;和普米一样运维必会的技能&#xff0c;这里总结一下&#xff0c;适用范围非常广泛&#xff0c;有图形化界面&#xff0c;能帮助运维极快确定问题所在&#xff0c;这里记录下概念和基础操作。 1、zabbix简介 Zabbix是一个基于 Web 界面的企业级开源解决方案&a…

厂里资讯之自媒体文章自动审核

自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的内容&#xff08;文本内容和图片&#xff09; 3 借助第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

高速信号——NRZ,PAM4调制技术

1&#xff1a;码元 了解调制技术需要引出“码元”的概念。 一个码元就是一个脉冲信号&#xff0c;即一个最小信号周期内的信号&#xff0c;我们都能够理解&#xff0c;最简单的电路&#xff0c;以高电平代表1&#xff0c;低电平代表0&#xff0c;一个代表1或者0的信号&#x…

Linux基础I/O之文件描述符fd 重定向(上)

目录 一、预备知识 二、C语言中的文件接口 三、系统调用中的文件接口 一、预备知识 首先我们要明确的一个观点是 --- 文件 内容 属性。而且我们之前也还将过一个概念&#xff0c;那就是Linux下一切皆文件。 内容是数据&#xff0c;属性也是数据 --- 那么也就是说我…

t265 jetpack 6 px4 ros2

Ubuntu22.04 realsenseSDK2和ROS2Wrapper安装方法,包含T265版本踩坑问题_ros2 realsense-CSDN博客 210 git clone https://github.com/IntelRealSense/librealsense.git 212 git branch 215 git tag 218 git checkout v2.51.1 219 git branch 265 git clone https://…

C语言---------深入理解指针

目录 一、字符指针 二、指针数组&#xff1a; 三、数组指针&#xff1a; 1、定义&#xff1a; 2、&数组名和数组名区别&#xff1a; 3、数组指针的使用&#xff1a; 四、数组参数&#xff0c;指针参数&#xff1a; 1、一维数组传参&#xff1a; 2、二维数组传参&am…

基于springboot的大学计算机基础网络教学系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于springboot的大学计算机基础网络教学…

opencv-python(十)

绘制直线 cv2.line(img, pt1, pt2, color, thickness1, lineTypeLINE_8) 上述代码可以从pt1点绘一条线到pt2点。 img&#xff1a;绘图对象 pt1&#xff1a;线段的起点&#xff0c;画布的左上角坐标是(0, 0) pt2&#xff1a;线段的终端 color&#xff1a;&#xff08;B&…

记录一次root过程

设备: Redmi k40s 第一步&#xff0c; 解锁BL&#xff08;会重置手机系统&#xff01;&#xff01;&#xff01;所有数据都会没有&#xff01;&#xff01;&#xff01;&#xff09; 由于更新了澎湃OS系统, 解锁BL很麻烦, 需要社区5级以上还要答题。 但是&#xff0c;这个手机…

React+TS前台项目实战(十)-- 全局常用组件CopyText封装

文章目录 前言CopyText组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲项目常用复制文本组件封装&#xff0c;这个组件是一个用于拷贝文本的 React 组件&#xff0c;它提供了拷贝&#xff0c;国际化和消息提示的功能 CopyText组件 1. 功能分…