如何通过Apache Tika Server获取PDF的hOCR格式OCR输出?
解决Apache Tika Server OCR输出hOCR格式的问题
结合你的环境(Tika 1.22、Tesseract 4.1.0、RHEL7)和遇到的问题,我梳理了几个关键的排查和解决步骤:
1. 修正HTTP请求头的拼写错误
你当前使用的X-Tika-OCRoutputType是错误的,正确的请求头应该是X-Tika-OCR-outputType(注意OCR与outputType之间的连字符)。Tika对请求头的拼写非常敏感,错写会导致配置被直接忽略,进而返回默认的纯文本或普通HTML。
2. 使用正确的端点与Accept头组合
/rmeta端点主要返回元数据+内容的JSON结构,并不适合获取hOCR格式输出。你应该使用/tika端点,同时设置Accept: text/html——因为hOCR本质是带有特定类名的HTML,Tika会将hOCR内容以HTML格式返回。
正确的curl命令如下:
curl -v -X PUT --data-binary @file.pdf \ "http://tika-server:8081/tika" \ -H "Content-Type: application/pdf" \ -H "X-Tika-OCR-outputType: hocr" \ -H "Accept: text/html"
3. 验证Tika Server的OCR配置
如果修正请求头后仍无效果,需要确认Tika Server是否正确启用了OCR功能。你可以创建自定义的tika-config.xml来明确配置OCR参数:
<properties> <parsers> <!-- 配置PDF解析器,启用图像提取和OCR策略 --> <parser class="org.apache.tika.parser.pdf.PDFParser"> <params> <param name="extractInlineImages" type="bool">true</param> <!-- 纯图像PDF用OCR_ONLY,混合文本+图像用OCR_AND_TEXT_EXTRACTION --> <param name="ocrStrategy" type="string">OCR_ONLY</param> </params> </parser> <!-- 配置Tesseract OCR解析器,指定输出类型为hocr --> <parser class="org.apache.tika.parser.ocr.TesseractOCRParser"> <params> <param name="outputType" type="string">hocr</param> </params> </parser> </parsers> </properties>
启动Tika Server时加载该配置文件:
java -jar tika-server-1.22.jar -c tika-config.xml
4. 验证Tesseract本身的hOCR输出能力
先排除Tesseract的问题,在RHEL7上执行以下命令测试:
# 准备一张测试图片(如test.png) tesseract test.png test_output hocr
如果生成的test_output.hocr包含<span class='ocr_word'>这类hOCR标签,说明Tesseract功能正常。若没有,需重新安装Tesseract或补充语言包:
sudo yum install tesseract tesseract-langpack-eng
额外注意事项
- 不要使用
Accept: text/hocr,Tika 1.22未注册该媒体类型,会触发报错,使用text/html即可获取标准hOCR内容。 - 若你的PDF是扫描件(纯图像),务必将PDFParser的
ocrStrategy设为OCR_ONLY,否则Tika会尝试提取不存在的文本,导致输出异常。
内容的提问来源于stack exchange,提问作者Amnon




