Получение NoClassDefFoundError с помощью Ghost4j
Это мой первый квестинг, и я не нашел решения моей проблемы. Пожалуйста, не принимайте это неправильно, если мой текст не на английском языке.
Для моей программы я хочу изменить размеры изображений внутри существующего PDF-документа. Это должно происходить автоматически в программе Java. Во время поиска я нашел в Сети библиотеку Ghost4j, которая может решить мою проблему - возможно!
В качестве первого теста с Ghost4j, чтобы проверить, работает ли он, я хочу загрузить свой PDF-документ из базы данных MySQL и проверить 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)
(Примечание: если я использую новый File(Path) для doc.load и устанавливаю pdfSample Document. Это работает. Но не с 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
Для этого Проект реализует библиотеки, которые все поступают из загруженного пакета ghost4j:
- ghost4j-0.5.1
- IText-2.1.7
- джна-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/
Я понимаю, что 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 ответ
Вам не хватает зависимости Bouncycastle.
Я не думаю, что библиотека PDF будет зависеть от этого, за исключением случаев, когда необходимо защитить PDF, но вы найдете Bouncycastle здесь: http://bouncycastle.org/latest_releases.html
Попробуй с bcprov-jdk14-147.jar
и / или bcprov-ext-jdk14-147.jar
можно загрузить из репозитория Maven Central:
- http://repo1.maven.org/maven2/org/bouncycastle/bcprov-jdk14/1.47/
- http://repo1.maven.org/maven2/org/bouncycastle/bcprov-ext-jdk14/1.47/
- http://repo1.maven.org/maven2/org/bouncycastle/bcmail-jdk14/1.47/
- http://repo1.maven.org/maven2/org/bouncycastle/bctsp-jdk14/1.47/
Если это все еще не работает, попробуйте другие исключенные зависимости, перечисленные здесь:
<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 для получения этих зависимостей.