我是 Kotlin 新手。我正在创建一个应用程序,在用户选择/选取 PDF 文件后,他将看到提取的文本片段。不幸的是,每次我从 PDF 文件中读取文本时,它都无法读取。即:
%PDF-1.4
%����
1 0 obj
<</Title (MojPdf)
/Producer (Skia/PDF m123 Google Docs Renderer)>>
endobj
3 0 obj
<</ca 1
/BM /Normal>>
endobj
5 0 obj
<</Filter /FlateDecode
/Length 326>> stream
x��SQN�0��)r�evllj��`l���&!����D�n*sBk�6ʋ_^�m�P��'s������~������x��arػ����5\{�H���v��Ac{+�K�c����[n*������+���J�w�d��*1e߽�??�[߽9�!BV�\�Db�䀂:���n��!�\�ϋ��R(',�)���� Z�V=P�KB.4و��Q3F�:b}9�Ιe�!wCa@�Z��4��tDV�B�??%J,�M��??P,*z.��+�����qm5e�����ej��F5��d��l9��m�@�_u�Q�v#����[�}V�(;
等等...
我已经尝试过各种方式,添加不同的字符集UTF-8和其他字符集,使用reader或bufferreader...... 我正在使用这种方法从 PDF 中获取文本:
val result = remember { mutableStateOf<Uri?>(null) }
var stringResult = remember {
""
}
var stringDienst = remember {
""
}
val applicationContext = LocalContext.current
val contentResolver = applicationContext.contentResolver
@Throws(IOException::class)
fun readTextFromUri(uri: Uri): String {
val stringBuilder = StringBuilder()
contentResolver.openInputStream(uri)?.use { inputStream ->
BufferedReader(InputStreamReader(inputStream, "UTF-8")).use { reader ->
var line: String? = reader.readText()
while (line != null) {
stringBuilder.append(line)
line = reader.readLine()
}
}
}
Log.d(TAG, "stringBuilder: $stringBuilder")
return stringBuilder.toString()
}
val launcher = rememberLauncherForActivityResult(ActivityResultContracts.OpenDocument()) {
result.value = it
if (it != null) {
stringResult = readTextFromUri(it)
}
}
Column {
Row {
Button(onClick = {
launcher.launch(arrayOf("application/pdf"))
}) {
Text(text = "Select Document")
}
}
Row {
Text(text = "stringDienst: $stringDienst")
}
}
选择文件并运行该方法后,文本完全无法读取。感谢您的帮助。
Pdf 不是纯文本格式。
如果您想解析它,可以在这里找到规范:https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf
或者,最好您可以导入许多 Java/Kotlin PDF 库之一并使用它来阅读。