You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Apache PDFBox识别并移除PDF中的删除线文本?

替代Apache PDFBox处理删除线文本的可行方案

我明白你用PDFBox提取PDF文本时,想过滤掉带删除线的内容却遇到了方案失效的麻烦——那些Stack Overflow的帖子在多数场景下不管用确实让人头疼。给你推荐几个靠谱的替代库,每个都具备处理删除线文本的能力,适配不同的场景:

  • iText 7
    这是PDF处理领域的老牌工具,对文本属性的识别非常精准。它的文本提取API可以直接访问文本的RenderMode,其中删除线对应的是RenderMode.STRIKE。你可以自定义TextExtractionStrategy,在renderText方法里判断文本的渲染模式,跳过带有删除线标记的内容。举个简单的代码片段:

    public class StrikeThroughFilterStrategy extends LocationTextExtractionStrategy {
        @Override
        public void renderText(TextRenderInfo renderInfo) {
            // 检查是否带有删除线渲染模式
            if (!renderInfo.getTextRenderMode().equals(RenderMode.STRIKE)) {
                super.renderText(renderInfo);
            }
        }
    }
    

    之后用这个策略提取文本,就能自动过滤掉带删除线的内容。

  • Apache Tika
    Tika底层依赖PDFBox,但提供了更上层的解析封装。你可以扩展它的PDFParser,自定义文本提取逻辑:通过访问PDF的底层结构,检测文本的渲染属性或者关联的删除线图形,进而过滤掉目标内容。如果你的PDF里删除线是独立绘制的线条(不是文本自带属性),Tika也能结合图形检测逻辑来识别这些线条覆盖的文本区域。

  • PDFClown
    这个库对PDF的底层结构访问更为细致,能直接获取文本的视觉属性和关联的图形元素。它可以识别两种类型的删除线:一种是文本自身的渲染属性,另一种是单独绘制的线条。你可以遍历PDF的页面元素,检查文本是否关联了删除线笔画,或者文本区域是否被线条覆盖,从而过滤掉对应内容。

额外提醒:有些PDF的删除线不是通过文本渲染模式标记的,而是单独绘制的直线,这时候任何库都需要额外的逻辑——检测文本边界框是否与直线的边界框有重叠,以此判断是否为删除线文本。这种场景下,PDFClown的图形元素处理能力会更有优势。

内容的提问来源于stack exchange,提问作者Shantanu Bansal

火山引擎 最新活动