/**
* 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设置密码并添加水印的更多相关文章

  1. Java 加密、解密PDF文档

    本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...

  2. 转 Java操作PDF之iText详细入门

    转 Java操作PDF之iText详细入门 2016年08月08日 11:06:00 阅读数:19490 iText是著名的开放项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成 ...

  3. 破解加密PDF文件pdfcrack

    破解加密PDF文件pdfcrack   PDF是常见的文档格式.它允许用户设置双重密码来保护文档.第一重是用户密码(user password),当打开PDF文档,输入该密码.第二重是所有者密码(ow ...

  4. des加密解密——java加密,php解密

    最近在做项目中,遇到des加密解密的问题. 场景是安卓app端用des加密,php这边需要解密.之前没有接触过des这种加密解密算法,但想着肯定会有demo.因此百度,搜了代码来用.网上代码也是鱼龙混 ...

  5. java加密解密的学习

    注:此文章只是对如何学习java加密解密技术做一个讲解.并不涉及具体的知识介绍,如果有需要请留言,有时间我补冲长.个人觉着学习一个学习方法比学习一个知识点更有价值的多. 首先,对于加密解密知识体系没有 ...

  6. Java Security:Java加密框架(JCA)简要说明

    加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以 ...

  7. JAVA导出pdf实例

    一.直接导出成PDF   Java代码 1. import java.io.FileNotFoundException; 2. import java.io.FileOutputStream; 3.  ...

  8. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC 博客分类: Java/Security Javabase64macmd5sha     加密解密,曾经是我一 ...

  9. itextpdf JAVA 输出PDF文档

    使用JAVA生成PDF的时候,还是有些注意事项需要处理的. 第一.中文问题,默认的itext是不支持中文的,想要支持,需要做些处理. 1.直接引用操作系统的中文字体库支持,由于此方案限制性强,又绑定了 ...

随机推荐

  1. Nginx的各种报错总结

    1.Nginx安装过程报错 错误一:软件依赖包未正确安装问题---PCRE依赖包没有安装 ./configure: error: the HTTP rewrite module requires th ...

  2. js控制5秒返回指定界面,或上一个界面

    js控制5秒返回指定界面,代码如下 <head> <meta http-equiv="Content-Type" content="text/html; ...

  3. navicat 12 破解

    一.安装 官方下载下载 http://www.navicat.com.cn/download/navicat-premium 二.安装完后下载破解文件 https://pan.baidu.com/s/ ...

  4. Git for Android Studio 学习笔记

    http://learngitbranching.js.org/ 一个特别好的git学习教程 创建一个project,然后导入github

  5. BZOJ2438: [中山市选2011]杀人游戏(tarjan)

    题意 题目链接 Sol 这题挺考验阅读理解能力的.. 如果能读懂的话,不难发现这就是在统计有多少入度为\(0\)的点 缩点后判断一下即可 当然有一种例外情况是\(1 -> 3, 2 -> ...

  6. java位运算之简单了解

    1.十进制转化为二进制 将正整数转化为二进制的方法“除2取余,逆序排列”. 2.二进制转化为十进制 表示整数的二进制,第一位为标志位,0代表为正整数,位数从右开始,第一个位数为0,各位位数记作n,取各 ...

  7. js中的this问题

    this this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上 this的最终指向的是那个调用它的对象(这里其实并不完全对,this的指向有时候会很微妙,得 ...

  8. 如何angular过滤器进行排序???

    首先定义一个json文件: 然后写HTML文件: <div id="box"> <!--第一个下拉框--> <select ng-model=&quo ...

  9. centos的nginx支持ssl

    首先看centos是否支持ssl 输入:openssl version 如无 则去 http://slproweb.com/products/Win32OpenSSL.html  寻找 生成私钥后面的 ...

  10. Android自定义之ScrollView下拉刷新

    公司项目,需要用到ScrollView的下拉刷新,一开始使用的时候PullToRefresh三方库的下拉刷新,我比较纠结第三档库,很强大,但是,公司项目的需求,PullToRefresh就不能做到了, ...