使用itext库签名PDF会引发错误



请帮助我,这是我第一次在pdf上使用签名。我想用证书签署一个pdf,但它给了我一个错误,我写下了,我正在使用itext-5.0.5在netbeans8.2(JAVA)中开发一个桌面应用程序。我读过一些关于依赖关系和版本的文章,我真的不知道如何解决这个问题。我很感激你的帮助,如果你能一步一步地向我解释,那就太好了。谢谢

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: org/bouncycastle/asn1/DERObject
at com.itextpdf.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:409)
at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:950)
at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:897)
at com.itextpdf.text.pdf.PdfStamper.close(PdfStamper.java:192)
at clases.Metodos.firmarFactura(Metodos.java:279)
at clases.VendedorHilo.run(VendedorHilo.java:49)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.DERObject
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 6 more

错误告诉您的CLASSPATH中没有BouncyCastle。对于您的问题的正常答案是:

检查您用于BouncyCastle的iText版本的POM文件版本。下载BouncyCastle版本,并将其放入您的类路径。

然而,出于某种原因,您使用的是2010年11月的iText的旧版本,而iText版本当时没有POM文件。

重要提示:在数字签名的上下文中,这是一个非常糟糕的主意自2010年以来,数字签名的世界发生了变化,这种变化导致数字签名功能比2010年的功能更安全。请告知你的雇主,他要求你创建一种过时的签名类型。

如果你的雇主有意用老式的方式创建签名,你可以查看旧的iText存储库,并搜索iText 5.0.5。您将在lib目录中找到几个弹性城堡罐子。下载bcmail-jdk14-138.jar、bcprov-jdk114-138.jar和bctsp-jdk14-138.jar,并将它们放在CLASSPATH中。

重要信息:由于BouncyCastle的性质,如果您的CLASSPATH中有多个版本的BouncyCCastle,则可能会出现奇怪的异常。这也是您可能想要使用iText的最新版本的另一个原因。

注意:如果将您的项目设置为Maven项目,则会容易得多。在这种情况下,声明对iText(最新版本)的依赖就足够了,Maven在您的位置上完成了所有繁重的工作。

最新更新