Python脚本 | 提取pdf页面为jpg

功能:

  • 提取pdf文件中的每一页,输出为jpg文件
  • 以markdown语法写入文本文件
  • 将该文本复制到剪贴板
# python 3.10
# ! 运行在 conda-myv虚拟环境

import fitz  # PyMuPDF
from PIL import Image
import os
from datetime import datetime

# 指定PDF文件路径
pdf_path = 'chap6.pdf'
# 指定输出的Markdown文件路径
md_path = 'output.txt'


def NowTime()->str:
    
    # 获取当前时间
    now = datetime.now()
    # 按照指定的格式输出时间字符串
    time_str = now.strftime("%Y-%m-%d-%H-%M-%S")
    
    return time_str

def ShowMessage(message:str)->None:
    import ctypes
    # 定义提醒信息的内容
    # message = "markdown格式内容以复制到剪贴板"
    title="提醒"
    
    # 播放提示音
    sound = "SystemAsterisk"
    ctypes.windll.winmm.PlaySoundW(sound, 0, 0)

    # 显示一个消息框
    ctypes.windll.user32.MessageBoxW(None, message, title, 0)


# 获取当前文件的路径
current_file_path = os.path.abspath(__file__)
# 获取当前文件所在的目录
output_dir = os.path.dirname(current_file_path)


# 打开PDF文件
pdf_document = fitz.open(pdf_path)

# 创建Markdown文件
with open(md_path, 'w', encoding='utf-8') as md_file:
    # 遍历PDF的每一页
    for page_number in range(len(pdf_document)):
        # 获取页面
        page = pdf_document[page_number]
        
        # 将页面转换为图像
        pix = page.get_pixmap()
        img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples)
        
        # 指定图像文件名
        img_filename = f'page_{page_number + 1}_{NowTime()}.jpg'
        img_path = os.path.join(output_dir, img_filename)
        
        # 保存图像
        img.save(img_path)
        
        # 将图像插入Markdown文件
        img_tag = f'![Page {page_number + 1}]({img_path})'
        md_file.write(img_tag + '\n\n')

    # 关闭PDF文件
    pdf_document.close()
    print(f'Markdown content with images has been created at: {md_path}')

# 复制markdown 内容到剪贴板
with open(md_path, 'r', encoding='utf-8') as file:
    import pyperclip
    # 读取文件内容
    content = file.read()
    # 将内容复制到剪贴板
    success = pyperclip.copy(content)
    print(f"success={success}")
    
    # 检查复制操作是否成功
    if success or success==None:
        ShowMessage("文本已成功复制到剪贴板.")
        # print("copy ok")
    else:
        ShowMessage("复制操作失败,请重试.")
        # print("copy fail")
posted @ 2024-04-15 16:47  FE-有限元鹰  阅读(23)  评论(0编辑  收藏  举报