【问题标题】:Getting text from PDF using Apache PDFBox使用 Apache PDFBox 从 PDF 中获取文本
【发布时间】:2021-01-05 00:36:10
【问题描述】:

我如何获得有关 pdf 结构的信息,我是指文本还是图片?我需要我的程序在其他文件夹中移动没有文本的 pdf,但现在我得到的只是一个空的 txt 文件。

try (FileWriter writer = new FileWriter(outputFile)) {
                PDDocument document = new PDDocument().load(file);
                PDFTextStripper pdfTextStripper = new PDFTextStripper();
                String text = pdfTextStripper.getText(document);
                writer.write(text);
                document.close();
            } catch (IOException e){
                e.printStackTrace();
            }

另外,从保存在 pdf 网页中获取文本时遇到问题。它看起来像:

我认为编码有问题,但不知道该怎么办

【问题讨论】:

  • "pdf 的结构,我的意思是文本或图片" - 你到底是什么意思?仅仅是文字与图像的比例之类的东西吗?哪种图像,矢量图形或位图?... “我认为编码有问题,但不知道该怎么办” - 通常这样的意思是 pdf 没有包含文本提取所需的数据。您是否测试过从 Adob​​e Reader 复制和粘贴是否会返回更好的结果?
  • "pdf 的结构,我的意思是文本或图片" - 我的意思是,pdf 只能包含没有文本的图片,例如保存在 pdf 中的扫描文档。 “您是否测试过从 Adob​​e Reader 复制和粘贴是否会返回更好的结果?” - 在默认的 ubuntu 文档查看器中测试,没问题
  • 如果由于上述文本提取结果您(几乎)什么也没有,您可以查找图像。请参阅PrintImageLocations PDFBox 示例作为正确图像信息检索的示例。 ... “在默认的 ubuntu 文档查看器中测试,没问题” - 在这种情况下,我们需要一个示例 PDF 来检查。
  • 我刚刚从开发头切换到 2.0.21,但从您的示例 PDF 中提取文本仍然没有问题。啊,我只是可以重现像你这样的图像:输出文本是 UTF-8 编码的,但是通过强制我的文本查看器采用 UTF-16 编码,输出看起来和你的一样。因此,要么将您的文本查看器切换到 UTF-8,要么明确告诉您的 FileWriter 使用 UTF-16。
  • @mkl,非常感谢,刚刚尝试使用 LibreOffice Writer 打开文档,没关系,我认为是因为特定的字体。再次感谢您!

标签: java pdfbox txt


【解决方案1】:

您的代码工作正常,您的文本查看器假定编码错误。

使用您的代码和与您相同的 PDFBox 版本,我得到正确的提取文本:

但是当我强迫我的查看器采用 UTF-16 编码时,我得到的东西与你得到的非常相似:

文件本身并没有通过 BOM 或任何东西指示任何特定编码:

因此,您的文本查看器要么错误地猜测 UTF-16 编码,要么配置 使用它。

因此,要么将您的文本查看器切换为使用 UTF-8,要么明确告诉您的 FileWriter 使用 UTF-16。


根据您的具体安装,文件编码实际上可能不同。不过,由于我的 UTF-16 视图看起来与您的非常相似,因此编码很可能至少类似于 UTF-8,可能是一些 ISO 8859-x...

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 2014-10-13
    • 2012-12-30
    • 2015-11-19
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    相关资源
    最近更新 更多