如何从PNG生成含OCR的可搜索PDF并使用JPEG作为图片
在Debian系统下实现PNG转带JPEG图片的可搜索PDF方案
完全可以实现,通过结合Tesseract、ImageMagick和hocr-tools工具链,就能基于已有PNG图片生成内嵌JPEG格式图片的可搜索PDF,同时节省磁盘空间。具体步骤如下:
一、安装必要工具
在Debian终端执行以下命令安装所需软件包:
sudo apt update && sudo apt install tesseract-ocr imagemagick hocr-tools poppler-utils
tesseract-ocr:执行OCR识别,生成结构化的hocr格式文本imagemagick:将PNG图片转换为JPEG格式,支持调整压缩质量hocr-tools:包含hocr2pdf工具,用于合并JPEG图片与hocr文本生成带文本层的可搜索PDFpoppler-utils:可选,用于合并多页PDF为单个文件
二、单张图片处理流程
针对单张PNG图片,执行以下三步操作:
- 生成OCR识别的hocr文本文件
tesseract input.png output hocr
input.png:源PNG图片文件名output:输出的hocr文件前缀(最终生成output.hocr)- 如需识别中文,添加
-l chi_sim参数:tesseract -l chi_sim input.png output hocr
- 将PNG转换为JPEG格式(可调整压缩质量)
convert input.png -quality 80 output.jpg
-quality 80:设置JPEG压缩质量(范围1-100,数值越大质量越高、文件越大)- 若为黑白扫描文档,可添加
-monochrome参数进一步缩小体积:convert input.png -monochrome -quality 80 output.jpg
- 合成可搜索PDF
hocr2pdf -i output.jpg -o final.pdf < output.hocr
-i output.jpg:指定内嵌到PDF的JPEG图片-o final.pdf:输出的可搜索PDF文件名
三、批量处理脚本
如果需要处理目录下所有PNG图片,可创建以下shell脚本批量执行:
#!/bin/bash # 自定义JPEG压缩质量,建议值70-90 JPEG_QUALITY=80 # 可选:指定OCR语言,比如中文填chi_sim OCR_LANG="chi_sim" # 遍历当前目录下所有PNG文件 for img in *.png; do # 提取文件名(不含.png后缀) base_name=$(basename "$img" .png) # 生成hocr格式的OCR结果 tesseract -l "$OCR_LANG" "$img" "$base_name" hocr # 将PNG转为指定质量的JPEG convert "$img" -quality "$JPEG_QUALITY" "$base_name".jpg # 合成带文本层的单页PDF hocr2pdf -i "$base_name".jpg -o "$base_name".pdf < "$base_name".hocr # 清理中间文件(hocr和jpg,可选保留) rm "$base_name".hocr "$base_name".jpg done # 合并所有单页PDF为一个多页PDF(可选) pdfunite *.pdf final_all_pages.pdf
使用方法:
- 将脚本保存为
batch_ocr_pdf.sh - 赋予执行权限:
chmod +x batch_ocr_pdf.sh - 在PNG图片所在目录执行:
./batch_ocr_pdf.sh
注意事项
- 调整JPEG质量时,建议先测试不同数值,找到体积和清晰度的平衡点
- 如果扫描文档有倾斜,可先用ImageMagick的
-deskew参数校正:convert input.png -deskew 40% -quality 80 output.jpg - Tesseract支持多种语言包,可通过
sudo apt install tesseract-ocr-<语言代码>安装,比如英文是tesseract-ocr-eng
内容的提问来源于stack exchange,提问作者Max Görner
相关产品推荐
相关产品推荐

