java - 使用 PDF Stamper 对具有数字签名的 PDF 进行密码保护

标签 java pdf itext pdfstamper

我正在使用以下代码来密码保护 PDF。

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Secure_file {
    private static String USER_PASSWORD = "password";
    private static String OWNER_PASSWORD = "secured";
    public static void main(String[] args) throws IOException {
    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();
    }
}

它从src读取PDF,然后将PDF写入受密码保护的dest

现在,对于几乎所有 PDF 文件,上述代码都可以工作。但是,对于这种类型的 PDF 文件,此方法会失败。

此 PDF 文件与其他文件有何不同?

  1. 它的尺寸比其他的要大。即 110 Kb,而其他的是 2 kb(我认为这应该不是问题)。
  2. 此 PDF 文件经过数字签名,我认为这可能是导致该问题的原因。

因此,我想知道我可能做错了什么,或者是否有其他方法可以用密码保护各种 PDF。 如有任何帮助,我们将不胜感激。

最佳答案

也许,您可以删除此行并重试

| PdfWriter.DO_NOT_ENCRYPT_METADATA

关于java - 使用 PDF Stamper 对具有数字签名的 PDF 进行密码保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61056739/

相关文章:

javascript - 使用 mpdf 通过 AJAX 生成 PDF

php如何使用FPDF将图像包装在表格中

java - 'com.itextpdf.text.exceptions.InvalidPdfException : PDF header signature not found' when reading the input stream from servlet

java - 在itextpdf中应用位置提取策略后,我们可以使用文本提取策略吗?

java - 如何在java中添加弹出窗口到jtextFiled View

java - Windows cmd中的批处理文件不知道java程序何时终止

Java - jComboBox1 上的 ActionEvent 来更新 jComboBox2 - 键盘/鼠标 Enter 键条件

java - 发生故障时 Oracle Service Bus 回显 Soap 请求

javascript - Acrobat Javascript 保存和退出按钮

java - Itext 5.5 + Hwcrypto.js 添加签名 "Document has been altered or corrupted since it was signed"