【问题标题】:How to extract parameter from pdf file using java code & pdfbox如何使用java代码和pdfbox从pdf文件中提取参数
【发布时间】:2018-12-10 11:55:42
【问题描述】:

我正在做一个从 pdf 文件中提取参数的 java 程序。我想提取 pdf 以获取像

这样的参数
  • 对象
  • endobj
  • 端流
  • 外部参照
  • 预告片
  • 开始外部参照
  • /页
  • /加密
  • /ObjStm
  • /JS
  • /JavaScript
  • /AA
  • /OpenAction
  • /JBIG2解码
  • /富媒体
  • /启动
  • /XFA

参数:

所以我希望得到如下图所示的输出:

【问题讨论】:

  • 所以你想从PDF中提取文本,然后统计出现次数?
  • @notyou 是的。你知道怎么做吗?
  • @notyou 我可以在 Kali Linux 中使用 pdfid 来做到这一点,但我不知道如何在我的程序中使用 java 来做到这一点。
  • 首先,你所说的 "参数" 是句法元素(例如 objendobj 封装一个间接对象)和 PDF 名称(例如 Pages 表示内页树节点的类型)。此外,不清楚您要在哪里搜索这些文本,仅在原始文件中或在加密或压缩流中。
  • 您提到了pdfid 工具。它旨在帮助识别恶意 PDF。它的作者说“它也会产生误报”...我会说它主要会为现在产生的常见文档产生误报。

标签: java parsing pdf extract pdfbox


【解决方案1】:

通过上面的评论所以你想从PDF中提取文本,然后计算出现次数?,你可以这样做:

阅读PDF文件:

String[] words = null;
try (PDDocument document = PDDocument.load(new File("C:\\path\\to\\file.pdf"))) {
    document.getClass();
    if (!document.isEncrypted()) {
        PDFTextStripperByArea stripper = new PDFTextStripperByArea();
        stripper.setSortByPosition(true);
        PDFTextStripper tStripper = new PDFTextStripper();
        String pdfFileInText = tStripper.getText(document);
        words = pdfFileInText.split("\\s+");
    }
}

然后打印出现的单词:

Arrays.stream(words)
       .collect(Collectors.groupingBy(s -> s))
       .forEach((k, v) -> System.out.println(k + " " + v.size()));

您可能需要根据自己的需要稍微调整一下。

【讨论】:

  • 考虑到搜索字符串的性质(语法 PDF 元素和 PDF 名称),我怀疑 OP 想要进行文本提取。
  • @mkl 我是这么想的,我想我从 cmets 的 OP 那里得到了澄清。不过,它可能看起来不是。
  • 我认为 OP 本人实际上有点不确定他将要做什么......他在评论中提到的工具 pdfid 明确地被设计为理解 PDF 语法,所以我想知道为什么 OP 试图使用一个库来重现它的工作......
猜你喜欢
  • 2014-07-11
  • 2012-12-30
  • 2023-03-05
  • 2015-11-19
  • 2013-11-15
  • 2012-02-01
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多