使用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>

欢迎大家阅览,多多评论其中的不足!!

为工程师之路添砖加瓦!!

时间: 2024-10-31 19:18:14

使用iText对pdf做权限的操作(不允许修改,不允许复制,不允许另存为),并且加水印等的相关文章

数据库权限分配操作

1.远程登录mysqlmysql -h ip -u root -p 密码2.创建用户格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";例1:增加一个test1用户,密码为123456,可以在任何主机上登录,并对所有数据库有查询,增加,修改和删除的功能.需要在mysql的root用户下进行mysql>grant select,insert,update,delete on *.* to [email protected]&quo

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

WebAPI 用ExceptionFilterAttribute实现错误(异常)日志的记录(log4net做写库操作) 好吧,还是那个社区APP,非管理系统,用户行为日志感觉不是很必要的,但是,错误日志咱还是得记录则个.总不能上线后报bug了让自己手足无措吧,虽然不管有木有错误日志报bug都是件很头疼的事... 我们知道webAPI也有好几个Filter,上篇文章我们做token与权限用到了ActionFilterAttribute,这次我们用ExceptionFilterAttribute来做

DB2权限与操作

DB2中的权限都能对数据库进行什么样的操作呢?下面就为您介绍DB2权限和操作之间的关系,如果您对DB2权限方面感兴趣的话,不妨一看. 获得 SYSADM        具有 SYSADM 权限的用户可以发出作用于 DB2 实例.实例内的任何数据库以及这些数据库内的任何对象的任何 DB2 命令.他们也能够访问数据库内的数据,授予或撤消特权和权限.SYSADM 用户是唯一被允许更新数据库管理器配置(Database Manager Configuration(DBM CFG))文件的用户.SYSAD

C#:IText构造PDF文件

IText构造PDF文件 1.1 生成Document Document是我们要生成的PDF文件所有元素的容器,因此要生成一个PDF文档,必须首先定义一个Document对象. Document有三种构造函数:    public Document():    public Document(Rectangle pageSize):    public Document(Rectangle pageSize, float marginLeft,    float marginRight, flo

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu

Java Itext 生成PDF文件

利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.OutputStream; import java.math.BigDecimal; import java.net.URL; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Arr

IText转PDF秒会

 IText转PDF秒会 最近在开发过程中,碰到了这样的需求:将图片及相关文字信息,按视觉标准,排版后直接转成PDF.因为之前没接触过,乍一听很懵,感觉会很难.但经过一番网上搜索学习后,发现其实很简单! (一)Maven引入依赖 注意:一定要按此版本号引入,不然会出现很多错误,包括"中文乱码.中文不输出或直接报错"等异常! <dependency> <groupId>com.itextpdf</groupId> <artifactId>i

linux IP动态变动之后 , 需要做的杂项操作

linux的动态ip经常变来变去,目前还没找到固定它不变化的方法.所以每次变动之后都需要做以下的操作,极其麻烦.(必须找到让linux IP 固定的方法) 1.先找到变化之后的动态ip地址 ifconfig -a 2.修改nginx与httpd的配置文件 里面对应的ip地址 vim /etc/nginx/upstream.conf vim /etc/httpd/conf/extra/httpd-vhosts.conf 3.修改远程数据库链接的ip地址 4.修改samba的远程链接的ip地址

iText导出pdf、word、图片

一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题. 二.iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转化为PDF文件. iText的