Я пытаюсь немного пообщаться с PDFBox и Groovy. Я пытаюсь выяснить ширину строки, используя метод класса getTringWidth() класса PDType1Font.Groovy не может загрузить класс
Моя проблема заключается в том, что каждый раз, когда я скомпилировать и запустить код, я получаю сообщение об ошибке сказав следующее:
Error:Groovyc: java.lang.RuntimeException: java.lang.NoClassDefFoundError: Unable to load class org.apache.pdfbox.pdmodel.font.PDType1Font due to missing dependency org/apache/fontbox/type1/DamagedFontException
at org.codehaus.groovy.control.CompilationUnit.convertUncaughtExceptionToCompilationError(CompilationUnit.java:1091)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1069)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:591)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
at org.jetbrains.groovy.compiler.rt.GroovyCompilerWrapper.compile(GroovyCompilerWrapper.java:62)
at org.jetbrains.groovy.compiler.rt.DependentGroovycRunner.runGroovyc(DependentGroovycRunner.java:115)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jetbrains.groovy.compiler.rt.GroovycRunner.intMain2(GroovycRunner.java:135)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.runGroovycInThisProcess(InProcessGroovyc.java:156)
at org.jetbrains.jps.incremental.groovy.InProcessGroovyc.access$000(InProcessGroovyc.java:51)
at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:85)
at org.jetbrains.jps.incremental.groovy.InProcessGroovyc$1.call(InProcessGroovyc.java:82)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Вот код:
import org.apache.pdfbox.pdmodel.font.PDType1Font
float getStringWidth(String text) {
PDType1Font font = new PDType1Font(PDType1Font.HELVETICA)
float width = font.getStringWidth(text)/1000 * 8;
return width
}
Я записал все нерелевантные части из код для ясности.
В чем проблема?
UPDATE: Я немного искал, как добавить внешнюю банку в мой путь к классам в IntelliJ, и я узнал, что мне нужно перейти к структуре проекта -> Модули -----> Зависимости, а затем мне нужно настройте мою библиотеку как зависимость.
Я пытался сделать это так:
Но я все еще получаю показано выше сообщение об ошибке.
Код будет содержать банку PDFBox (и его зависимости, например, fontbox) в пути к классам. Это можно сделать с помощью Gradle, но для простого/простого примера, посмотрите «setvars.sh» в этом проекте - https://github.com/peidevs/OpenDataBookClub/tree/master/tools/PDF_Thresher –
Не могли бы вы рассказать о что? Я не совсем понял, что это за файл setvars.sh и как он выполняется, и когда. Я также обновил этот пост и изображение. –
Ваше изображение показывает, что у вас разные версии. Очевидно, что у вас тоже есть fontbox 2.0.3. –