22

我正在尝试使用iText Java。当您运行示例“如何签名”时,会出现以下错误:

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.tsp.TimeStampTokenInfo

根据"Getting Started with iText - How to sign a PDF using iText",我必须使用BouncyCastle

我从BouncyCastle 下载页面 下载了文件:bcprov-jdk15on-147.jar 。
并添加到项目中:Java Build Path/Libraries/Add External JARs...

我添加了以下行:

Security.addProvider(new BouncyCastleProvider());

当您运行该示例时,会发生相同的错误。
所以我下载了另一个文件:bcpkix-jdk15on-147.jar,标题为“PKIX/CMS/EAC/PKCS/OCSP/TSP/OPENSSL”
并添加到项目中:Java Build Path/Libraries/Add External JARs...
现在我有了两个罐子。

运行示例时会出现以下错误:

Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DEREncodable

我尝试下载文件“bcprov-ext-jdk15on-147.jar”但没有解决问题。

我在 Windows 7 64 位上使用 iText 5.2.1 和 eclipse。

4

8 回答 8

30

iText 将 bouncycastle 依赖项标记为可选。如果需要它们,则需要在自己的 pom 文件中添加依赖项。

要找出项目中要包含的依赖项,请打开您正在使用的版本的 itextpdf pom.xml 文件(例如 5.3.2,此处)并搜索 2 个 bouncycastle 依赖项。

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.47</version>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcmail-jdk15on</artifactId>
        <version>1.47</version>
        <optional>true</optional>
    </dependency>

将它们复制到您的 pom 文件中并删除可选选项。

    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.47</version>
    </dependency>
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcmail-jdk15on</artifactId>
        <version>1.47</version>
    </dependency>
于 2013-07-31T13:03:45.557 回答
20

BouncyCastle 库正在经历重大的 API 更改,破坏了与 iText 等其他库的兼容性。

任何一个

  • 使用以前版本的 BouncyCastle 库。旧版本可以在这里找到。但是,您必须找到与此特定 BC 版本兼容的正确 iText 版本。

  • 自己构建 iText(SVN 主干已修复)。iText 可以使用 Maven 构建(在 SVN 的根目录中有一个简短的自述文件)。请注意,风险自负,主干中可能存在错误。

  • 等待 iText 的下一个版本。根据我的经验,iText 每隔几个月发布一次,有时更频繁,有时更少。我不是 iText 提交者,所以我不能给你任何 ETA。

更多信息可以在这个线程中找到

于 2012-04-30T22:41:35.280 回答
14

使用 itextpdf 版本 5.5.4 org.bouncycastle 依赖项被标记为<optional>true</optional>. 这意味着您必须在自己的 pom 中包含这些依赖项,否则您可能会遇到 classnotfound 异常。

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.4</version>
</dependency>

<!-- Bouncycastle dependencies necessary as they are optional = true
    in itextpdf ... but they're not-so-optional in reality -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.49</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.49</version>
</dependency>
于 2014-12-19T23:28:49.360 回答
5

从 bcprov-jdk15on-147 版本开始,在 org.bouncycastle.asn1 的路径下不再存在 DEREncodable 类。您可以使用 146 之前的版本(包括 146)来解决这个问题。

于 2014-04-15T08:32:10.090 回答
1

奇怪的是 bouncycastle.org 上提供的罐子似乎不包含这个类。也许,您可能想使用本页(链接)中列出的位置中的一个。

于 2012-04-30T22:32:53.877 回答
1

我有同样的问题,但是当我下载 libreria 并在 /WEBINF/LIB 上更新这些文件时修复它

于 2013-04-05T23:39:18.543 回答
1

幸运的是,现在依赖 jar 与 iText 一起交付。

请检查下面的存储库链接并下载extrajars.zip文件

http://sourceforge.net/projects/itext/files/

于 2014-02-12T10:14:02.273 回答
0

对于同样失败的 jruby-ers,我从 jruby-complete-1.6.6.jar 更新到 jruby-complete-9.1.13.0.jar 并且问题似乎解决了...... FWIW......

于 2017-10-25T05:06:14.183 回答