使用PDFBox从PDF中获取文本行的边界框



有没有办法使用PDFBox获取文本行的边界框?

如果要计算生成文本行的内容流(或任何其他内容流)的边界框,则必须处理内容流并跟踪正在绘制的区域的边界。你不必真的画这一页。

为此,应扩展PDFStreamEngine并覆盖所有构造路径(包括剪裁路径)、填充和/或绘制路径以及显示图示符的方法。请注意,PDFBox 2.0.0提供了新的子类org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine,这应该会让您的任务更容易,但您也应该能够用1.8.x实现这一点——这只需要多花一点力气。参见org.apache.pdfbox.rendering.PageDrawerorg.apache.pdfbox.examples.rendering.CustomGraphicsStreamEngine了解PDFStreamEngine的示例实现。

还要注意,还有文本呈现模式3,其中文本操作符既不笔划也不填充字形(不可见文本)。这取决于您,您是否将在此模式中显示的文本视为绘画。透明颜色的填充或笔划操作也是如此。

对于所有其他正在寻找简单解决方案的人:扩展org.apache.pdfbox.text.PDFTextStripper并覆盖其成员函数writeString(String, List<TextPosition>)

您可以创建扩展PDFTextStripper并覆盖protected void writeString(String text, List<TextPosition> textPositions)CustomPDFTextStripper。在这种替代方法中,您需要从List<TextPosition>计算边界框的坐标。你可以查看我的答案https://stackoverflow.com/a/62966618/2598453在这里,您还可以找到为每个单词获取边界框的有效解决方案。

最新更新