You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现PDF文本着色、英译及图片提取问题求助

问题解决方案

一、为TXT文件中的数字及特定字符串着色

纯文本TXT本身不支持原生颜色,但可以通过ANSI转义序列在终端输出时实现着色,或生成HTML等带格式的文件。以下是终端着色的实现代码,可自定义目标字符串和颜色:

import re

# 定义ANSI颜色码
RED = '\033[91m'
BLUE = '\033[94m'
RESET = '\033[0m'

# 读取目标TXT文件
txt_path = 'AR_Finland_2021.txt'
with open(txt_path, 'r', encoding='utf-8') as f:
    content = f.read()

# 正则匹配规则:匹配数字 + 自定义特定字符串(示例为"Finland",可自行修改)
pattern = re.compile(r'(\d+)|(Finland)')

# 为匹配内容添加颜色标记
def colorize_match(match):
    if match.group(1):
        return f"{RED}{match.group(1)}{RESET}"
    elif match.group(2):
        return f"{BLUE}{match.group(2)}{RESET}"
    return match.group()

colored_content = pattern.sub(colorize_match, content)

# 输出到终端或保存为带颜色标记的文件
print(colored_content)
with open('colored_AR_Finland_2021.txt', 'w', encoding='utf-8') as f:
    f.write(colored_content)

说明:

  • 可修改颜色码调整显示效果,比如'\033[92m'代表绿色
  • 特定字符串可通过修改正则表达式中的(Finland)替换为目标内容
  • 若需生成HTML格式的着色文件,可将ANSI码替换为<span style="color:red">...</span>这类标签

二、修复PDF图片提取代码并完成提取

错误原因是PyMuPDF(fitz)版本更新后,接口方法名发生变更:getImageList()改为get_images(),extractImage()改为extract_image()。以下是修复后的完整代码:

# 先安装依赖
pip install PyMuPDF Pillow
import fitz
import io
from PIL import Image

file = "AR_Finland_2021.pdf"
pdf_file = fitz.open(file)

# 遍历PDF所有页面
for page_index in range(len(pdf_file)):
    page = pdf_file[page_index]
    # 获取页面图片列表(新版本API)
    image_list = page.get_images(full=True)
    
    if image_list:
        print(f"[+] 第{page_index+1}页共找到{len(image_list)}张图片")
    else:
        print(f"[!] 第{page_index+1}页未找到图片")
    
    for image_index, img in enumerate(image_list, start=1):
        # 获取图片的xref编号
        xref = img[0]
        # 提取图片数据(新版本API)
        base_image = pdf_file.extract_image(xref)
        image_bytes = base_image["image"]
        image_ext = base_image["ext"]
        
        # 保存为PNG格式(强制转换),若保留原格式可修改文件名后缀
        image = Image.open(io.BytesIO(image_bytes))
        image.save(f"image_{page_index+1}_{image_index}.png", "PNG")
        print(f"已保存:image_{page_index+1}_{image_index}.png")

说明:

  • get_images(full=True)会返回图片的完整元数据,省略full=True则只返回核心信息
  • 若要将提取的图片汇总为新PDF,可在提取完成后用PyMuPDF创建新文档,逐个插入图片

内容的提问来源于stack exchange,提问作者CelloRibeiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:54:15