Python中如何无损转换PDF为图片文件或进行OCR识别,命令行形式?
我的目的是想 ocr 的一个 pdf 文件, 用 python 调用的方式, 我是用了百度 ocr 的接口, 但是这个接口没有办法转换,pdf 文件,可以转换图片文件,嗯,所以我用了 mutool 这个东西去转换 pdf 文件为图片文件,但是问题是,转换过来的图片是比较模糊的,这个应该不利于 ocr 识别,所以我现在想了两个办法,有没有什么高清可以无损转换 pdf 文件的方法?或者有没有什么直接可以 ocr 这个 pdf 文件的方法?
在这里先感谢各位了,
Python中如何无损转换PDF为图片文件或进行OCR识别,命令行形式?
7 回复
tesseract
import fitz # PyMuPDF
from PIL import Image
import sys
import os
def pdf_to_images(pdf_path, output_dir="output_images", dpi=300):
"""
将PDF每页转换为高质量PNG图片
参数:
pdf_path: PDF文件路径
output_dir: 输出目录
dpi: 输出分辨率(默认300)
"""
# 创建输出目录
os.makedirs(output_dir, exist_ok=True)
# 打开PDF文件
doc = fitz.open(pdf_path)
for page_num in range(len(doc)):
page = doc.load_page(page_num)
# 设置缩放比例(dpi/72 因为PDF默认72dpi)
zoom = dpi / 72
mat = fitz.Matrix(zoom, zoom)
# 渲染页面为图片
pix = page.get_pixmap(matrix=mat, alpha=False)
# 保存为PNG
output_path = os.path.join(output_dir, f"page_{page_num+1:03d}.png")
pix.save(output_path)
print(f"已保存: {output_path}")
doc.close()
return output_dir
def pdf_ocr_to_text(pdf_path, output_txt="output.txt"):
"""
使用OCR提取PDF中的文字
需要安装: pip install pytesseract pillow
还需要安装Tesseract OCR引擎
"""
try:
import pytesseract
from PIL import Image
import io
# 检查Tesseract是否安装
pytesseract.get_tesseract_version()
except Exception as e:
print("请先安装Tesseract OCR和pytesseract")
print("Ubuntu: sudo apt-get install tesseract-ocr")
print("Mac: brew install tesseract")
print("然后: pip install pytesseract pillow")
return
doc = fitz.open(pdf_path)
all_text = []
for page_num in range(len(doc)):
page = doc.load_page(page_num)
# 渲染页面为图片
pix = page.get_pixmap(dpi=300)
img_data = pix.tobytes("png")
# 转换为PIL Image
img = Image.open(io.BytesIO(img_data))
# 执行OCR
text = pytesseract.image_to_string(img, lang='chi_sim+eng')
all_text.append(f"--- 第 {page_num+1} 页 ---\n{text}\n")
print(f"已处理第 {page_num+1} 页")
# 保存文本
with open(output_txt, 'w', encoding='utf-8') as f:
f.write('\n'.join(all_text))
doc.close()
print(f"OCR结果已保存到: {output_txt}")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("使用方法:")
print("1. 转换为图片: python pdf_tool.py convert input.pdf [output_dir] [dpi]")
print("2. OCR识别: python pdf_tool.py ocr input.pdf [output.txt]")
sys.exit(1)
command = sys.argv[1]
if command == "convert":
pdf_path = sys.argv[2]
output_dir = sys.argv[3] if len(sys.argv) > 3 else "output_images"
dpi = int(sys.argv[4]) if len(sys.argv) > 4 else 300
pdf_to_images(pdf_path, output_dir, dpi)
elif command == "ocr":
pdf_path = sys.argv[2]
output_txt = sys.argv[3] if len(sys.argv) > 3 else "output.txt"
pdf_ocr_to_text(pdf_path, output_txt)
else:
print("未知命令,使用 'convert' 或 'ocr'")
安装依赖:
pip install PyMuPDF pillow pytesseract
命令行使用:
# 转换为图片(300dpi)
python pdf_tool.py convert document.pdf
# 转换为图片到指定目录,600dpi
python pdf_tool.py convert document.pdf high_res_images 600
# OCR识别
python pdf_tool.py ocr scanned_document.pdf
# OCR识别到指定文件
python pdf_tool.py ocr scanned_document.pdf result.txt
核心要点:
- PyMuPDF:高质量的PDF渲染引擎,支持高分辨率输出
- Pillow:图像处理,配合OCR使用
- Tesseract:开源OCR引擎,支持多语言(中文需
chi_sim语言包)
一句话建议: 用PyMuPDF做转换,Tesseract做OCR,这是最靠谱的组合。
GitHub 搜索 PyPDFOCR
xpdf. 或者… 不需要批量处理? 用 pdf.io 在线处理.
gs -sDEVICE=jpeg -sOutputFile=%09d.jpg -r300 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dBATCH -dNOPAUSE
这个工具 ok 的 无损转换 谢谢

