Java 加密PDF设置密码并添加水印
/**
* Project Name:XXX
* File Name:EncryptLogFile.java
* Date:2016-6-12上午11:56:38
* Copyright (c) 2016, All Rights Reserved.
*
*/ package com.XXX.XXX.utils; import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException; import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.HeaderFooter;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.lowagie.text.pdf.PdfWriter; /**
* ClassName:EncryptLogFile
* Function: 日志文档转PDF并添加密码及水印. Date: 2016-6-12
* 上午11:56:38
*
* @author yang
* @version
*/
public class EncryptLogFile {
// 生成临时文件前缀
private static final String prefix = "tempFile"; // 所有者密码
private static final String OWNERPASSWORD = "12345678"; /**
* txt文件转换为pdf文件
*
* @param txtFile
* txt文件路径
* @param pdfFile
* pdf文件路径
* @param userPassWord
* 用户密码
* @param waterMarkName
* 水印内容
* @param permission
* 操作权限
*/
public static void generatePDFWithTxt(String txtFile, String pdfFile,
String userPassWord, String waterMarkName, int permission) {
try {
// 生成临时文件
File file = File.createTempFile(prefix, ".pdf");
// 创建pdf文件到临时文件
if (createPDFFile(txtFile, file)) {
// 增加水印和加密
waterMark(file.getPath(), pdfFile, userPassWord, OWNERPASSWORD,
waterMarkName, permission);
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 创建PDF文档
*
* @param txtFilePath
* txt文件路径(源文件)
* @param pdfFilePath
* pdf文件路径(新文件)
*/
private static boolean createPDFFile(String txtFilePath, File file) {
// 设置纸张
Rectangle rect = new Rectangle(PageSize.A4);
// 设置页码
HeaderFooter footer = new HeaderFooter(new Phrase("页码:",
setChineseFont()), true);
footer.setBorder(Rectangle.NO_BORDER); // step1
Document doc = new Document(rect, 50, 50, 50, 50);
doc.setFooter(footer);
try {
FileReader fileRead = new FileReader(txtFilePath);
BufferedReader read = new BufferedReader(fileRead);
// 设置pdf文件生成路径 step2
PdfWriter.getInstance(doc, new FileOutputStream(file));
// 打开pdf文件 step3
doc.open();
// 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法. step4
while (read.ready()) {
// 添加内容到pdf(这里将会按照txt文件的原始样式输出)
doc.add(new Paragraph(read.readLine(), EncryptLogFile.setChineseFont()));
}
// 关闭pdf文件 step5
doc.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
} /**
* 在pdf加密
*
* @param inputFile
* 原始文件
* @param outputFile
* 水印输出文件
* @param waterMarkName
* 水印名字
*/
private static void waterMark(String inputFile, String outputFile,
String userPassWord, String ownerPassWord, String waterMarkName,
int permission) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
outputFile));
// 设置密码
stamper.setEncryption(userPassWord.getBytes(),
ownerPassWord.getBytes(), permission, false);
stamper.close();
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 设置中文
*
* @return Font
*/
private static Font setChineseFont() {
BaseFont base = null;
Font fontChinese = null;
try {
base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.EMBEDDED);
fontChinese = new Font(base, 20, Font.NORMAL);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fontChinese;
}
}
传送门:加密所需Jar包
Java 加密PDF设置密码并添加水印的更多相关文章
- Java 加密、解密PDF文档
本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...
- 转 Java操作PDF之iText详细入门
转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...
- 破解加密PDF文件pdfcrack
破解加密PDF文件pdfcrack PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...
- des加密解密——java加密,php解密
最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...
- java加密解密的学习
注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...
- Java Security:Java加密框架(JCA)简要说明
加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...
- JAVA导出pdf实例
一.直接导出成PDF Java代码 1. import java.io.FileNotFoundException; 2. import java.io.FileOutputStream; 3. ...
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC
Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha 加密解密,曾经是我一 ...
- itextpdf JAVA 输出PDF文档
使用JAVA生成PDF的时候,还是有些注意事项需要处理的. 第一.中文问题,默认的itext是不支持中文的,想要支持,需要做些处理. 1.直接引用操作系统的中文字体库支持,由于此方案限制性强,又绑定了 ...
随机推荐
- 使用Amoeba for mysql实现mysql读写分离(测试可行)
Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注 分布式数据库 proxy 开发.座落与Client.DB S ...
- nginx反向代理使用网址速度变慢
最近公司网址加载静态文件的速度总是跟不上于是试着用带端口的ip来访问, 发现速度快不少于是将nginx的代理修改为ip的如: location / { proxy_pass http://localh ...
- Shell脚本检测程序,如果挂了就重启程序
脚本如下: #!/bin/sh #要检查的进程名 PROGRESS_NAME="heihu_server" #----------------------------------- ...
- SQL Server Profiler(转载)
SQL Server Profiler工具 一.SQL Profiler工具简介 SQL Profiler是一个图形界面和一组系统存储过程,其作用如下: 图形化监视SQL Server查询: 在后台收 ...
- asp ajax
//[AjaxPro.AjaxMethod()] //public DataTable loadChecked() //{ // return BDAContext.GetObject<ICNP ...
- JS数组遍历方法
常用数组遍历方法: 1.原始for循环 var a = [1,2,3]; for(var i=0;i<a.length;i++){ console.log(a[i]); //结果依次为1,2,3 ...
- 在MyEclipse中使用javadoc导出API文档详解
本篇文档介绍如何在MyEclipse中导出javadoc(API)帮助文档,并且使用htmlhelp.exe和jd2chm.exe生成chm文档. 具体步骤如下: 打开MyEclipse,选中想要制作 ...
- Hibernate中的session的线程安全问题
SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一 个SessionFactory并从中获取Session实例, 而Session不是线程安全的,Session中包含了数 据 ...
- 多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果
使用场景:如果需要拿到线程的结果,或者在线程完成后做其他操作,可以使用Callable 和 Futrue 1.定义一个线程池,向线程池中提交单个callable任务 ExecutorService t ...
- 【基础笔记】《html&CSS设计与构造网站》一书导读
◉HTML 1.结构网页使用HTML HyperText Markup Language 来描述页面结构超文本标记语言允许对文本建立链接,允许对文本进行标记网页开头都有一个DOCTYPE 文档类型 声 ...