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

时间:2015-10-30 02:23:10

标签: pdf pdfbox

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

3 个答案:

答案 0 :(得分:0)

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

为了做到这一点,你应该扩展PDFStreamEngine并覆盖构造路径的所有方法(包括剪切路径),填充和/或描边路径,并显示字形。请注意,PDFBox 2.0.0提供了新的子类org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine,它可以让您更轻松地完成任务,但您也应该能够使用1.8.x实现这一点 - 只需要花费更少的精力。有关org.apache.pdfbox.rendering.PageDrawer的示例实现,请参阅org.apache.pdfbox.examples.rendering.CustomGraphicsStreamEnginePDFStreamEngine

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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