作品展示——将docx 转PDF转png,保留第一张图片
背景需求:
把周计划内容初步替换后,获得了19周的周计划+教案的docx
需要把周计划第一页的反思内容删除,,然后把第一页横版截图上传班级主页。
需求:周计划docx 截图成png图片,上传
素材准备:
代码展示:
-1、把所有周计划docx打开,删掉反思内容,另存到jpg上传文件夹
import os
from docx import Document
from docx.shared import Pt
from pdf2image import convert_from_path
import shutil
path=r'D:\test\02办公类\91周计划4份_2024年中4班\04 周计划'
old=path+r'\04合成新周计划'
new=path+r'\05jpg上传'
# 处理.docx文件
from docx import Document
import os
print('--------1、遍历文件夹,把所有周计划docx打开,删掉反思内容,另存到jpg上传文件夹---------')
folder_path = old
for file_name in os.listdir(folder_path):
print(file_name)
if file_name.endswith('.docx'):
file_path = os.path.join(folder_path, file_name)
doc = Document(file_path)
table = doc.tables[0] # 假设第一页只有一个表格
cell = table.cell(1, 8) # 获取第1行第8列的单元格
cell.text = '' # 清空单元格内容
doc.save(new+r'\{}'.format(file_name))
2、打开删除过内容的docx文件并转换成pdf文件(存在“05jpg上传”里)
print('--------2、打开docx文件并转换成pdf文件---------')
from docx import Document
from docx2pdf import convert
import os,time
folder_path = new
for file_name in os.listdir(folder_path):
if file_name.endswith('.docx'):
file_path = os.path.join(folder_path, file_name)
pdf_path = file_path.replace('.docx', '.pdf')
# 打开docx文件并转换成pdf文件
convert(file_path, pdf_path)
time.sleep(1)
转成pdf的时间比较长
3、把每个PDF的每页保存为png图片(一个PDF可能有4-6份)
'--------3、把PDF保存为png图片---------')
import fitz # PyMuPDF
from PIL import Image
# 遍历123文件夹下的所有.pdf文件
folder_path = new
for file_name in os.listdir(folder_path):
if file_name.endswith('.pdf'):
file_path = os.path.join(folder_path, file_name)
# 打开PDF文件
pdf_document = fitz.open(file_path)
# 逐页将PDF文件转换为PNG图片
for page_num in range(pdf_document.page_count):
page = pdf_document[page_num]
image_list = page.get_pixmap()
# 保存为PNG图片
image = Image.frombytes("RGB", [image_list.width, image_list.height], image_list.samples)
image.save(f"{os.path.splitext(file_path)[0]}{page_num+1}.png")
pdf_document.close()
实际上我只需要每个png图片的第一张,也就是以“1.png”结尾的图片
4、删除“05jpg”文件夹下的所有.docx、.pdf和.png文件,如果png文件名称最后是1. png需要保留。
print('------4、删除123文件夹下的所有.docx、.pdf和.png文件,如果png文件名称最后是1. png需要保留。---------')
import os
folder_path = new
files_to_keep = set() # 用于存储需要保留的文件名
# 遍历123文件夹下的所有文件
for file_name in os.listdir(folder_path):
file_path = os.path.join(folder_path, file_name)
if file_name.endswith('.png') and not file_name.endswith('1.png'):
os.remove(file_path) # 删除不符合条件的.png文件
elif file_name.endswith('.png'):
files_to_keep.add(file_path) # 将符合条件的文件路径加入到files_to_keep中
elif file_name.endswith('.docx') or file_name.endswith('.pdf'):
os.remove(file_path) # 删除.docx和.pdf文件