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
相关产品推荐
相关产品推荐

