如何渲染受密码保护的PDF

问题描述 投票:0回答:1

我正在使用 Flying Saucer 从 XHTML 生成 PDF。渲染效果很好,但任何对 PDF 文档进行密码保护的尝试都会失败并出现异常。

我正在使用 Ajit Soman 在 https://stackoverflow.com/a/46024498/4517737 中推荐的代码。代码副本如下所示。 如果取消注释行,则会在“renderer.createPDF(os, false)”行中抛出异常。

例外情况是 “线程“JavaFX 应用程序线程”java.lang.RuntimeException 中出现异常:java.lang.reflect.InitationTargetException” (适用于 JavaFX 应用程序)。

对于普通 Java,异常是“线程“main”中的异常 java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1Encodable 在 com.itextpdf.text.pdf.PdfEncryption.(PdfEncryption.java:147)..... 引起原因:java.lang.ClassNotFoundException:org.bouncycastle.asn1.ASN1Encodable

final File outputFile = File.createTempFile(fileName, ".pdf");
FileOutputStream os = new FileOutputStream(outputFile);
PDFEncryption pdfEncryption  = new PDFEncryption();
String password= "password@123";
pdfEncryption.setUserPassword(password.getBytes());
ITextRenderer renderer = new ITextRenderer();

// the following line causes Exception
// renderer.setPDFEncryption(pdfEncryption);

renderer.setDocumentFromString(htmlContent);
renderer.layout();
renderer.createPDF(os, false);
renderer.finishPDF();

请帮忙。

pdf-generation password-protection flying-saucer
1个回答
0
投票

对于有类似问题的其他用户。我通过将其添加到 pom.xml 解决了这个问题:

<dependency>
  <groupId>org.bouncycastle</groupId>
  <artifactId>bcprov-jdk16</artifactId>
  <version>1.45</version>
</dependency>

版本很重要。高于 1.45 会导致同样的错误

© www.soinside.com 2019 - 2024. All rights reserved.