相信很多小伙伴们在做导出pdf或者excel文件时会被要求在文件上加上水印,本篇博客就来讲讲如何为pdf和excel加水印。

导出pdf加水印

其实在导出pdf时加上水印并不难,因为itext提供了添加水印的方法,而且能设置水印的位置角度等等,直接来看一下代码

public voidcreatePDF(String filename) throws IOException {

Document document= newDocument(PageSize.A4);try{

PdfWriter writer= PdfWriter.getInstance(document, newFileOutputStream(filename));

document.addTitle("example of PDF");

document.open();

PdfPTable table=createTable(writer);

document.add(table);//加入水印

PdfContentByte waterMar =writer.getDirectContentUnder();//开始设置水印

waterMar.beginText();//设置水印透明度

PdfGState gs = newPdfGState();//设置填充字体不透明度为0.2f

gs.setFillOpacity(0.2f);//设置水印字体参数及大小 (这里在上一篇博客中已经讲过了)

BaseFont baseFont = BaseFont.createFont(JavaPdfHelloWorld.class.getResource("/simsun.ttf").getPath(), BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);

waterMar.setFontAndSize(baseFont,30);//设置透明度

waterMar.setGState(gs);//设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度

waterMar.showTextAligned(Element.ALIGN_RIGHT, "我是水印" , 350, 730, 45);//结束设置

waterMar.endText();

waterMar.stroke();

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(DocumentException e) {

e.printStackTrace();

}finally{

document.close();

}

}

createTable()方法的代码就不贴了,就是生成一个pdf表格,这在之前的博客中已经提过了。

导出excel加水印

接下来我们着重看一下excel文件怎么加水印,现在业界对excel文件读写大多采用poi这个东西,而poi没有提供添加水印的方法,所以要怎么办呢,我在网上搜索了好久也没找到能直接拿来用的办法,但是看到有人提供思路,先准备一份打了水印的模版Excel,然后加载该模版,再将内容输出到该模版中,以达到为Excel添加水印的目的。这个思路看起来的确可行,然后就开干了,先看代码

public classExcelUtilTest{public void createExcel(HttpServletResponse response)throwsException {//获取excel文件

File finalXlsxFile = new File("src/main/resources/watermark.xlsx");//获取excel文件流

FileInputStream inputStream = newFileInputStream(finalXlsxFile);//根据文件流创建XSSFWorkbook对象

XSSFWorkbook wb = newXSSFWorkbook(inputStream);

XSSFSheet sheet= wb.getSheetAt(0);

sheet.setDefaultColumnWidth(16);//设置默认列宽

sheet.setDefaultRowHeightInPoints(20);//设置默认行高

for(int j = 0;j < 5;j++) {

XSSFRow row=sheet.createRow(j);for(int i = 0;i<5;i++) {

XSSFCell cell=row.createCell(i);

cell.setCellValue("第"+j+"行第"+i+"列");

}

}//输出Excel文件

OutputStream output=response.getOutputStream();

response.reset();

String fileName= "水印测试文件";

response.setHeader("Content-Disposition","attachment; filename=" +new String(fileName.getBytes("UTF-8"), "iso-8859-1")+".xlsx");

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");

wb.write(output);

output.close();

}

}

这个代码换一下文件地址可以直接拿来用,值得注意的是这是用springboot以附件形式导出的,不是用java程序生成的,也就是说我还有一个controller文件,只是没贴出来。

和我们直接生成excel文件代码有所不同的是下面两句代码,如果是直接生成excel文件这构造方法参数是空的,然后getSheetAt()方法改为createSheet()方法即可

XSSFWorkbook wb = newXSSFWorkbook(inputStream);

XSSFSheet sheet= wb.getSheetAt(0);

至于如何设计excel文件上的水印这个网上教程很多,随便找一个来看就行,我就不赘述了,看一下效果如何

这是原始excel

这是生成后的excel

如果要将其打包部署的话,不能直接根据文件来获取inputStream,需要将代码改一改,将最上面两句代码改成springboot提供的获取类路径下文件流的方法,然后文件文件要放在类路径下。当然,这个在打包所有需要通过文件路径来获取文件的springboot项目情况都适用。

InputStream finalXlsxFile = new ClassPathResource("watermark.xlsx").getInputStream();

总结

相对pdf生成水印的方法,excel这个方法还是有很多不足之处的,比如生成水印的位置不能通过代码更改,如果有多个sheet不能全都加上去(除非事先知道有几个sheet),生成后的excel中的水印可以随意拖动位置(这个貌似可以改进)。总之这份代码是非常简陋的,只能解决最简单的为导出excel文件加水印的需求。

java导出excel水印_springboot为导出的pdf和excel加水印相关推荐

  1. pdf怎么批量加水印?

    PDF文件已经成为现在越来越重要的商业文件格式之一,为了保护文件内容不被恶意盗用,我们需要给PDF文件添加水印,例如在pdf文件里添加公司名称字样或者企业logo水印等,有时候也会加上"内部 ...

  2. java实现PDF文件批量加水印

    java实现PDF批量添加水印 几个依赖包可以通过Maven下载 ##代码如下 // An highlighted block import com.spire.pdf.*;import java.a ...

  3. java ueditor 图片上传加水印_关于ueditor多图上传加水印

    最近小二哥应运营要求,需在后台编辑器做图片添加水印功能,由于ueditor编辑器本身没有添加水印的功能: 所以小二哥参考了网上的一些方法,加上实现的步骤整理成文档,希望对需要的人有帮助. 1.打开ue ...

  4. java spring上传图片_基于Spring Boot实现图片上传/加水印一把梭操作

    文章共 537字,阅读大约需要 2分钟 ! 概述 很多网站的图片为了版权考虑都加有水印,尤其是那些图片类网站.自己正好最近和图片打交道比较多,因此就探索了一番基于 Spring Boot这把利器来实现 ...

  5. android 小视频添加水印,安卓手机怎么给视频加水印 视频加水印的手机软件|微信小视频怎么加水印...

    感觉中午一个小时的午休时间更本不够似的,以至于现在的我还头昏脑胀的厉害,睡眼惺忪的我还得默默的敲击着键盘,全都是为了生活啊,算了不传递这些负能量了,来说说咱们今天的教程,是关于如何用手机给视频加水印的 ...

  6. 再见水印软件!2行Python给图片加水印,太太太强了

    人生苦短,快学Python! 版权相当重要,对于某张图片,可能是你精心制作的思维导图,或者你精心设计的某个logo.你可能花费好多时间来弄,最后却被别人直接搬运过去使用,好气哦! 基于此,本文我就带着 ...

  7. 给图片加上水印php视频,如何使用PHP给图片加水印

    为了防止辛苦做出来的图片被盗用,很多照片都会加上水印,可以直接用图片工具添加水印再上传,但PHP中就可以实现给图片加水印的功能,本文章向码农们介绍 php 给图片加水印的两种方法,感兴趣的码农可以参考 ...

  8. php图像处理类实现缩放 裁剪 加水印,ThinkPHP图像的裁剪、缩放、加水印

    ThinkPHP 图片处理函数,需要文字水印字体,可在windows下 控制面板 > 大图标(右上角) > 字体 找到需要的字体 /** * 图像的裁剪.缩放.加水印 * @param s ...

  9. java pdfreader去除水印_(最新)JAVA使用Icepdf 5.0.6 pro的PDF转图片去掉水印的方法...

    最近发现PDF转图片各种开源工具PDFBOX.PDFRenderer.jpedal都不好用,中文各种蛋疼,但是试用了一下Icepdf相当强大,唯一不足就是生成的图片带有官方水印,下面介绍一下去掉官方水 ...

  10. itextword加公章 java_使用itext和freemarker来根据Html模板生成PDF文件,加水印、印章...

    org.xhtmlrenderer flying-saucer-pdf-itext5 9.1.18 org.freemarker freemarker 2.3.27-incubating 将html模 ...

最新文章

  1. Node核心模块Buffer
  2. python打包软件后报错 :SyntaxError: Non-UTF-8 code starting with ‘\x90‘ in file 的原因及解决方法
  3. win7 安装 Visual Studio 2015 出现 “Failed to install MSI package 等错误”
  4. JS_typeof()函数返回类型总结
  5. python追加写入数据到excel表格
  6. 1195.最长最短文本
  7. 判定是否在词典中 java_检查字典中是否已存在给定键
  8. 小米max2怎么长截屏?
  9. 终端的乐趣--Linux下有趣的终端命令或者工具【转】
  10. meta标签属性及其功能
  11. 让横向纵向分辨率都一致
  12. 监控安防人员入门基础
  13. 鼓励与信任让人变得更强大
  14. MySQL医疗信息管理系统数据库(源码)
  15. css过长文字自动换行
  16. 如何快速获取图片的ROI区域坐标
  17. css左侧盒子固定右边自适应
  18. sublime3 离线安装 pretty json
  19. 双人床行业调研报告 - 市场现状分析与发展前景预测
  20. bzoj2142 礼物

热门文章

  1. VM虚拟机装Windows XP系统
  2. 照片转3d模型_云从科技3D人体重建技术刷新3项纪录!仅凭照片即可生成精细模型...
  3. 紧固件基础知识之规格篇和功能篇
  4. react-native Android使用阿里icon font图标
  5. 最新中国数据中心排行榜
  6. GO版本家庭记账系统
  7. 字符串(Linux应用编程篇)
  8. Python批量复制文件夹(以及所有子文件夹)下的某类型文件
  9. 无版权高清图片素材库pixabay
  10. 性格测试系统v1.0