一个开源的工具类轮子是怎么造出来的

心路历程

为什么要做

在22年9月的某一天,在公司开需求评审时,接到了一个给PDF、图片添加水印的需求。

做为一个刚工作的CURD程序员,在遇到这些问题时,第一反应是去github上找找有没有类似的开源框架。

但是,出乎我意料的是竟然没有一个统一的框架 ,都是各个文件有着各个文件添加水印的框架。并没有一个大一统 的框架。此时就萌生出一个想法了,我能不能写一个呢?

于是EasyWatermark 出现了,在一开始的想法中,框架的主要的作用就是传入一个文件,并设置本次要添加的水印,即可在文件中添加水印内容。

但在开发的途中,却意外连连。

自我怀疑以及坚持下去

从git提交记录可以发现一点端倪,整个仓库的提交时间可以大致的分为三个阶段

  1. 2022年11月:框架初期搭建,自我怀疑期

框架刚搭建时,由于已经在工作上实现了PDF添加水印的功能了,所以能够很快的搭建完初始框架。

但是问题也随之而来了,那个时候我常常在想,这个框架真的有人用嘛,添加水印这么简单的功能,为什么要写一个框架出来呢?

这个时候陷入了深深的怀疑当中,于是乎,开发进度也就停止了下来。

  1. 2023年2月:确定框架入口类

在2月这个时间点,我也忘记了为什么自己又重新开始了框架的开发😂。

但是在这个月中,实际上是没有开发任何框架的功能的,只是在想着框架该如何规划好。

  • 项目名称变更:从all-watermark变为easy-watermark
  • 增加框架入口类:参照easy-excel的使用方式进行了开发,创建了EasyWatermark入口类
  • 毫无用处的水印位置计算策略类

写着写着代码,问题又出现了,内部逻辑设计已经规划好了,但是该如何设计简单易用 的API供其他人使用呢?开发进度又双叒叕停滞了。

  1. 以及最近的4月5月

忘记是在4月的哪一天了,在床上刷抖音时看到一个视频,视频的大致内容是两个人,其中一个人让一个男生去做一件事情,一开始这个男生就说不会,做得不好,别让他做。那个人又说,我本来就没想着让你做的多好,你先去试试。于是乎那个男生就去做了,做完之后觉得,自己做的蛮不错的。那个人又说一开始肯定做的不好,但是你一直想着做得不好,就不去做,那永远都不会好。

不要一开始就想要做的多好,重要的是得先开始做,哪怕做的再不好,也好过不去尝试。

正是看了这个视频之后,我又想起了我还有一个开源框架仍在开发中,并且开发这个框架的经历跟视频的差不多,于是乎我又开始完善的我水印框架了。

在最近的两个月中,我重构了大部分代码 ,定义好了四种水印渲染类型 ,定义了一个扩展接口用于用户自定义页面的水印。

说了这么多,简单介绍一下我开发的水印框架吧。

Easy-Watermark

框架功能

抽象了各个文件类型对于添加水印的API,内部提供了多种预设水印类型以供使用,无需二次开发。

快速开始

pom文件中引入依赖

xml 复制代码
<dependency>
    <groupId>org.easywatermark</groupId>
    <artifactId>easy-watermark</artifactId>
    <version>0.0.2</version>
</dependency>

使用水印框架

java 复制代码
byte[] result = EasyWatermark.create()
        .file(fileData)
        .text("Easy-Watermark")
        .execute();

支持文件类型

PDF、图片类型、Office套件文件(仍在开发中)

内置水印类型

  • CUSTOM:自定义水印,使用框架抽象的统一方法,对传入文件的每个页面进行特殊处理
  • CENTER:居中,在页面的各个居中位置上添加。
  • OVERSPREAD:页面铺满,可设置倾斜角度
  • DIAGONAL:页面对角水印

最后

更多的信息可以去到仓库页面查看:https://github.com/AzirZsk/easy-watermark,如果觉得我的框架写的还不错,请帮忙在GitHub点个⭐️Star,你的支持是我开发的动力。

相关推荐
码农小河669 小时前
基于SSM+JSP的高校专业信息管理系统【附源码+数据库】
java·开发语言·数据库
风若飞11 小时前
Spring Ai 入门遇到问题1
java·后端·spring
Nuanyt12 小时前
LeetCode Hot 100 链表专题(五)· 2 题(Java)
java·算法·leetcode·链表
Bayze12 小时前
开源了一个 MCP 工具:让 Cherry Studio 里的 AI 助理调度多家模型交叉复核
开源
黑马程序员毕设12 小时前
基于 Java 的餐饮点餐系统设计与应用报告
java·开发语言
SL_staff12 小时前
从文档工具到知识中枢:基于JVS数字底座构建企业级统一内容管理平台的技术实践
java·开源·全栈
SL_staff12 小时前
从‘连得上’到‘管得好’:JVS-IOT双引擎驱动设备运维闭环
java·物联网·产品
翌日阳14 小时前
二十分之一的压缩比:Spatial Vivid 1.0 把 3DGS 全链路参考实现按 MIT 开源了
3d·开源
w_zero_one15 小时前
递归算法(一)
java·开发语言·算法
SL_staff15 小时前
私有化低代码不是减配版开发:JVS双模式建模如何重建IT交付信任
java·低代码·spring cloud