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

Java应用使用Tess4j识别多页PDF时如何标记每页结束分隔符

问题解答

Tess4j完全可以实现该需求,你只需要把原本整份PDF一次性识别的逻辑调整为逐页识别、逐页写入结果即可,实现逻辑非常简单:

  • 首先获取待识别PDF的总页数,你可以直接调用Tess4j自带的getPdfPageCount方法获取,不需要额外引入其他依赖
  • 遍历每一页,调用doOCR接口时指定仅识别当前遍历的单页
  • 每完成一页的识别,就将页识别结果和你自定义的分隔符++##- END--##++依次写入目标文本文档即可

你可以参考下面的核心实现代码:

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class PdfOcrService {
    public void ocrPdfWithPageSeparator(String pdfPath, String outputTxtPath) throws TesseractException, IOException {
        File pdfFile = new File(pdfPath);
        ITesseract tesseract = new Tesseract();
        // 此处保留你原本的Tesseract配置,比如语言包路径、识别阈值等
        tesseract.setDatapath("你的tessdata目录路径");
        tesseract.setLanguage("chi_sim+eng");
        
        int totalPages = Tesseract.getPdfPageCount(pdfFile);
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(outputTxtPath))) {
            for (int pageNum = 1; pageNum <= totalPages; pageNum++) {
                // 仅识别当前第pageNum页
                String pageContent = tesseract.doOCR(pdfFile, List.of(pageNum));
                writer.write(pageContent);
                // 写入页分隔标识
                writer.write("\n++##- END--##++\n");
            }
        }
    }
}

这种实现方式和你原本整份识别的性能、识别准确率完全一致,不会产生额外的性能开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:54:01