如何使用iText仅将没有所有者密码的用户密码添加到PDF

时间:2013-01-20 01:10:03

标签: java pdf itext

如何在不使用iText添加所有者密码的情况下仅将用户密码添加到pdf文件中?据我所知,似乎只能通过添加用户密码和所有者密码来实现。

2 个答案:

答案 0 :(得分:4)

加密现有PDF的方式如下:

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();
}

请参阅http://itextpdf.com/examples/iia.php?id=219

如果OWNER为null,则会生成随机所有者密码(无人知晓的密码)。也许这就是你的客户意味着什么。正如mkl已经解释过的那样,拥有一个带有USER密码但没有OWNER密码的PDF是没有意义的。

答案 1 :(得分:0)

以下代码是您添加所有者密码所需的代码。

  JRPdfExporter exporter = new JRPdfExporter();       
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperprintobj);
  exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new File(fileName));
  exporter.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE);
  exporter.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE);
  //exporter.setParameter(JRPdfExporterParameter.USER_PASSWORD, "jasper");
  exporter.setParameter(JRPdfExporterParameter.OWNER_PASSWORD, "reports");
  exporter.setParameter(
    JRPdfExporterParameter.PERMISSIONS, 
    new Integer(PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING)
    );
  exporter.exportReport(); // finally export as pdf

在生成pdf的java中使用此代码。