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 == "": 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)