如何在android kotlin中解码从pdf文件中提取的文本?

问题描述 投票:0回答:1

我是 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")
            }
        }

选择文件并运行该方法后,文本完全无法读取。感谢您的帮助。

kotlin pdf inputstream stringbuilder
1个回答
0
投票

Pdf 不是纯文本格式。

如果您想解析它,可以在这里找到规范:https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf

或者,最好您可以导入许多 Java/Kotlin PDF 库之一并使用它来阅读。

© www.soinside.com 2019 - 2024. All rights reserved.