springboot为导出的pdf和excel加水印
相信很多小伙伴们在做导出pdf或者excel文件时会被要求在文件上加上水印,本篇博客就来讲讲如何为pdf和excel加水印。
导出pdf加水印
其实在导出pdf时加上水印并不难,因为itext提供了添加水印的方法,而且能设置水印的位置角度等等,直接来看一下代码
public void createPDF(String filename) throws IOException {
Document document = new Document(PageSize.A4);
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
document.addTitle("example of PDF");
document.open();
PdfPTable table = createTable(writer);
document.add(table);
// 加入水印
PdfContentByte waterMar = writer.getDirectContentUnder();
// 开始设置水印
waterMar.beginText();
// 设置水印透明度
PdfGState gs = new PdfGState();
// 设置填充字体不透明度为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,);
// 设置透明度
waterMar.setGState(gs);
// 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
waterMar.showTextAligned(Element.ALIGN_RIGHT, "我是水印" , , , );
//结束设置
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 class ExcelUtilTest{
public void createExcel(HttpServletResponse response)throws Exception {
//获取excel文件
File finalXlsxFile = new File("src/main/resources/watermark.xlsx");
//获取excel文件流
FileInputStream inputStream = new FileInputStream(finalXlsxFile);
//根据文件流创建XSSFWorkbook对象
XSSFWorkbook wb = new XSSFWorkbook(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 = new XSSFWorkbook(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文件加水印的需求。
springboot为导出的pdf和excel加水印的更多相关文章
- [转]为ReportViewer导出的PDF文档加上水印
接到一個頗富挑戰性的需求,Reporting Service或RDLC報表可匯出成Excel.PDF等檔案格式,對一般麻瓜型使用者而言,PDF唯讀,Excel則可修改,業務單位希望在拿到報表紙本時加以 ...
- C# 操作Excel加水印
首先下载免费版的Excel组件- Spire.XLS,安装完成后在bin目录里面有需要用到的dll文件,引用到自己项目里面. 我这里全引进来了,一共就四个: 界面 效果 全部代码 private st ...
- Java使用POI为Excel打水印,调整列宽并设置Excel只读(用户不可编辑)
本文介绍在Java语言环境下,使用POI为Excel打水印的解决方案,具体的代码编写以及相关的注意事项. 需求描述: 要求通过系统下载的Excel都带上公司的水印,列宽调整为合适的宽度,并且设置为不可 ...
- Java给图片和PDF文件添加水印(图片水印和文字水印)
有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...
- phpExcel常用方法详解【附有php导出excel加超级链接】
phpExcel常用方法详解[附有php导出excel加超级链接] 发表于4年前(-- :) 阅读() | 评论() 0人收藏此文章, 我要收藏 赞0 http://www.codeplex.com/ ...
- 手把手教你springboot中导出数据到excel中
手把手教你springboot中导出数据到excel中 问题来源: 前一段时间公司的项目有个导出数据的需求,要求能够实现全部导出也可以多选批量导出(虽然不是我负责的,我自己研究了研究),我们的项目是x ...
- Ireport 报表导出 Poi + ireport 导出pdf, word ,excel ,htm
Ireport 报表导出 Poi + ireport 导出pdf, doc ,excel ,html 格式 下面是报表导出工具类reportExportUtils 需要导出以上格式的报表 只需要调用本 ...
- Java实现PDF和Excel生成和数据动态插入以及导出
一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...
- SpringBoot集成文件 - 集成POI之Excel导入导出
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
随机推荐
- JDK源码分析(9)之 WeakHashMap 相关
平时我们使用最多的数据结构肯定是 HashMap,但是在使用的时候我们必须知道每个键值对的生命周期,并且手动清除它:但是如果我们不是很清楚它的生命周期,这时候就比较麻烦:通常有这样几种处理方式: 由一 ...
- Spring基础系列-参数校验
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9953744.html Spring中使用参数校验 概述 JSR 303中提出了Bea ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- Dapper批量操作实体
首先要安装 Dapper.Contrib,直接从nuget安装即可. dapper官方文档:http://dapper-tutorial.net/dapper T Get<T>(id); ...
- python学习笔记(十 二)、操作数据库
每一种语言都少不了多数据库进行各种操作. python支持多种数据库.有关python支持的数据库清单,请参阅:https://wiki.python.org/moin/DatabaseInterfa ...
- Java开发笔记(八)五种算术运算符
计算机科学起源于数学,早期的计算机也确实多用于数学运算,以至于后来的各路编程语言,仍然保留着古老的加减乘除四则运算.这四则运算在Java语言中有专门的运算符加以表示,像加法符号“+”对应Java的“+ ...
- java学习笔记 线程的实现与同步
2019.4.2 线程实现的两种方式 继承线程,复写其中的run方法 实现runnable接口,复写run方法 使用: MyThread target = new MyThread(); new Th ...
- Mybaits之Mapper动态代理开发
Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...
- paas saas iaas 区别
最近在公司里面经常听到一些paas saas iaas云服务的名词,把我自己都听蒙圈啦,所以就各种找资料终于对这三个名词有了一定的了解 首先上一张图如下: IAAS(nfrastructure as ...
- WebStorm 配置微信小程序开发 用html样式打开wxml 用css样式打开wxss 配置微信小程序提醒
1.点开preferences 2.搜索找到“File Types” 3.找到"HTML",点击“+”按钮,添加“*.wxml”然后“apply” 4.和3一样,再找到 ‘casc ...