如何使用pdfbox获取pdf的最大字体大小

时间:2015-03-23 01:35:54

标签: object font-size pdfbox pdf-extraction

  1. 我使用pdfbox提取来获取pdf中的一些信息,但是如何提取每个对象信息?如果其中一个包含流,我该如何解码要显示的流?

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

1 个答案:

答案 0 :(得分:3)

  

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

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

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

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

  

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

的确,您可以使用上面提到的PDFTextStripper或更多,您可以使用从中派生的类。文本剥离器主要返回纯文本,但您可以覆盖其某些方法并获取带有其他信息的文本。

E.g。你可以覆盖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获取Textposition?

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