You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

波斯语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,步骤如下:

  1. 先安装依赖库:
pip install pytesseract pdf2image opencv-python
  1. 安装Tesseract OCR引擎,并且下载波斯语语言包(语言代码是fas
  2. 运行以下代码:
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

火山引擎 最新活动