使用 Uri 用 Kotlin 解析 pdf?
Posted
技术标签:
【中文标题】使用 Uri 用 Kotlin 解析 pdf?【英文标题】:Parsing pdf with Kotlin using a Uri? 【发布时间】:2020-11-16 04:28:07 【问题描述】:我在 android Studio 中编写 Kotlin 代码。用户从手机中选择一个文件(我需要以字符串的形式访问内容)。我有一个 Uri?用那个乌里?我可以从 .csv 和 .txt 文件中提取文本:
if (typeOfFile == ".txt" || typeOfFile == ".csv")
try
val ins: InputStream? = contentResolver?.openInputStream(uriFromSelectedFile)
val reader = BufferedReader(ins!!.reader())
textIWant = reader.readText()
...
获取文件类型也可以正常工作,但在打开 pdf 文件时,似乎没有任何效果。我尝试以各种方式使用来自 Apache 的 PDFBox。我尝试打开的pdf是一个简单的onePager,只包含可提取的文本(可以复制)like this pdf。
这是我尝试过的事情之一,当要打开的文件是 pdf 时手机会死机:
if (typeOfFile == ".pdf")
try
val myPDDocument:PDDocument = PDDocument(COSDocument(ScratchFile(File(uriFromSelectedFile.path))))
textIWant = PDFTextStripper().getText(myPDDocument)
...
我已经尝试了好几天了。有谁知道它在 Kotlin 中是如何工作的?
【问题讨论】:
请包含您尝试过的代码,并链接到 PDF。确保 PDF 包含要提取的文本(尝试从 Adobe Reader 复制和粘贴) 希望现在更好 您的代码看起来很可疑。在 Java 中,加载 PDF 是“PDDocument.load(file)”。你在做什么是不同的。我不知道 Kotlin,所以请找到如何调用静态方法。似乎不容易:***.com/questions/40352684 如果您设法更正了您的代码,以便 PDF 打开和文本剥离工作,请自己回答问题,这将有助于其他人。 我会尽快。现在我仍然不知道该怎么做。我正在继续进行更多的研究和尝试...... 【参考方案1】:它使用 tom_roush.pdfbox 和一个伴随对象工作:
import com.tom_roush.pdfbox.text.PDFTextStripper
class MainActivity : AppCompatActivity()
companion object PdfParser
fun parse(fis: InputStream): String
var content = ""
com.tom_roush.pdfbox.pdmodel.PDDocument.load(fis).use pdfDocument ->
if (!pdfDocument.isEncrypted)
content = PDFTextStripper().getText(pdfDocument)
return content
调用伴生对象的解析函数:
val fis: InputStream = contentResolver?.openInputStream(uriFromSelectedFile)!!
textIWant = parse(fis)
【讨论】:
太好了,你让它工作了!不要忘记关闭“fis”(除非 Kotlin 自动执行此操作)。以上是关于使用 Uri 用 Kotlin 解析 pdf?的主要内容,如果未能解决你的问题,请参考以下文章
Mockito.anyString()在Kotlin中与NPE崩溃