英文:
How to read text from doc or pdf in JodConverter
问题
**Caused by:**
> java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'boolean java.io.File.isDirectory()'
```java
LocalOfficeManager officeManager = LocalOfficeManager.install();
try {
// 启动 office 进程并连接到已启动的实例(位于端口 2002)。
officeManager.start();
File inputFile = new File("storage/emulated/0/COVID-19/111.pdf");
wordtext = String.valueOf(JodConverter.convert(inputFile));
} catch (OfficeException e) {
e.printStackTrace();
} finally {
// 停止 office 进程
OfficeUtils.stopQuietly(officeManager);
}
> E/AndroidRuntime: 致命异常: 主进程: handbook_multi_maker.TJ, PID: 17976 java.lang.RuntimeException: 无法启动组件信息 {handbook_multi_maker.TJ/TJ.SecondActivity}: java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'boolean java.io.File.isDirectory()' 位置:android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3107) 位置:android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250) 位置:android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 位置:android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 位置:android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 位置:android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947) 位置:android.os.Handler.dispatchMessage(Handler.java:106) 位置:android.os.Looper.loop(Looper.java:214) 位置:android.app.ActivityThread.main(ActivityThread.java:7032) 位置:java.lang.reflect.Method.invoke(Native Method) 位置:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位置:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 原因:java.lang.NullPointerException: 尝试在空对象引用上调用虚拟方法 'boolean java.io.File.isDirectory()' 位置:org.jodconverter.local.office.LocalOfficeUtils.validateOfficeHome(LocalOfficeUtils.java:339) 位置:org.jodconverter.local.office.LocalOfficeManager$Builder.build(LocalOfficeManager.java:169) 位置:org.jodconverter.local.office.LocalOfficeManager.install(LocalOfficeManager.java:78) 位置:TJ.SecondActivity.initWebView(SecondActivity.java:132) 位置:TJ.SecondActivity.onCreate(SecondActivity.java:104) 位置:android.app.Activity.performCreate(Activity.java:7327) 位置:android.app.Activity.performCreate(Activity.java:7318) 位置:android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) 位置:android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087) 位置:android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250) 位置:android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) 位置:android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 位置:android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 位置:android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947) 位置:android.os.Handler.dispatchMessage(Handler.java:106) 位置:android.os.Looper.loop(Looper.java:214) 位置:android.app.ActivityThread.main(ActivityThread.java:7032) 位置:java.lang.reflect.Method.invoke(Native Method) 位置:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 位置:com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
<details>
<summary>英文:</summary>
**Caused by:**
> java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.io.File.isDirectory()' on a null object reference
```java
LocalOfficeManager officeManager = LocalOfficeManager.install();
try {
// Start an office process and connect to the started instance (on port 2002).
officeManager.start();
File inputFile = new File("storage/emulated/0/COVID-19/111.pdf");
wordtext = String.valueOf(JodConverter.convert(inputFile));
} catch (OfficeException e) {
e.printStackTrace();
} finally {
// Stop the office process
OfficeUtils.stopQuietly(officeManager);
}
> E/AndroidRuntime: FATAL EXCEPTION: main Process: handbook_multi_maker.TJ, PID: 17976 java.lang.RuntimeException: Unable to start activity ComponentInfo{handbook_multi_maker.TJ/TJ.SecondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.io.File.isDirectory()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3107) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7032) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.io.File.isDirectory()' on a null object reference at org.jodconverter.local.office.LocalOfficeUtils.validateOfficeHome(LocalOfficeUtils.java:339) at org.jodconverter.local.office.LocalOfficeManager$Builder.build(LocalOfficeManager.java:169) at org.jodconverter.local.office.LocalOfficeManager.install(LocalOfficeManager.java:78) at TJ.SecondActivity.initWebView(SecondActivity.java:132) at TJ.SecondActivity.onCreate(SecondActivity.java:104) at android.app.Activity.performCreate(Activity.java:7327) at android.app.Activity.performCreate(Activity.java:7318) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3087) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3250) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1947) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7032) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)
答案1
得分: 0
你之所以遇到这个错误,是因为JODConverter的默认行为是自动检测您将要使用的办公软件(LibreOffice或Apache OpenOffice)安装。在您的特定情况下,办公软件的主目录未找到(因此为null)。
因此,如果您的办公软件安装在自定义目录中,您可以使用officeHome属性。
以下是您更新过的代码:
OfficeManager officeManager =
LocalOfficeManager.builder()
.officeHome("您的办公软件主目录路径")
.install()
.build();
try {
// 启动办公软件进程并连接到已启动的实例(端口2002)。
officeManager.start();
File inputFile = new File("storage/emulated/0/COVID-19/111.pdf");
wordtext = String.valueOf(JodConverter.convert(inputFile));
} catch (OfficeException e) {
e.printStackTrace();
} finally {
// 停止办公软件进程
OfficeUtils.stopQuietly(officeManager);
}
英文:
You got this error because the default behavior of JODConverter is to auto-detect the office (LibreOffice or Apache OpenOffice) installation you will be working with. In your particular case, the office home directory was not found (thus null).
So, if your office installation is within a custom directory, you can use the officeHome property.
Here's your updated code:
OfficeManager officeManager =
LocalOfficeManager.builder()
.officeHome("Path to your office home")
.install()
.build();
try {
// Start an office process and connect to the started instance (on port 2002).
officeManager.start();
File inputFile = new File("storage/emulated/0/COVID-19/111.pdf");
wordtext = String.valueOf(JodConverter.convert(inputFile));
} catch (OfficeException e) {
e.printStackTrace();
} finally {
// Stop the office process
OfficeUtils.stopQuietly(officeManager);
}
专注分享java语言的经验与见解,让所有开发者获益!
评论