水印篇
...大约 3 分钟
水印篇
参考代码
noob-demo=》springboot-demo =》springboot-demo-watermark
学习核心
- 水印实现方案策略
- 水印兼容性问题处理
- 本地开发 VS 线上部署 (常见水印问题处理)
水印策略
ITEXT水印文本实现(普通水印、铺满策略),根据图片(不同图片格式:PNG、BMP、JPG、GIF等进行适配)、PDF(ITEXT策略、生成PDF的时候写入水印)
解决ITEXT方案前端渲染失败问题(需要前端渲染时注意处理兼容性问题,可能是前端引用预览框架不支持ITEXT生成的水印,需要相应进行调整)
项目中预览PDF常见问题
大文件处理(文件存储服务)等
服务器部署时,发现中文字体出现方块问题(中文字体处理失败),一般这个问题时由于服务器上缺少指定字体导致的,其解决思路有两个:
- 上传指定字体到服务器(但是这种情况如果切换环境配置或者更换服务器时,需要联动进行同步,否则问题还会继续复现)
- 项目中指定字体(在项目中引入字体,或者加载指定字体,基于这种模式不依赖于外部环境,直接在项目中引入需要的字体。其思路类似在pdf处理这些第三方jar中都有提供自己的字体)
一般情况下,像是可能最常见的window开发环境,如果本地有指定的字体则正常加载并渲染,但是如果上传到服务器(linux、unix、ubuntu等)就可能出现指定字体不存在的问题,字体加载失败导致中文水印无法正常装配(这种问题与中文乱码问题不是同一个概念,中文乱码问题是编码集或者转码出现问题,而该问题是服务器上不存在指定的Font导致中文加载失败)
水印处理常见问题
不同类型图片的水印生成策略兼容性处理(根据不同的文件类型适配相应的水印方案)
- 静态图片处理(IMAGE、JPG等)
- 动态图片处理(GIF)
- PDF文件处理
- DOC文档类文件处理等...
文件处理问题
- 文件对接文件存储系统,需要额外进行处理
文件读取权限问题
- 针对设置了文件密码的文件,直接渲染文件时会抛出
PdfReader not opened with owner password
- 【解决方案1】:升级PDF处理相关依赖版本到7,然后设置文件属性
- 【解决方案2】:版本升级涉及兼容性考虑,如果基于原有的版本,则可以通过"强制"取消密码来实现,基于这种方式,加密文件的加密功能会被取消,通过水印渲染之后的文件的密码设定会被取消
- 针对设置了文件密码的文件,直接渲染文件时会抛出
测试说明:
水印效果测试:在测试的时候为了排查水印是否正常生成,可以选用深色原图或者设置深色水印做反差对比(有时候选择白色水印或者设置了透明度,图片测试对比看不出来水印,需要排除这部分的问题)
最终代码版本参考noob-demo中水印相关工具类
Powered by Waline v3.1.3