使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等
添加水印,并且增加权限
@Test
public void addWaterMark() throws Exception{
String srcFile="D:\\work\\pdf\\win10.pdf";//要添加水印的文件
String text="系统集成公司";//要添加水印的内容
int textWidth=200;
int textHeight=440;
PdfReader reader = new PdfReader(srcFile);// 待加水印的文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(new File("D:\\work\\pdf\\addWaterMark.pdf")));// 加完水印的文件
// byte[] userPassword = "123".getBytes();
byte[] ownerPassword = "12345".getBytes();
// int permissions = PdfWriter.ALLOW_COPY|PdfWriter.ALLOW_MODIFY_CONTENTS|PdfWriter.ALLOW_PRINTING;
// stamper.setEncryption(null, ownerPassword, permissions,false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_ASSEMBLY, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_COPY, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_DEGRADED_PRINTING, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_FILL_IN, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_MODIFY_ANNOTATIONS, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_MODIFY_CONTENTS, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_PRINTING, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.ALLOW_SCREENREADERS, false);
stamper.setEncryption(null, ownerPassword, PdfWriter.DO_NOT_ENCRYPT_METADATA, false);
stamper. setViewerPreferences(PdfWriter.HideToolbar|PdfWriter.HideMenubar);
// stamper.setViewerPreferences(PdfWriter.HideWindowUI);
int total = reader.getNumberOfPages() + 1;
PdfContentByte content;
BaseFont font = BaseFont.createFont("font/SIMKAI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
for (int i = 1; i < total; i++)// 循环对每页插入水印
{
content = stamper.getUnderContent(i);// 水印的起始
content.beginText();// 开始
content.setColorFill(BaseColor.GREEN);// 设置颜色 默认为蓝色
content.setFontAndSize(font, 38);// 设置字体及字号
content.setTextMatrix(textWidth, textHeight);// 设置起始位置
content.showTextAligned(Element.ALIGN_LEFT, text, textWidth, textHeight, 45);// 开始写入水印
content.endText();
}
stamper.close();
}
如果是在网页页面中的一部分显示可以使用js插件,在线PDF预览插件PDFObject.js
如果为了兼容IE8可能就需要你想其他的办法
我的解决办法是使用html自带的<object>标签,
如果你只是让别人看还不能保存的话,可以将stamper.setViewerPreferences(PdfWriter.HideWindowUI);这句话的注释打开,在IE8也能使用
我使用的是<object>在<DIV>的左移叠加隐藏(在火狐浏览器好像不能使用)
<title>here</title>
<style type="text/css">
#showPdf{width:705px; height:400px;margin:10px 20px 30px 40px; overflow:hidden;toolBar:hidden;border:5px solid #000}
</style>
</head>
<body onload="pdfObject.setShowToolbar(false);">
<div id="showPdf" >
<p style="margin-left:-45px;margin-bottom:10px;">
<object name="pdfObject" classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" type="application/pdf" width="750px" height="400px" border="0" >
<param name="SRC" value="<%=request.getContextPath()%>/waterMark.pdf">
</object>
</p>
</div>
<h1>生活不是我们活过的日子,而是我们记住的日子,为了讲述而在记忆中重现的日子。</h1>
欢迎大家阅览,多多评论其中的不足!!
为工程师之路添砖加瓦!!
使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等的更多相关文章
- 【Java】使用iText生成PDF文件
iText介绍 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...
- C#:IText构造PDF文件
IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种 ...
- WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)
WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...
- 用session做权限控制
一个需要用户进行登录的网站,基本上都会设置用户权限,对不同的用户进行权限控制.例如:一个网站肯定会有一个管理员管理着普通的用户,普通的用户不可能对其他用户有着类似于增删改查等操作,这样网站都乱了--, ...
- java itext替换PDF中的文本
itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...
- 在linux环境下使用itext生成pdf
转载请注明出处 https://www.cnblogs.com/majianming/p/9537173.html 项目中需要对订单生成pdf文件,在不断的尝试之后,终于生成了比较满意的pdf文档. ...
- Java Itext 生成PDF文件
利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...
- (转)关于使用iText导出pdf
一.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合Dat ...
随机推荐
- NYOJ 734
奇数阶魔方 描述 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n为奇数时我们有1种构造方法,叫做“右上方” ,例如下面给出n=3,5,7 ...
- C语言实现线程池
以前写过一篇关于如何使用多线程推升推送速度(http://www.cnblogs.com/bai-jimmy/p/5177433.html),能够到达5000qps,其实已经可以满足现在的业务,不过在 ...
- 可运行jar包的几种打包/部署方式
java项目开发中,最终生成的jar,大概可分为二类,一类是一些通用的工具类(不包含main入口方法),另一类是可直接运行的jar包(有main入口方法),下面主要讲的是后者,要让一个jar文件可直接 ...
- 2016-2017-2 《Java程序设计》课程学生博客和代码托管链接
2016-2017-2 <Java程序设计>课程学生博客和代码托管链接 博客 1552 20155201 李卓雯 20155202 张 旭 20155203 杜可欣 20155204 王 ...
- Eclipse JEE 安装JBPM 4.4 GPD
回顾往昔,发现自己好久没写博客了,想想以前自己是多么热衷于写博客分享,虽然分享的都是比较基础的东西,但每每看到访问量不断增加的时候内心还是爽爽的. 时间过的真的很快,离开学校和团队已经一个月了.来到了 ...
- MFC vs2012 Office2013 读写excel文件
近期在忙一个小项目(和同学一起搞的),在这里客户要求不但读写txt,而且可以读写excel文件,这里本以为很简单,结果...废话少说,过程如下: 笔者环境:win7 64+VS2012+Office2 ...
- Windows phone应用开发[19]-RSA数据加密
在这个系列的第十六章节中Windows phone应用开发[16]-数据加密 中曾详细讲解过windows phone 常用的MD5,HMAC_MD5,DES,TripleDES[3DES] 数据加密 ...
- linux命令总结
vmstat: linux监控命令,可以展现服务器状态值. 一般vmstat工具的使用是通过两个数字参数来完成的,第一个是采样的时间间隔,单位是秒,第二参数是采样的次数 例:vmstat 3 2 ( ...
- 【UOJ #14】【UER #1】DZY Loves Graph
http://uoj.ac/problem/14 题解很好的~ 不带路径压缩的并查集能保留树的原本形态. 按秩合并并查集可以不用路径压缩,但是因为此题要删除,如果把深度当为秩的话不好更新秩的值,所以把 ...
- ssh项目将搜索条件进行联动
<s:form namespace="/tb" action="tenderList" name="searchForm" id=&q ...