有没有办法使用PDFBox获取文本行的边界框?
答案 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.CustomGraphicsStreamEngine
和PDFStreamEngine
。
还要注意文本渲染模式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,在这里还能找到有效的解决方案,以获取每个单词的边界框。