如何设置现有PDF的密码?
答案 0 :(得分:3)
您是否看过我书中第12章的EncryptionPdf示例?
这很简单:
public void encryptPdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
stamper.setEncryption(USER, OWNER,
PdfWriter.ALLOW_PRINTING, PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
reader.close();
}
请注意,USER
和OWNER
的类型为byte[]
。您有不同的权限选项(查找以ALLOW_
开头的常量),您可以选择不同的加密算法。
至于参数:src
是现有PDF的路径。 dest
是加密PDF的路径。很明显,在阅读文件时无法写入文件。这在此解释:How to update a PDF without creating a new PDF?
答案 1 :(得分:0)
@Alberto的答案问题:如果只有字节数组作为输入,而又需要另一个字节数组作为输出,那么如何加密pdf,使用上一个答案。
我有一个名为addPassword(byte [] templateByte)的方法,该方法接受PDF文件的字节数组作为参数,并返回加密的字节数组作为响应。
public byte[] addPassword(byte[] templateByte)
{
String USER_PASS = "Hello123";
String OWNER_PASS = "Deva123";
PdfReader pdfReader = null;
ByteArrayOutputStream byteArrayOutputStream = ByteArrayOutputStream(templateByte.length);
byteArrayOutputStream.write(templateByte, 0, templateByte.length);
try
{
pdfReader = new PdfReader(templateByte);
PdfStamper stamper = new PdfStamper(pdfReader, byteArrayOutputStream);
stamper.setEncryption(USER_PASS.getBytes(), OWNER_PASS.getBytes(),
PdfWriter.ALLOW_PRINTING,
PdfWriter.ENCRYPTION_AES_128 | PdfWriter.DO_NOT_ENCRYPT_METADATA);
stamper.close();
pdfReader.close();
return byteArrayOutputStream.toByteArray();
}
catch (Exception e)
{
e.printStackTrace();
}
return byteArrayOutputStream.toByteArray();
}