pdf文件下载水印添加的中文与空格问题解决
public static boolean waterMark(String inputFile,
String outputFile, String waterMarkName)throws IOException {
try {
//inputFile = new String(inputFile.getBytes("UTF-8"),"UTF-8");
BaseFont base = BaseFont.createFont("STSong-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
String inputFileName = inputFile.substring(inputFile.lastIndexOf("/")+1);
inputFileName = URLEncoder.encode(inputFileName, "utf-8");
inputFileName = StringUtils.replace(inputFileName, "+", "%20");
//inputFileName.replace("+","%20");
//response.addHeader("Content-Disposition", "attachment;inputFileName=" + inputFileName);
//inputFileName = URLEncoder.encode(inputFileName, "utf-8").replaceAll("\\+", "%2B").replaceAll("\\s", " ");
//inputFileName = URLDecoder.decode(inputFileName, "utf-8");
//inputFileName = new String(inputFileName.getBytes(),"ISO-8859-1");
//处理文件名有中文问题
// try {
// if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
// inputFileName= URLEncoder.encode(inputFileName, "UTF-8");
// } else {
// inputFileName= new String(inputFileName.getBytes(),"ISO-8859-1");
// }
// } catch (UnsupportedEncodingException e) {
// e.printStackTrace();
// }
// //最后加双引号处理名称中间有空格问题
// response.setHeader("Content-Disposition","attachment;filename=\""+inputFileName+"\"");
inputFile = inputFile.substring(0,inputFile.lastIndexOf("/"))+"/"+inputFileName;
URL url = new URL(inputFile);
InputStream file = url.openStream();
PdfReader reader = new PdfReader(file);
System.out.print("reader"+reader);
File fileOut = new File(outputFile);
if (!fileOut.exists()) {
// 先得到文件的上级目录,并创建上级目录,在创建文件
fileOut.getParentFile().mkdir();
fileOut.createNewFile();
}
//Field f = PdfReader.class.getDeclaredField("ownerPasswordUsed");
//f.setAccessible(true);
//f.set(reader, Boolean.TRUE);
PdfStamper stamper = new PdfStamper(reader, new BufferedOutputStream(new FileOutputStream(fileOut)));
//这里的字体设置比较关键,这个设置是支持中文的写法
int total = reader.getNumberOfPages() + 1; PdfContentByte under;
Rectangle pageRect = null;
String [] content = waterMarkName.split("\r\n");
for (int i = 1; i < total; i++) {
pageRect = stamper.getReader().
getPageSizeWithRotation(i);
// 计算水印X,Y坐标
float x = pageRect.getWidth()/2;
float y = pageRect.getHeight()/2;
// 获得PDF最顶层
under = stamper.getOverContent(i);
under.saveState();
// set Transparency
PdfGState gs = new PdfGState();
// 设置透明度为0.2
gs.setFillOpacity(0.1f);
under.setGState(gs);
under.restoreState();
under.beginText();
under.setFontAndSize(base, 55);
under.setColorFill(BaseColor.GRAY); // 水印文字成35度角倾斜
under.showTextAligned(Element.ALIGN_CENTER
,content[0], x,
y, 35);
under.showTextAligned(Element.ALIGN_CENTER
,content[1], x+30,
y-50, 35);
// 添加水印文字
under.endText();
under.setLineWidth(1f);
under.stroke();
}
stamper.close();
file.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
pdf文件下载水印添加的中文与空格问题解决的更多相关文章
- 利用iTextSharp组件给PDF文档添加图片水印,文字水印
最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为: using S ...
- 「Python实用秘技04」为pdf文件批量添加文字水印
本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第4期 ...
- PDF的水印怎么去掉
很多朋友私下都有问过PDF去除水印的方法,现在在网上下载一些PDF电子书,几乎页面内都会有水印的,而且有的水印还带有超链接,稍微不注意就会点开进入别的页面内,不仅影响了阅读效果还带给读者负面影响,那如 ...
- 怎么编辑PDF,如何给PDF加水印
在使用PDF文件的时候,往往会用到PDF编辑器来修改,那么,在使用PDF编辑器修改文件的时候,想要在文件中添加水印,这该怎么操作呢,不会的小伙伴可以看看下面的文章了哦,说不定就会了. 1.打开运行PD ...
- java 实现 PDF 加水印功能
使用java代码实现给PDF加水印的功能 首先导入所需要的依赖 <dependency> <groupId>com.itextpdf</groupId> <a ...
- Gitbook 生成 pdf 中文字体错乱问题解决办法
Gitbook 生成 pdf 中文字体错乱问题解决办法 用过 Gitbook 的都知道, Gitbook 会自动生成 pdf 以提供下载, 但十分遗憾的是自动生成的 pdf 对中文的支持并不好, ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- javascript 过滤字符串中的中文与空格
js 如何过滤字符串里中文或空格呢?方法有很多种,我们可以使用替换与正则表达式来实现,本文向大家介绍两个简单的例子,感兴趣的码农可以参考一下. 1.javascript过滤空格: function m ...
- C#如何给PDF文档添加注释
整理文档时,我们可能会需要在一些或一段文字上添加注释加以说明,那如何以编程的方式实现呢?本文将实例讲述C#中如何使用免费组件给PDF文档添加文本注释,包括自由文本注释.自由文本注释能允许我们自定义它的 ...
随机推荐
- jdk源码阅读笔记-String
本人自学java两年,有幸初入这个行业,所以功力尚浅,本着学习与交流的态度写一些学习随笔,什么错误的地方,热烈地希望园友们提出来,我们共同进步!这是我入园写的第一篇文章,写得可能会很乱. 一.什么是S ...
- 死磕 java集合之ArrayBlockingQueue源码分析
问题 (1)ArrayBlockingQueue的实现方式? (2)ArrayBlockingQueue是否需要扩容? (3)ArrayBlockingQueue有什么缺点? 简介 ArrayBloc ...
- EIGRP 高级实验
一.环境准备 1. 软件:GNS3 2. 路由:c7200 二.实验操作 实验要求: 1.掌握EIGRP 的不等价均衡的条件. 2.掌握EIGRP 的metric 值修改方法. 3.掌握 EIG ...
- Dubbo Mesh 在闲鱼生产环境中的落地实践
本文作者至简曾在 2018 QCon 上海站以<Service Mesh 的本质.价值和应用探索>为题做了一次分享,其中谈到了 Dubbo Mesh 的整体发展思路是“借力开源.反哺开源” ...
- 基于Vue2-Calendar改进的日历组件(含中文使用说明)
一,前言 我是刚学Vue的菜鸟,在使用过程中需要用到日历控件,由于项目中原来是用jQuery写的,因此用了bootstarp的日历控件,但是配合Vue实在有点蛋疼,不够优雅…… 于是网上搜了好久找到了 ...
- arcgis api 3.x for js 地图加载多个 SHP 图层压缩以及 json 文件展示(附源码下载)
前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...
- Android中资源的引用
R.java简单来说就是资源 R.java会自动收录当前应用中所有的资源,并根据这些资源建立对应的ID,包括:布局资源.控件资源.String资源.Drawable资源等 可以理解把所以资源按规则存放 ...
- SQLServer多表联查,多表分页查询
多表联查: select p.*,s.Sheng , i.Shifrom [dbo].[ProductRecordInfo] --表名 p left join [ShengInfo] s on ...
- 需求分析&用例编写
一.需求分析? 1.什么是需求 软件产品必须完成的是以及必须具备的品质. 功能性需求:产品必须完成的那些事,要求一定的功能和品质. 例子:淘宝的用户名登录. 非功能性需求:产品必须具备的属性和品质.诸 ...
- ASP.NET Core 身份验证(一)
前言 这篇文章我想带领大家了解一下 ASP.NET Core 中如何进行的身份验证,在开始之前强烈建议还没看过我写的 Identity 系列文章的同学先看一下. Identity 入门系列文章: Id ...