Spaces:
Running
Running
Add error handling to picture XML changes
Browse files- helpers/pptx_helper.py +45 -15
helpers/pptx_helper.py
CHANGED
@@ -469,7 +469,6 @@ def _handle_display_image__in_background(
|
|
469 |
body_shape = slide.shapes.placeholders[placeholders[0][0]]
|
470 |
|
471 |
title_shape.text = remove_slide_number_from_heading(slide_json['heading'])
|
472 |
-
|
473 |
flat_items_list = get_flat_list_of_contents(slide_json['bullet_points'], level=0)
|
474 |
add_bulleted_items(body_shape.text_frame, flat_items_list)
|
475 |
|
@@ -490,16 +489,38 @@ def _handle_display_image__in_background(
|
|
490 |
width=pptx.util.Inches(slide_width_inch),
|
491 |
)
|
492 |
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
|
504 |
_add_text_at_bottom(
|
505 |
slide=slide,
|
@@ -510,14 +531,23 @@ def _handle_display_image__in_background(
|
|
510 |
)
|
511 |
|
512 |
# Move picture to background
|
513 |
-
|
514 |
-
|
515 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
516 |
except Exception as ex:
|
517 |
logger.error(
|
518 |
-
'*** Error occurred while
|
519 |
str(ex)
|
520 |
)
|
|
|
521 |
|
522 |
return True
|
523 |
|
|
|
469 |
body_shape = slide.shapes.placeholders[placeholders[0][0]]
|
470 |
|
471 |
title_shape.text = remove_slide_number_from_heading(slide_json['heading'])
|
|
|
472 |
flat_items_list = get_flat_list_of_contents(slide_json['bullet_points'], level=0)
|
473 |
add_bulleted_items(body_shape.text_frame, flat_items_list)
|
474 |
|
|
|
489 |
width=pptx.util.Inches(slide_width_inch),
|
490 |
)
|
491 |
|
492 |
+
try:
|
493 |
+
# Find all blip elements to handle potential multiple instances
|
494 |
+
blip_elements = picture._element.xpath('.//a:blip')
|
495 |
+
if not blip_elements:
|
496 |
+
logger.warning(
|
497 |
+
'No blip element found in the picture. Transparency cannot be applied.'
|
498 |
+
)
|
499 |
+
return True
|
500 |
+
|
501 |
+
for blip in blip_elements:
|
502 |
+
# Add transparency to the image through the blip properties
|
503 |
+
alpha_mod = blip.makeelement(
|
504 |
+
'{http://schemas.openxmlformats.org/drawingml/2006/main}alphaModFix'
|
505 |
+
)
|
506 |
+
# Opacity value between 0-100000
|
507 |
+
alpha_mod.set('amt', '50000') # 50% opacity
|
508 |
+
|
509 |
+
# Check if alphaModFix already exists to avoid duplicates
|
510 |
+
existing_alpha_mod = blip.find(
|
511 |
+
'{http://schemas.openxmlformats.org/drawingml/2006/main}alphaModFix'
|
512 |
+
)
|
513 |
+
if existing_alpha_mod is not None:
|
514 |
+
blip.remove(existing_alpha_mod)
|
515 |
+
|
516 |
+
blip.append(alpha_mod)
|
517 |
+
logger.debug('Added transparency to blip element: %s', blip.xml)
|
518 |
+
|
519 |
+
except Exception as ex:
|
520 |
+
logger.error(
|
521 |
+
'Failed to apply transparency to the image: %s. Continuing without it.',
|
522 |
+
str(ex)
|
523 |
+
)
|
524 |
|
525 |
_add_text_at_bottom(
|
526 |
slide=slide,
|
|
|
531 |
)
|
532 |
|
533 |
# Move picture to background
|
534 |
+
try:
|
535 |
+
slide.shapes._spTree.remove(picture._element)
|
536 |
+
slide.shapes._spTree.insert(2, picture._element)
|
537 |
+
except Exception as ex:
|
538 |
+
logger.error(
|
539 |
+
'Failed to move image to background: %s. Image will remain in foreground.',
|
540 |
+
str(ex)
|
541 |
+
)
|
542 |
+
|
543 |
+
return True
|
544 |
+
|
545 |
except Exception as ex:
|
546 |
logger.error(
|
547 |
+
'*** Error occurred while adding image to the slide background: %s',
|
548 |
str(ex)
|
549 |
)
|
550 |
+
return True
|
551 |
|
552 |
return True
|
553 |
|