java对pdf数字信封加密_Java 加密PDF设置密码并添加水印

这是一个Java类,用于将日志文档转换为PDF并对其进行加密,设置密码以及添加水印。使用了lowagie.text库来操作PDF,包括创建PDF、设置密码和权限、添加水印等功能。
摘要由CSDN通过智能技术生成

标签:

/**

* 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包

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值