Java 使用Ghost4j获取NoClassDefFoundError

Java 使用Ghost4j获取NoClassDefFoundError,java,itext,bouncycastle,pdf-conversion,ghost4j,Java,Itext,Bouncycastle,Pdf Conversion,Ghost4j,这是我在这里的第一次任务,我没有找到任何解决问题的方法。 如果我的课文是断章取义的英语,请不要见怪 对于我的程序,我想调整现有PDF文档中的图像大小。这应该在Java程序中自动发生。 在我的搜索过程中,我在网上找到了Ghost4j库,它可以解决我的问题——也许 作为Ghost4j的第一个测试,我想从MySQL数据库中加载我的PDF文档并检查页面计数 这是我的简短代码: ... for (File file : convertableFiles) { InputStream in

这是我在这里的第一次任务,我没有找到任何解决问题的方法。 如果我的课文是断章取义的英语,请不要见怪

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

作为Ghost4j的第一个测试,我想从MySQL数据库中加载我的PDF文档并检查页面计数

这是我的简短代码:

... 
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)

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

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
2014年9月29日下午4:54:53 ch.carauktion.dbresize.DBFileResizer转换
信息:P1(asc):0/1
2014年9月29日下午4:54:54 ch.carauktion.dbresize.DBFileResizer运行
SCHWERWIEGEND:P1(asc):异常
java.lang.NoClassDefFoundError:org/bouncycastle/asn1/ASN1OctetString
网址:com.lowagie.text.pdf.PdfEncryption。(来源不详)
在com.lowagie.text.pdf.PdfReader.readdecrypteddocbj(未知来源)
网址:com.lowagie.text.pdf.PdfReader.readDocObj(未知来源)
请访问com.lowagie.text.pdf.PdfReader.readPdf(未知来源)
网址:com.lowagie.text.pdf.PdfReader。(来源不详)
网址:com.lowagie.text.pdf.PdfReader。(来源不详)
位于org.ghost4j.document.PDFDocument.load(PDFDocument.java:45)
位于ch.carauktion.dbresize.pdf.DBPdfResizer.convertFiles(DBPdfResizer.java:50)
位于ch.carauktion.dbresize.DBFileResizer.convert(DBFileResizer.java:114)
在ch.carauktion.dbresize.DBFileResizer.run(DBFileResizer.java:59)
原因:java.lang.ClassNotFoundException:org.bouncycastle.asn1.ASN1OctetString
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 10多
对于此项目,将实现库,这些库都来自下载的ghost4j包:

  • ghost4j-0.5.1
  • iText-2.1.7
  • jna-3.3.0
  • log4j-1.2.15
  • commons-logging-1.1.1
  • commons-io-1.3.1
  • commons-beanutils-1.8.3
“我的搜索”中此错误的示例站点:

我知道iText 2.1.7不再受支持,我应该使用5.x.x版本,但下载最新的iText库在Ghost4j Jar中显然使用了Lib 2.1.7,在这里它不起作用。 否则,可能是我的错,我现在不知道如何正确实现最新版本

附言: 我正在使用Java1.7、EclipseKepler和Windows8.1

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


Wudmaan

您缺少Bouncycastle依赖项

我不认为PDF库会依赖于此,除非需要保护PDF,但您可以在此处找到Bouncycastle:

尝试使用
bcprov-jdk14-147.jar
和/或
bcprov-ext-jdk14-147.jar
可从以下网站下载:

如果仍然不起作用,请尝试使用此处列出的:

<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>

com.lowagie
文字
2.1.7
bcmail-jdk14
弹跳船舱
bcmail-jdk14
org.bouncycastle
bcprov-jdk14
弹跳船舱
bcprov-jdk14
org.bouncycastle
bctsp-jdk14
org.bouncycastle

注意:您应该使用Maven来处理这些依赖关系

尝试使用bcprov-jdk15on-151.jar和bcprov-ext-jdk15on-151.jar-我认为使用bc1.51不是一个好主意。iText2.1.7很古老,很可能在1.47崩溃之前依赖于bc API。我考虑到了这一点(以及pom.xml依赖项)。非常感谢您的回答。它工作正常。我认为这是iText中的一个内部错误:)。虽然它可以工作,但我建议您尝试使用maven/gradle/等。我之所以回答这个问题,是因为我知道如何全局解决
NoClassDefFoundError
ClassNotFoundException
,而不是因为我知道ghost4j或iText。由于Ghost4j排除了这些依赖项,所以可能有一些原因(我不知道!)。