123 lines
3.8 KiB
Python
123 lines
3.8 KiB
Python
from pptx import Presentation
|
|
import os
|
|
|
|
def is_red_color(color):
|
|
#judge if the color is red
|
|
print(color.rgb)
|
|
return color and color.rgb == (255, 0, 0)
|
|
|
|
def get_master_placeholder_color(prs):
|
|
# get the color of the placeholder
|
|
masters = prs.slide_masters
|
|
for idx, master in enumerate(masters):
|
|
for placeholder in master.placeholders:
|
|
if placeholder.has_text_frame and placeholder.text == "<number>":
|
|
text_frame = placeholder.text_frame
|
|
|
|
if text_frame.paragraphs:
|
|
first_paragraph = text_frame.paragraphs[0]
|
|
return first_paragraph.font.color
|
|
return None
|
|
|
|
|
|
def check_slide_numbers_color(pptx_file_path):
|
|
presentation = Presentation(pptx_file_path)
|
|
|
|
for i, slide in enumerate(presentation.slides):
|
|
for shape in slide.shapes:
|
|
# check if the shape is a text box
|
|
if hasattr(shape, "text"):
|
|
if shape.text.isdigit():
|
|
# "SlidePlaceholder" is the name of the placeholder in the master slide
|
|
page_number_text = shape.text
|
|
font_color = get_master_placeholder_color(presentation)
|
|
print(font_color)
|
|
return 1 if font_color is not None and is_red_color(font_color) else 0
|
|
|
|
def compare_pptx_files(file1_path, file2_path):
|
|
prs1 = Presentation(file1_path)
|
|
prs2 = Presentation(file2_path)
|
|
|
|
# compare the number of slides
|
|
if len(prs1.slides) != len(prs2.slides):
|
|
return 0
|
|
|
|
# compare the content of each slide
|
|
for slide1, slide2 in zip(prs1.slides, prs2.slides):
|
|
# check if the shapes are the same
|
|
for shape1, shape2 in zip(slide1.shapes, slide2.shapes):
|
|
if hasattr(shape1, "text") and hasattr(shape2, "text"):
|
|
if shape1.text != shape2.text:
|
|
return 0
|
|
return 1
|
|
|
|
def has_two_lines_on_page(slide):
|
|
line_count = 0
|
|
for shape in slide.shapes:
|
|
if shape.shape_type == 1: # 1 表示 Line 形状
|
|
line_count += 1
|
|
if line_count >= 2:
|
|
return True
|
|
return False
|
|
|
|
def check_for_two_lines(prs):
|
|
prs = Presentation(prs)
|
|
for i, slide in enumerate(prs.slides):
|
|
if has_two_lines_on_page(slide):
|
|
return 1
|
|
return 0
|
|
|
|
def check_file_exists(directory, filename):
|
|
file_path = os.path.join(directory, filename)
|
|
return 1 if os.path.isfile(file_path) else 0
|
|
|
|
def has_audio_on_page(slide):
|
|
for shape in slide.shapes:
|
|
if shape.shape_type == 13:
|
|
return True
|
|
return False
|
|
|
|
def check_for_audio(prs):
|
|
prs = Presentation(prs)
|
|
for i, slide in enumerate(prs.slides):
|
|
if has_audio_on_page(slide):
|
|
return 1
|
|
return 0
|
|
|
|
def check_formula_shape(prs):
|
|
prs = Presentation(prs)
|
|
slide = prs.slides[13]
|
|
|
|
for shape in slide.shapes:
|
|
|
|
if shape.has_text_frame and shape.shape_type == 1:
|
|
return 1
|
|
return 0
|
|
|
|
def check_slide_orientation_Portrait(pptx_path):
|
|
presentation = Presentation(pptx_path)
|
|
|
|
slide_height = presentation.slide_height
|
|
slide_width = presentation.slide_width
|
|
|
|
if slide_width < slide_height:
|
|
return 1
|
|
return 0
|
|
|
|
def contains_mp4_video(pptx_path):
|
|
prs = Presentation(pptx_path)
|
|
for slide in prs.slides:
|
|
for shape in slide.shapes:
|
|
if shape.shape_type == 16:
|
|
if shape.media_type == 3:
|
|
return 1
|
|
return 0
|
|
|
|
if __name__ == "__main__":
|
|
path1 = "../../任务数据/LibreOffice Impress/Change_Color_Slide_Number_gold_textbox.pptx"
|
|
presentation = Presentation(path1)
|
|
|
|
for i, sl in enumerate(presentation.slides):
|
|
for j, sh in enumerate(sl.shapes):
|
|
print(i, j, sh, sh.name, sh.shape_type, sh.text)
|