我使用 pdfbox 从 pdf 中提取一些信息,但是如何提取每个对象的信息?如果其中之一包含流,我如何解码流以显示?
我可以从 pdf 框中获得最大字体大小吗?我想如果我可以得到每个对象的字体大小并对它们进行排序,那么我会得到具有最大字体大小的对象?
1 回答
我使用 pdfbox 提取 pdf 的一些信息。但是如何提取每个对象的信息。如果其中一个包含流,我如何解码流以显示。
如果每个对象是指作为页面内容的一部分绘制的所有内容,则这些对象包含在页面内容流和引用的 Xobject 流中。PDFStreamEngine
您可以使用从该类派生的解析器来解析这些流。
该类已经完成了大部分繁重的工作,例如从流中检索单个操作、管理图形状态堆栈等。但是,您必须为绘制您感兴趣的对象的操作提供一些回调。
要了解如何正确扩展该类,请查看 PDFBox 提供的一些子类,例如PDFTextStripper
、PDFMarkedContentExtractor
或PageDrawer
。
我可以从 pdf 框中获得最大字体大小吗?我想如果我能得到每个对象的字体大小并对它们进行排序,那么我会得到具有最大字体大小的对象?
实际上,您可以使用上述PDFTextStripper
或更准确地说,您可以使用从它派生的类。文本剥离器原样主要返回纯文本,但您可以覆盖其某些方法并获取带有附加信息的文本。
例如,您可以覆盖writeString(String text, List<TextPosition> textPositions)
. 它的标准实现只使用text
, 即提取的纯文本,但您可以检查textPositions
, 即带有额外信息的文本,其中包括位置和大小。
这个答案显示了如何覆盖PDFTextStripper.writeString
获取访问字体名称。同样,您可以访问字体大小。请注意,有两种TextPosition
方法可以做到这一点,getFontSize
和getFontSizeInPt
,您实际上可能还需要另一种尺寸。
编辑
在评论中,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();
这仅提取文档的纯文本。对于更专业的任务,请查看以下示例用法:
- ExtractTextByArea.java - 有关如何从 PDF 文档的特定区域提取文本的 PDFBox 示例
- PrintTextLocations.java - 关于如何获取文本的一些 x/y 坐标的 PDFBox 示例
- 使用 PDFBox 获取每行的字体- stackoverflow 答案说明如何使用字体信息提取文本
- 使用 PDFBOX 根据 PDF 中的输出识别文本- stackoverflow 答案说明如何使用颜色信息提取文本
- 如何使用 PDFBOX 确定文本的人工粗体样式、人工斜体样式和人工轮廓样式- stackoverflow 答案说明如何提取识别某些人工样式的文本
- 使用 PDFBOX 提取表格数据的 PDF 文件- stackoverflow 回答说明了如何提取试图在输出中反映 PDF 文件布局的文本
- How to check if a text is transparent with pdfbox - stackoverflow answer说明如何仅提取某些图像未覆盖的文本
PDFStreamEngine
和其他子类的更多使用示例:
- PrintImageLocations.java - 关于如何获取图像位置的 x/y 坐标的 PDFBox 示例,
PDFStreamEngine
直接基于 - 使用 PDFBox 从 PDF 中获取可见签名?- stackoverflow 答案说明了如何绘制注释,尤其是签名可视化,基于
PageDrawer
如何从 PDF 中获取文本位置???
正如我原来的回答中提到的,使用 aPDFTextStripper
和override writeString(String text, List<TextPosition> textPositions)
。它的标准实现只使用text
, 即提取的纯文本,但您可以检查textPositions
, 即带有额外信息的文本,其中包括位置和大小。