【发布时间】:2021-09-13 12:09:20
【问题描述】:
我正在创建一个可以从 pdf 中提取文本的应用程序。为此,我正在使用 PdfBox 库。但是,当我从文件管理器导入 pdf 时,应用程序停止,并且在初始化 PDFTextStripper 的行的 Initialize 错误中给出异常。我该如何解决这个问题?
下面是从pdf中提取文本的功能。
private fun extractTextPdfFile() {
var document: PDDocument? = null
var parsedText: String? = null
try {
val inputStream: InputStream? = this.contentResolver.openInputStream(fileUri!!)
document = PDDocument.load(inputStream)
} catch (e: IOException) {
e.printStackTrace()
}
try {
val pdfStripper = PDFTextStripper()
pdfStripper.startPage = 0
if (document != null) {
pdfStripper.endPage = 1
}
parsedText="Parsed text: " + pdfStripper.getText(document)
} catch (e: IOException) {
e.printStackTrace()
} finally {
try {
document?.close()
} catch (e: IOException) {
e.printStackTrace()
}
}
findViewById<TextView>(R.id.file_path).text=parsedText
}
}
我已经使用 registerForActivityResult 来获取 pdf 文档 Uri。
private var fileUri: Uri? = null
private val getContent =
registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
// Handle the returned Uri
if (uri != null) {
fileUri = uri
} else {
Toast.makeText(
this,
"Cannot fetch document from the file manager",
Toast.LENGTH_SHORT
).show()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<Button>(R.id.Import).setOnClickListener {
getContent.launch("application/pdf")
if (fileUri != null)
extractTextPdfFile()
}
}
这是我得到的例外。我不知道它现在如何给出空指针异常,之前它给出了我提到的异常。
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void java.io.InputStream.close()' on a null object reference
at com.tom_roush.pdfbox.text.PDFTextStripper.<clinit>(PDFTextStripper.java:1874)
at com.example.doctranslator.MainActivity.extractTextPdfFile(MainActivity.kt:82)
at com.example.doctranslator.MainActivity.onCreate$lambda-1(MainActivity.kt:44)
at com.example.doctranslator.MainActivity.$r8$lambda$8z4EEPr6Q6JatIakz-DO65v-zdE(Unknown Source:0)
at com.example.doctranslator.MainActivity$$ExternalSyntheticLambda0.onClick(Unknown Source:2)
at android.view.View.performClick(View.java:8160)
at android.widget.TextView.performClick(TextView.java:16222)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8595)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
【问题讨论】:
-
你能发布完整的异常消息(包括堆栈跟踪)吗?
-
我添加了异常,但它现在给出了空指针异常。我很困惑,因为我没有更改代码。
-
您的 jar 文件有问题,请确保“com/tom_roush/pdfbox/resources/text/BidiMirroring.txt”存在。看看github.com/TomRoush/PdfBox-Android/blob/master/library/src/main/…,如果资源不存在,输入将为空。
-
如何在我的项目中添加这个 .txt 文件。我刚刚添加了 pdfBox 的依赖项来实现它。请帮我解决这个问题。
-
首先确保你使用的是maven。其次,尝试它是否适用于以前的版本。我无法直接提供帮助,因为我没有设置 android 构建环境。您应该尝试使用以前的版本,但也要在错误跟踪器上报告错误。提到文件丢失并且空值检查丢失。我查看了 .aar(不是 .jar)文件,但它丢失了。 repo1.maven.org/maven2/com/tom-roush/pdfbox-android/2.0.3.0
标签: java kotlin exception pdfbox pdf-extraction