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

时间:2017-02-03 07:09:47

标签: itext digital-signature

请帮助我,第一次使用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

1 个答案:

答案 0 :(得分:1)

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

  

检查您用于BouncyCastle的iText版本的POM文件   你需要的版本。下载BouncyCastle版本,并将其放入您的版本中   CLASSPATH。

但是,出于某种原因,您使用的是从2010年11月开始的iText的古老版本,并且当时iText版本没有POM文件。

  

重要提示:在数字签名的背景下,这是一个非常糟糕的主意!自2010年以来,数字签名世界不断发展,这种演变导致数字签名功能比数字签名更安全2010年提供的功能。请告知您的雇主他要求您创建一种过时的签名。

如果您的雇主故意想要以老式的方式创建签名,您可以查看旧的iText存储库,然后搜索iText 5.0.5。你会在lib directory找到几个充气城堡的罐子。下载bcmail-jdk14-138.jar,bcprov-jdk14-138.jar和bctsp-jdk14-138.jar,并将它们放入CLASSPATH。

  

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

注意:如果您将项目设为Maven项目,则会更容易。在这种情况下,足以声明对iText(最新版本)的依赖,并且Maven会在您的位置完成所有繁重的任务。