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
相关产品推荐
相关产品推荐

