15

我们有一个应用程序可以创建不使用 jasperreports 的 PDF。
它还在创建后使用 iText 操作所述 PDF。

我们最近开始在某些 PDF 上使用加密。这意味着在应用程序在创建 PDF 后可以处理 PDF 之前,必须对其进行解密。尝试使用 iText 这样做时PdfReader(String path, byte[] password),出现以下异常:

java.lang.VerifyError: class org.bouncycastle.asn1.ASN1Primitive overrides final method equals.(Ljava/lang/Object;)Z
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at com.simontuffs.onejar.JarClassLoader.defineClass(JarClassLoader.java:561)
    at com.simontuffs.onejar.JarClassLoader.findClass(JarClassLoader.java:475)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at com.itextpdf.text.pdf.PdfEncryption.<init>(PdfEncryption.java:148)
    at com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj(PdfReader.java:914)
    at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1294)
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:643)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:187)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:212)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:202)

该项目使用 Maven 构建为可运行的 .jar,并使用以下依赖项:
iText 5.4.2
bouncycastle 1.48

我应该提到 jasperreports 有自己的 iText 和 bouncycastle 依赖项:
iText 2.1.7
bouncycastle 1.38

我不知道发生了什么事,需要帮助。

4

4 回答 4

33

我最好的猜测是,您最终在类路径中使用了两个不同版本的 Bouncy Castle,并且发生这种情况时,类加载器已经从一个版本加载了超类,现在正尝试从另一个版本加载子类。这些版本的不同之处在于它们中的一个定义了最终的 equals 方法。

于 2013-06-20T12:10:55.773 回答
4

有同样的错误,我的解决方案可能会派上用场。在我的情况下,我所做的只是对 pdf 文档进行数字签名,使用 Maven 我在我的 pom.xml 中有 IText(itextpdf.jar/version 5.4.2) 和 Bouncycastle(bcprov-jdk15on.jar/version 1.55) 依赖项。然后我阅读了这本iText书籍Digital Signatures for PDF 文档中有关Bouncycastle 相关问题的一部分。我删除了 Bouncycastle(bcprov-jdk15on.jar/version 1.55) 依赖项并且错误消失了(noob 错误- bouncycastle 依赖项已经是一部分的 itext 依赖项不需要将两者分开)。

注意:如果您在删除 bouncycastle 依赖项后遇到任何 Bouncycastle 类文件未找到错误,请检查此

于 2016-10-19T08:02:51.930 回答
1

有同样的问题,并以一种奇怪的方式解决了。我所要做的就是添加 bcprov-ext

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-ext-jdk15on</artifactId>
        <version>1.52</version>
    </dependency>
于 2020-05-29T14:02:11.070 回答
1

我有类似的问题,因为我的类路径上有两个不同的工件:

<groupId>org.bouncycastle</groupId>
<artifactId>bcprov</artifactId>

 <groupId>org.bouncycastle</groupId>
 <artifactId>bcprov-jdk15on</artifactId>

我已经排除了bcprov,它为我解决了这个问题。

于 2019-05-29T12:19:05.003 回答