我試圖用PDFBox和Groovy來解決一些問題。我試圖找出使用PDType1Font類'getStringWidth()方法的字符串的寬度。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
}
我記下了所有的不相關部分的代碼爲了清楚起見。
什麼問題?
更新:我搜索了一點關於如何將外部jar添加到IntelliJ中我的類路徑,我發現我需要去項目結構 - >模塊----->依賴項,然後我需要將我的庫配置爲依賴項。
我試圖做到這一點是這樣的:
但我仍然得到上述錯誤消息描述。
該代碼將需要類路徑上的PDFBox jar(及其依賴項,如fontbox)。這可以用Gradle來完成,但是對於一個簡單/簡單的例子,請查看這個項目中的'setvars.sh' - https://github.com/peidevs/OpenDataBookClub/tree/master/tools/PDF_Thresher –
請你詳細說明一下那?我並不完全理解這個setvars.sh文件是什麼,它是如何執行的以及何時執行的。我還用圖像更新了這篇文章。 –
您的圖像顯示您有不同的版本。顯然,你也需要有fontbox 2.0.3。 –