代码: 兵马未动,粮草先行

作者: 传说中的汽水枪

如有错误,请留言指正,欢迎一起探讨.

转载请注明出处.

公司要求从阿里云OSS下载pdf文件并且需要添加水印.

因此这里总结一下.

首先添加了一个FileUploadUtil.java文件:

    /**OSSClient*/
private static OSSClient CLIENT; public static InputStream getInputStreamFromOSS(String ossFileName) {
String parentDirectory = ossFileName.substring(0, 8) + "/";
String fileId = "你自己的fileId";
CLIENT = new OSSClient(ENDPOINT, ACCESSKEYID, ACCESSKEYSECRET);
OSSObject ossObject = CLIENT.getObject(BUCKETNAME, fileId + ossFileName);
InputStream inputStream = ossObject.getObjectContent();
return inputStream;
} public static void clientShutdown() {
if (CLIENT != null) {
CLIENT.shutdown();
}
}

在controller层先实现下载文件功能:

    @ResponseBody
@RequestMapping(value = "/downloadFromOSS", method = RequestMethod.GET)
public void downloadFromOSS(String fileName, HttpServletResponse response, HttpServletRequest request) {
try {
String dataString = DateUtil.date2Str(new Date(), "yyyy-MM-dd-HH-mm-ss-SSS");
String destFileName = dataString + ".pdf";
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + destFileName);
// 获取outputStream
OutputStream outputStream = response.getOutputStream();
// 获取inputStream
InputStream inputStream = FileUploadUtil.getInputStreamFromOSS(fileName);
// 下载文件
byte[] bytes = new byte[2048];
int length;
while ((length = inputStream.read(bytes)) > 0) {
outputStream.write(bytes, 0, length);
}
outputStream.close();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
FileUploadUtil.clientShutdown();
}
}

实现下载并添加水印:

    @ResponseBody
@RequestMapping(value = "/downloadWatermarkFile", method = RequestMethod.GET)
public void downloadWatermarkFile(String fileName, HttpServletResponse response, HttpServletRequest request) {
try {
String dataString = DateUtil.date2Str(new Date(), "yyyy-MM-dd-HH-mm-ss-SSS");
String destFileName = dataString + ".pdf";
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + destFileName);
// 获取outputStream
OutputStream outputStream = response.getOutputStream();
// 获取inputStream
InputStream inputStream = FileUploadUtil.getInputStreamFromOSS(fileName); // 添加水印的时候,就已经在outputStream写入了
PdfReader reader = new PdfReader(inputStream);
PdfStamper stamper = new PdfStamper(reader, outputStream);
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
BaseFont base = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
PdfGState gs = new PdfGState();
for (int i = 1; i < total; i++) {
content = stamper.getOverContent(i);// 在内容上方加水印
//content = stamper.getUnderContent(i);//在内容下方加水印
gs.setFillOpacity(0.2f);
content.setGState(gs);
content.beginText();
content.setColorFill(com.itextpdf.text.BaseColor.LIGHT_GRAY);
content.setFontAndSize(base, 50);
content.setTextMatrix(70, 200);
//将文字显示在pdf页面中
// content.showTextAligned(Element.ALIGN_CENTER, "国际财富管理协会(中国)!", 300,350, 55);
//设置文字颜色
content.setColorFill(com.itextpdf.text.BaseColor.BLACK);
//设置文字大小
content.setFontAndSize(base, 8);
//将内容显示在pdf底部
String waterMarkName = "111111";
content.showTextAligned(Element.ALIGN_CENTER, "下载时间:" + waterMarkName + "", 300, 10, 0);
content.endText();
}
stamper.close();
outputStream.close();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
FileUploadUtil.clientShutdown();
}
}

OK 解决问题.

阿里云OSS下载pdf文件,并在pdf文件上添加水印的更多相关文章

  1. 阿里云OSS 服务端签名后直传之分片上传(结合element-ui的upload组件)

    分片上传(结合element-ui的upload组件实现自定义上传) async uploadFree(content){ let data = await this.getOssToken(); / ...

  2. 使用阿里云oss

    写这篇博文的原因是公司有个项目需要用到阿里云来存放用户头像文件.后期软件安装版本也可能需要存进去,然后折腾了两天终于摸熟了一点皮毛,在这里给大家简单介绍下. 一.初识对象存储oss 1.进入阿里云控制 ...

  3. 使用Typora + 阿里云OSS + PicGo 打造自己的图床

    使用Typora + 阿里云OSS + PicGo 打造自己的图床 为什么要打造图床? 让笔记远走高飞 试问以下场景: 我们要把 markdown 笔记放到某博客上,直接进行复制即可.但因你的图片存储 ...

  4. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    1. 开发前准备 1.1 前置知识 java基础以及SpringBoot简单基础知识即可. 1.2 环境参数 开发工具:IDEA 基础环境:Maven+JDK8 所用技术:SpringBoot.lom ...

  5. Java下载https文件上传到阿里云oss服务器

    Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 .实现自己的证书信任管理器类 /** ...

  6. django 文件上传(阿里云oss)下载(支持大文件下载)

    1.文件上传 Models 设计 class Upload_File(models.Model): image = models.FileField(upload_to='file/%Y/%m',de ...

  7. wget下载阿里云oss的文件报错403

    问题 在实际工作中,我们为了方便,会将一些脚本储存在云端(阿里云OSS),这样方便我们使用和下载,但是在实际的使用过程中,我们会遇到一些问题. 示例链接:https://djxlsp.oss-cn-s ...

  8. ThinkPHP 文件上传到阿里云OSS上(干货)

    参考:http://www.thinkphp.cn/extend/789.html 1.前往阿里云github下载SDK包:https://github.com/aliyun/aliyun-oss-p ...

  9. angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

    2015-10-26 angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前 ...

随机推荐

  1. AD域自定义属性《完整》

    1.安装Active Directory 架构,下载:adminpak.msi安装. 2.以管理员运行cmd,执行:regsvr32 schmmgmt.dll(该命令将在计算机上注册“schmmgmt ...

  2. JMeter乱码常见的解决方案

    方法一.直接将JMeter中http请求中Content encoding改为utf-8 方法二.编辑JMeter安装目录:apache-jmeter-3.2\bin中的jmeter.properti ...

  3. iOS解析XML实现省市区选择

    1.具体内容就不再赘述了.直接看关键代码. viewController.h // // ViewController.h // ParseXmlToRealizeChooseCityDemo // ...

  4. 初识Python - Python的历史(转)

    声明: 本文转自维基百科 如有意见请联系删除 综述 该编程语言 的Python是在20世纪80年代末的设想,和实施是在1989年12月开始由吉多·范罗苏姆在CWI在荷兰的继任者农行能够异常处理,并与接 ...

  5. 关于hover和after、before合用

    通常hover后面跟的选择器,都是在myClass结构之下 的dom元素. 如果想在myClass下添加after等,就需要两个::号. 注:after/before是属于myclass的下级元素,并 ...

  6. 控件_AnalogClock

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  7. Webserver管理系列:6、网络和共享中心的安全配置

    1.关闭网络发现 2.关闭文件和打印机共享 3.关闭公用目录共享 4.启用password保护共享

  8. 【Java多线程】线程状态、线程池状态

    线程状态: 线程共包括以下5种状态.1. 新建状态(New) 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable) 也 ...

  9. 【转】BASE64编码简介

    BASE64是一种编码方式,通常用于把二进制数据编码为可写的字符形式的数据. 这是一种可逆的编码方式. 编码后的数据是一个字符串,其中包含的字符为:A-Z.a-z.0-9.+./ 共64个字符:26 ...

  10. 【转】escape,encodeURI,encodeURIComponent有什么区别?

    在这个页面里面试着搜了一下 「UTF-8」 ,居然没有搜到. escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式 ...