添加水印,并且增加权限

@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做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等的更多相关文章

  1. 【Java】使用iText生成PDF文件

    iText介绍 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  2. C#:IText构造PDF文件

    IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种 ...

  3. WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作)

    WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日 ...

  4. 用session做权限控制

    一个需要用户进行登录的网站,基本上都会设置用户权限,对不同的用户进行权限控制.例如:一个网站肯定会有一个管理员管理着普通的用户,普通的用户不可能对其他用户有着类似于增删改查等操作,这样网站都乱了--, ...

  5. java itext替换PDF中的文本

    itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...

  6. 在linux环境下使用itext生成pdf

    转载请注明出处 https://www.cnblogs.com/majianming/p/9537173.html 项目中需要对订单生成pdf文件,在不断的尝试之后,终于生成了比较满意的pdf文档. ...

  7. Java Itext 生成PDF文件

    利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...

  8. (转)关于使用iText导出pdf

    一.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  9. Spring Cloud Data Flow整合Cloudfoundry UAA服务做权限控制

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 关于Spring Cloud Data Flow这里不多介绍,有兴趣可以看下面的文章.本文主要介绍如何整合Dat ...

随机推荐

  1. 移位操作(>>、<<)

    public static void main(String[] args) { /** 移位就是二进制的数往左或右移动,因为接近计算机底层,所以速度比较快 * 8 4 2 1 * * 7 化为二进制 ...

  2. hadoop安装

    环境 RedHad Linux9.0  java6   hadoop1.2.1 hadoop下载地址:http://mirror.bit.edu.cn/apache/hadoop/common/ 版本 ...

  3. Google Material Design的图标字体使用教程

    使用教程 1. 打开Material icons下载页 2. 选择要下载的图标 (目前不能多选>_<) 3.选择要下载的格式即可 图标字体使用教程 [方法一] STEP 1: 引入字体文件 ...

  4. ThinkPHP实现支付宝接口功能

    最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下:一.下载支付宝接口包下载地址:https://doc.open.alipay. ...

  5. django authenticate

    程序少不了验证用户与权限分配.通过 Django 自带以及我们一些扩展就能够满足验证与权限的需求. 我在使用 Django 遇到的"login(request, user) 之后,再重定向这 ...

  6. 让 http 2来得更猛烈些吧

    今早在公交车上,把http2的官方讲解文档(还在草案之中)看了一圈,发现相对http 1.1确实改进了不少,完整的文档可通过:://www.gitbook.com/book/ye11ow/http2- ...

  7. 大流量网站性能优化:一步一步打造一个适合自己的BigRender插件

    BigRender 当一个网站越来越庞大,加载速度越来越慢的时候,开发者们不得不对其进行优化,谁愿意访问一个需要等待 10 秒,20 秒才能出现的网页呢? 常见的也是相对简单易行的一个优化方案是 图片 ...

  8. 浅谈 underscore 内部方法 group 的设计原理

    前言 真是天一热什么事都不想干,这个月只产出了一篇文章,赶紧写一篇压压惊! 前文(https://github.com/hanzichi/underscore-analysis/issues/15)说 ...

  9. asp.net mvc ajax 异步刷新例子

    这几天在asp.net中使用ajax来做异步刷新,这里整理一下 1.首先看前台页面点击的时候调用函数 function shuxin() { $.ajax( { url: "GetValue ...

  10. Gson解析json字符串

    // 解析传递过来的json字符串 JsonParser parser = new JsonParser(); JsonObject jsonObj = parser.parse(strJson).g ...