【发布时间】:2020-09-10 03:51:38
【问题描述】:
我的应用需要处理来自包含文本的 PDF 文件的输入(大部分)。我可以在我的服务器上进行解析,但我不想这样做。无论如何,在探索了我的文本提取选项后,我发现了 PDFBox 库及其与 Android 一起使用的端口 (https://github.com/TomRoush/PdfBox-Android)
在应用程序中,我向用户展示了一个标准 UI,用于通过 ACTION_OPEN_DOCUMENT 选择源文档。然后覆盖 onActivityResult 以获取 Uri - 你知道的,通常的东西。
问题是我不知道如何将它提供给 PDFBox。因为我们不是在谈论“文件”,而是在谈论“文档”,所以 lib 需要一个真实的文件路径。如果我为某个文件提供它,文本解析就可以了,但这肯定不是最佳实践,而且它不能对所有文档(云存储等)都完成,所以我这样做:
InputStream inputStream = getContentResolver().openInputStream(uri);
然后逐行阅读,最后我可以将所有内容都放在一个字符串中。显然,它工作正常。
但是如何将这些数据实际输入 PDFBox 以发挥其文本提取的魔力呢?当我没有“真实文件路径”时,我找不到任何关于如何在场景中执行此操作的文档。
也许现在有更好的方法?这个库很老了。基本上我需要从 PDF 中提取文本并在 Android 设备上进行,而不是通过 API 调用。真的卡在这里了。
【问题讨论】:
-
我真的不明白为什么你需要一个 Android 端口,对于不需要移植的东西。而且无法逐行读取二进制文件,因为它们没有行。也没有魔法……
-
@MikeM。查看“stripText”的示例代码部分
-
@galloper 是的,这表明
File不是必需的。注意他们是如何直接从从AssetManager获得的InputStream加载PDDocument。 -
@MartinZeitler 相信我它确实需要移植,否则移植版本不会出现。在转向这个之前,我尝试使用原版。我知道我可以读取流然后另存为文件,我希望避免它