波斯语PDF内容复制粘贴及Python提取时显示乱码问题的解决求助
解决波斯语PDF文本提取乱码的问题
Hey,我懂你碰到的这个糟心问题——波斯语PDF里的文字不管是直接复制粘贴还是用Python提取,全是乱码,但数字却能好好显示。这种情况大概率是PDF的字体嵌入或者字符编码搞的鬼,我给你整理几个亲测有效的解决办法:
1. 先检查PDF的字体嵌入情况
很多时候乱码是因为PDF里的波斯语字体没有被嵌入,系统找不到对应字体就会用默认字体替代,导致显示乱码。你可以用Adobe Acrobat这样的阅读器查看:
- 打开PDF,点击「文件」→「属性」→「字体」标签
- 查看波斯语对应的字体条目,如果标注了“未嵌入”或者“部分嵌入”,那就是这个问题
解决办法是用工具重新嵌入字体,比如用Ghostscript执行以下命令(需要先安装Ghostscript):
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dEmbedAllFonts=true -sOutputFile=embedded.pdf input.pdf
这个命令会把原PDF(input.pdf)的所有字体都嵌入进去,生成新的embedded.pdf,之后再复制或者提取文本应该就正常了。
2. 用PyMuPDF(fitz)替代常规库提取文本
PyPDF2这类基础库对非拉丁字符的支持不太好,而PyMuPDF(也就是fitz)处理复杂字体的能力强很多,大部分波斯语PDF都能正确提取。试试这段代码:
import fitz # 需要先安装:pip install pymupdf # 打开PDF文件 doc = fitz.open("你的PDF文件路径.pdf") extracted_text = "" # 逐页提取文本 for page in doc: extracted_text += page.get_text() # 打印提取的内容 print(extracted_text)
如果PDF有加密,记得先调用doc.authenticate("密码")解密后再提取。
3. 若文本是图像化的,用OCR工具识别
如果你的PDF是扫描件转的(文本其实是图像),那常规的文本提取方法肯定没用,这时候需要用OCR工具识别。推荐用pytesseract结合pdf2image,步骤如下:
- 先安装依赖库:
pip install pytesseract pdf2image opencv-python
- 安装Tesseract OCR引擎,并且下载波斯语语言包(语言代码是
fas) - 运行以下代码:
import cv2 import pytesseract from pdf2image import convert_from_path # 把PDF每页转成高清图像(dpi设为500保证识别准确率) pages = convert_from_path("你的PDF文件路径.pdf", dpi=500) for idx, page_img in enumerate(pages): # 保存临时图像文件 img_path = f"page_{idx}.jpg" page_img.save(img_path, "JPEG") # 读取图像并识别波斯语文本 img = cv2.imread(img_path) # 配置Tesseract使用波斯语识别 custom_config = r'--oem 3 --psm 6 -l fas' text = pytesseract.image_to_string(img, config=custom_config) print(f"第{idx+1}页提取内容:\n{text}\n")
这些方法应该能解决大部分波斯语PDF的乱码问题,你可以根据自己的PDF情况逐个尝试~
内容的提问来源于stack exchange,提问作者mehdi seifabadi




