如何用python-pptx识别PPT中文本框的出入站连接线?
技术问题
- 如何判断PPT中特定文本框是否存在入站或出站连接线?
- 使用python-pptx库可以获取PPT中的文本框和形状,也能区分文本框与线条,但找不到解析连接关系的相关文档,无法建立文本框与线条的关联。
实现代码
from pptx import Presentation from pptx.enum.shapes import MSO_SHAPE_TYPE # ======================================================== # 加载演示文稿 # ======================================================== lobj_presentation = Presentation(self.pptx_file_path) # ======================================================== # 获取幻灯片总数 # ======================================================== total_slides = len(lobj_presentation.slides) llst_slide_content = [] i = 0 for slide in range(total_slides): # 获取当前幻灯片的形状总数 total_shapes = len(lobj_presentation.slides[slide].shapes) llst_shapes = [] for shape in range(total_shapes): i += 1 lobj_shape = lobj_presentation.slides[slide].shapes[shape] shape_content = dict() shape_content['Id'] = i shape_content['Slide_No'] = int(slide) shape_content['Shape_Id'] = lobj_shape.shape_id shape_content['Shape_Type_Id'] = lobj_shape.shape_type if lobj_shape.shape_type == MSO_SHAPE_TYPE.TEXT_BOX: shape_content['Shape_Type'] = 'Text_Box' elif lobj_shape.shape_type == MSO_SHAPE_TYPE.LINE: shape_content['Shape_Type'] = 'Line' if lobj_shape.has_text_frame: shape_content['Shape_Text'] = lobj_shape.text else: shape_content['Shape_Text'] = '' shape_content['Left'] = int(lobj_shape.left) shape_content['Top'] = int(lobj_shape.top) shape_content['Width'] = int(lobj_shape.width) shape_content['Height'] = int(lobj_shape.height) shape_content['X1'] = int(lobj_shape.left) shape_content['Y1'] = int(lobj_shape.top) shape_content['X2'] = int(lobj_shape.left) + int(lobj_shape.width) shape_content['Y2'] = int(lobj_shape.top) + int(lobj_shape.height) shape_content['Line_Index'] = -1 llst_shapes.append(shape_content) llst_slide_content.append(llst_shapes)
代码输出
[{"Id":1,"Slide_No":1,"Shape_Id":70,"Shape_Type_Id":17,"Shape_Type":"Text_Box","Shape_Text":"Hello","Left":1186475,"Top":1804225,"Width":1839900,"Height":400200,"X1":1186475,"Y1":1804225,"X2":3026375,"Y2":2204425,"Line_Index":-1},{"Id":2,"Slide_No":1,"Shape_Id":71,"Shape_Type_Id":17,"Shape_Type":"Text_Box","Shape_Text":"There","Left":3776338,"Top":1804225,"Width":1839900,"Height":400200,"X1":3776338,"Y1":1804225,"X2":5616238,"Y2":2204425,"Line_Index":-1},{"Id":11,"Slide_No":1,"Shape_Id":72,"Shape_Type_Id":9,"Shape_Type":"Line","Shape_Text":"","Left":3026375,"Top":2004325,"Width":750000,"Height":0,"X1":3026375,"Y1":2004325,"X2":3776375,"Y2":2004325,"Line_Index":-1},{"Id":3,"Slide_No":1,"Shape_Id":73,"Shape_Type_Id":17,"Shape_Type":"Text_Box","Shape_Text":"B","Left":6366200,"Top":1804225,"Width":1839900,"Height":400200,"X1":6366200,"Y1":1804225,"X2":8206100,"Y2":2204425,"Line_Index":-1},{"Id":4,"Slide_No":1,"Shape_Id":74,"Shape_Type_Id":9,"Shape_Type":"Line","Shape_Text":"","Left":5616238,"Top":2004325,"Width":750000,"Height":0,"X1":5616238,"Y1":2004325,"X2":6366238,"Y2":2004325,"Line_Index":-1},{"Id":5,"Slide_No":1,"Shape_Id":75,"Shape_Type_Id":17,"Shape_Type":"Text_Box","Shape_Text":"C","Left":3776338,"Top":3071275,"Width":1839900,"Height":400200,"X1":3776338,"Y1":3071275,"X2":5616238,"Y2":3471475,"Line_Index":-1},{"Id":6,"Slide_No":1,"Shape_Id":76,"Shape_Type_Id":17,"Shape_Type":"Text_Box","Shape_Text":"A","Left":3776338,"Top":631775,"Width":1839900,"Height":400200,"X1":3776338,"Y1":631775,"X2":5616238,"Y2":1031975,"Line_Index":-1},{"Id":7,"Slide_No":1,"Shape_Id":77,"Shape_Type_Id":9,"Shape_Type":"Line","Shape_Text":"","Left":4696288,"Top":1032025,"Width":0,"Height":772200,"X1":4696288,"Y1":1032025,"X2":4696288,"Y2":1804225,"Line_Index":-1},{"Id":8,"Slide_No":1,"Shape_Id":78,"Shape_Type_Id":9,"Shape_Type":"Line","Shape_Text":"","Left":4696288,"Top":2204425,"Width":0,"Height":867000,"X1":4696288,"Y1":2204425,"X2":4696288,"Y2":3071425,"Line_Index":-1}]
内容的提问来源于stack exchange,提问作者Lav Sharma
相关产品推荐
相关产品推荐

