跳至主要內容

水印篇

holic-x...大约 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】:版本升级涉及兼容性考虑,如果基于原有的版本,则可以通过"强制"取消密码来实现,基于这种方式,加密文件的加密功能会被取消,通过水印渲染之后的文件的密码设定会被取消
  • java 中给gif 添加水印方法open in new window

测试说明:

  • 水印效果测试:在测试的时候为了排查水印是否正常生成,可以选用深色原图或者设置深色水印做反差对比(有时候选择白色水印或者设置了透明度,图片测试对比看不出来水印,需要排除这部分的问题)

    最终代码版本参考noob-demo中水印相关工具类

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3