【问题标题】:How can I get max fontsize of a pdf using pdfbox如何使用 pdfbox 获取 pdf 的最大字体大小
【发布时间】:2015-03-23 01:35:53
【问题描述】:
  1. 我使用 pdfbox 从 pdf 中提取一些信息,但是如何提取 每个对象 信息?如果其中之一包含流,我该如何解码流以显示?

  2. 我能否从 pdf 框中获取 最大字体大小?我想如果我可以得到每个对象的字体大小并对其进行排序,那么我会得到具有最大字体大小的对象?

【问题讨论】:

  • 不要分心,不要闲聊(阅读help→tour),感谢和“你能帮帮我”之类的短语绝不是一个好问题的一部分

标签: object font-size pdfbox pdf-extraction


【解决方案1】:

我使用 pdfbox 提取 pdf 的一些信息。但是如何提取每个对象的信息。如果其中一个包含流,我如何解码流以显示。

如果每个对象是指作为页面内容的一部分绘制的所有内容,则这些对象包含在页面内容流和引用的 Xobject 流中。您可以使用派生自PDFStreamEngine 类的解析器来解析这些流。

该类已经完成了大部分繁重的工作,例如从流中检索单个操作、管理图形状态堆栈等。不过,对于绘制您感兴趣的对象的操作,您必须提供一些回调。

要了解如何正确扩展该类,请查看 PDFBox 提供的一些子类,例如PDFTextStripperPDFMarkedContentExtractorPageDrawer

我可以从 pdf 框中获取 最大字体大小 吗?我想如果我可以获取每个对象的字体大小并对其进行排序,那么我会得到具有最大字体大小的对象?

确实,您可以使用上述PDFTextStripper 或更准确地说,您可以使用从它派生的类。文本剥离器原样主要返回纯文本,但您可以覆盖其某些方法并获取带有附加信息的文本。

例如你可以覆盖writeString(String text, List<TextPosition> textPositions)。它的标准实现只使用text,即提取的纯文本,但您可以检查textPositions,即具有额外信息的文本,其中包括位置和大小。

This answer 显示如何覆盖 PDFTextStripper.writeString 获取字体名称的访问权限。同样,您可以访问字体大小。请注意,有两种TextPosition 方法,getFontSizegetFontSizeInPt,您实际上可能还需要另一种尺寸。

编辑

在评论中,OP 询问

如何开始使用 PDFSteamEngine???

如上所述,看看 PDFBox 提供的一些子类。最突出的肯定是PDFTextStripper

最简单的PDFTextStripper使用如下:

PDFTextStripper stripper = new PDFTextStripper();
stripper.setSortByPosition(true);

PDDocument document = PDDocument.load(PDF_DOCUMENT);
String text = stripper.getText(document);
document.close();

这只会提取文档的纯文本。如需更专业的任务,请查看以下示例用法:

PDFStreamEngine及其他子类的更多使用示例:

如何从 PDF 中获取文本位置???

正如我原来的回答中提到的,使用PDFTextStripper覆盖writeString(String text, List<TextPosition> textPositions)。它的标准实现只使用text,即提取的纯文本,但您可以检查textPositions,即具有额外信息的文本,其中包括位置和大小。

【讨论】:

  • 如何开始使用 PDFSteamEngine???如何从 PDF 中获取 Textposition???
猜你喜欢
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 2014-04-15
  • 2017-08-12
相关资源
最近更新 更多