使用Ghost4j获取NoClassDefFoundError

时间:2014-09-29 15:59:20

标签: java itext bouncycastle pdf-conversion ghost4j

这是我在这里的第一次任务,我没有找到解决问题的方法。 如果我的文字是英文错误,请不要误解。

对于我的程序,我想调整现有PDF文档中的图像大小。这应该在Java程序中自动发生。 在我的搜索过程中,我在网上找到了Ghost4j库,这可以解决我的问题 - 也许!

作为Ghost4j试用的第一个测试,如果它有效,我想从MySQL数据库中加载我的PDF文档并查看pageCount。

这是我的简短代码:

... 
for (File file : convertableFiles) {
        InputStream inputStream = new ByteArrayInputStream(file.getFile());

        PDFDocument doc = new PDFDocument();
        doc.load(inputStream);
        System.out.println(doc.getPageCount());
}
...

错误来自第45行= doc.load(inputStream)

(注意:如果我为doc.load使用新文件(路径)并设置pdfSample文档。它可以工作。但不能使用inputStream)

当我执行我的程序时,我每次都会得到这个Excption:

Sep 29, 2014 4:54:53 PM ch.carauktion.dbresize.DBFileResizer convert
INFORMATION: P1 (asc): 0 / 1
Sep 29, 2014 4:54:54 PM ch.carauktion.dbresize.DBFileResizer run
SCHWERWIEGEND: P1 (asc): Exception
java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString
    at com.lowagie.text.pdf.PdfEncryption.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readDecryptedDocObj(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readDocObj(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    at org.ghost4j.document.PDFDocument.load(PDFDocument.java:45)
    at ch.carauktion.dbresize.pdf.DBPdfResizer.convertFiles(DBPdfResizer.java:50)
    at ch.carauktion.dbresize.DBFileResizer.convert(DBFileResizer.java:114)
    at ch.carauktion.dbresize.DBFileResizer.run(DBFileResizer.java:59)
Caused by: java.lang.ClassNotFoundException: org.bouncycastle.asn1.ASN1OctetString
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 10 more

对于这个Project实现了Libraries,它们都来自下载的ghost4j包:

     
  • ghost4j-0.5.1
  •  
  • 的iText-2.1.7
  •  
  • JNA-3.3.0
  •  
  • 的log4j-1.2.15
  •  
  • 共享记录-1.1.1
  •  
  • 公地-IO-1.3.1
  •  
  • 公地BeanUtils的-1.8.3

我搜索此错误的示例网站:

http://sourceforge.net/p/itext/mailman/itext-questions/thread/4F422974.1070002@redlab.be/

http://itext-general.2136553.n4.nabble.com/java-lang-NoClassDefFoundError-org-bouncycastle-asn1-ASN1OctetString-td3427288.html

据我所知,iText 2.1.7不再受支持了,我应该使用版本5.xx,但它不能在这里下载最新的iText Lib,当时在Ghost4j Jar中显然是Lib使用2.1.7。 否则,也许是我的错,我现在还不明白如何正确实现最新版本。

PS: 我正在使用Java 1.7,Eclipse Kepler,Windows 8.1

我很高兴,有人知道任何解决方案或者可以帮助我一点点。

Wudmaan

1 个答案:

答案 0 :(得分:2)

你错过了Bouncycastle依赖。

我不认为PDF库会依赖于此,除非需要保护PDF,但您在此处找到Bouncycastle:http://bouncycastle.org/latest_releases.html

尝试从Maven Central repository下载bcprov-jdk14-147.jar和/或bcprov-ext-jdk14-147.jar

如果仍然不起作用,请尝试使用此处列出的the other excluded dependencies

<dependency>
    <groupId>com.lowagie</groupId>
    <artifactId>itext</artifactId>
    <version>2.1.7</version>
    <exclusions>
        <exclusion>
            <artifactId>bcmail-jdk14</artifactId>
            <groupId>bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcmail-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcprov-jdk14</artifactId>
            <groupId>bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bcprov-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
        <exclusion>
            <artifactId>bctsp-jdk14</artifactId>
            <groupId>org.bouncycastle</groupId>
        </exclusion>
    </exclusions>
</dependency>

注意:您应该使用Maven来获取这些依赖项。