You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从PDF页面仅提取可见文本?解决iText提取含隐藏文本问题

如何解决PDF提取文本时包含隐藏内容的问题

我使用iText提取PDF文本时,结果中混入了页面不可见的内容(如文件生成痕迹、草稿页码、时间戳等),只需要提取页面上实际显示的可见文本。原尝试的代码如下:

public static void iTextExample() {
    String pdfFilePath = "path_to_pdf_file.pdf";
    try {
        PdfReader reader = new PdfReader(pdfFilePath);
        int pageNo = 10;
        String pageContent = PdfTextExtractor.getTextFromPage(reader,pageNo);
        System.out.println("Page Content: \n" + pageContent);
        reader.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

解决方法

1. 自定义文本提取策略过滤隐藏文本

iText默认会读取PDF中所有文本内容,不管是否可见。可以通过自定义FilteredTextEventListener,根据隐藏文本的特征(如包含特定标识、颜色异常)进行过滤:

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor;
import com.itextpdf.kernel.pdf.canvas.parser.listener.FilteredTextEventListener;
import com.itextpdf.kernel.pdf.canvas.parser.listener.LocationTextExtractionStrategy;
import com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo;
import com.itextpdf.kernel.colors.ColorConstants;

import java.io.IOException;

public class VisibleTextExtractor {
    public static void main(String[] args) throws IOException {
        String pdfFilePath = "path_to_pdf_file.pdf";
        PdfReader reader = new PdfReader(pdfFilePath);
        PdfDocument pdfDoc = new PdfDocument(reader);

        // 自定义过滤规则:剔除含特定标识、时间戳的隐藏文本,同时过滤白色文本
        FilteredTextEventListener filteredStrategy = new FilteredTextEventListener(
                new LocationTextExtractionStrategy(),
                renderInfo -> {
                    String text = renderInfo.getText().trim();
                    // 过滤包含.indd的文件痕迹、页码标识、时间戳格式内容
                    if (text.contains(".indd") || text.startsWith("Page ") || text.matches("\\d+/\\d+/\\d+.*")) {
                        return false;
                    }
                    // 过滤与背景色一致的白色文本
                    return !renderInfo.getFillColor().equals(ColorConstants.WHITE);
                }
        );

        PdfCanvasProcessor processor = new PdfCanvasProcessor(filteredStrategy);
        processor.processPageContent(pdfDoc.getPage(10));
        String visibleContent = ((LocationTextExtractionStrategy) filteredStrategy.getDelegateStrategy()).getResultantText();

        System.out.println("可见页面内容:\n" + visibleContent);

        pdfDoc.close();
        reader.close();
    }
}

2. 结合OCR提取可见文本(针对文本层混乱的PDF)

如果PDF的文本层本身存在大量无效隐藏内容,直接提取文本层效果不佳,可以先将PDF页面转为图片,再用OCR工具(如Tesseract)识别视觉可见的内容,完全规避文本层的隐藏信息问题。

说明

你遇到的隐藏文本多是PDF生成工具(如InDesign)留下的残留元数据,通过针对性的过滤规则可以精准剔除这类内容。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:13:14