add rich output support for slide notes
Docker server image / build-and-push (push) Successful in 3m2s
Docker server image / build-and-push (push) Successful in 3m2s
This commit is contained in:
@@ -18,6 +18,9 @@ from google.protobuf.timestamp_pb2 import Timestamp
|
||||
from officeconvert import SlideArtifact, convert_pptx_to_slidedeck
|
||||
from officeconvert.conversion import (
|
||||
ConversionTimeoutError,
|
||||
HtmlFormattingPolicy,
|
||||
NotesFormat,
|
||||
NotesOptions,
|
||||
PHASE_EXTRACTING_NOTES,
|
||||
PHASE_PDF_TO_IMAGES,
|
||||
PHASE_PPTX_TO_PDF,
|
||||
@@ -49,6 +52,37 @@ _DEFAULT_FULL_RESOLUTION = conversion_pb2.CONVERSION_RESOLUTION_FHD
|
||||
_DEFAULT_THUMBNAIL_RESOLUTION = conversion_pb2.CONVERSION_RESOLUTION_SD
|
||||
_DEFAULT_FULL_JPEG_QUALITY = 85
|
||||
_DEFAULT_THUMBNAIL_JPEG_QUALITY = 75
|
||||
_DEFAULT_NOTES_FORMAT = conversion_pb2.NOTES_FORMAT_PLAIN
|
||||
_DEFAULT_HTML_USE_PARAGRAPH_TAGS = True
|
||||
|
||||
|
||||
def _to_library_notes_options(
|
||||
notes: conversion_pb2.NotesOptions | None,
|
||||
) -> NotesOptions | None:
|
||||
if notes is None:
|
||||
return None
|
||||
|
||||
fmt = notes.format or _DEFAULT_NOTES_FORMAT
|
||||
library_format = NotesFormat.HTML if fmt == conversion_pb2.NOTES_FORMAT_HTML else NotesFormat.PLAIN
|
||||
|
||||
html_use_paragraph_tags = _DEFAULT_HTML_USE_PARAGRAPH_TAGS
|
||||
if notes.HasField("html_use_paragraph_tags"):
|
||||
html_use_paragraph_tags = bool(notes.html_use_paragraph_tags)
|
||||
|
||||
policy_proto = notes.html_policy
|
||||
policy = HtmlFormattingPolicy(
|
||||
ignore_bold=bool(policy_proto.ignore_bold),
|
||||
ignore_italic=bool(policy_proto.ignore_italic),
|
||||
ignore_underline=bool(policy_proto.ignore_underline),
|
||||
ignore_strikethrough=bool(policy_proto.ignore_strikethrough),
|
||||
ignore_font_size=bool(policy_proto.ignore_font_size),
|
||||
ignore_color=bool(policy_proto.ignore_color),
|
||||
)
|
||||
return NotesOptions(
|
||||
format=library_format,
|
||||
html_use_paragraph_tags=html_use_paragraph_tags,
|
||||
html_policy=policy,
|
||||
)
|
||||
|
||||
|
||||
class ConversionServiceImpl(conversion_connect.ConversionService):
|
||||
@@ -124,6 +158,7 @@ class ConversionServiceImpl(conversion_connect.ConversionService):
|
||||
thumbnail_resolution=thumbnail_resolution,
|
||||
full_jpeg_quality=full_jpeg_quality,
|
||||
thumbnail_jpeg_quality=thumbnail_jpeg_quality,
|
||||
notes=request.notes if request.HasField("notes") else None,
|
||||
bucket_name=bucket_name,
|
||||
upload_object_key=upload_key,
|
||||
status=conversion_pb2.CONVERSION_STATUS_PENDING,
|
||||
@@ -280,6 +315,7 @@ class ConversionServiceImpl(conversion_connect.ConversionService):
|
||||
pptx_to_pdf_per_slide_timeout_s=self._config.conversion_pptx_to_pdf_per_slide_timeout_seconds,
|
||||
pdf_to_images_base_timeout_s=self._config.conversion_pdf_to_images_base_timeout_seconds,
|
||||
pdf_to_images_per_slide_timeout_s=self._config.conversion_pdf_to_images_per_slide_timeout_seconds,
|
||||
notes_options=_to_library_notes_options(session.notes),
|
||||
progress_callback=lambda phase_name, current, max_value: self._set_session_progress_from_name(
|
||||
session,
|
||||
phase_name=phase_name,
|
||||
@@ -428,6 +464,7 @@ class ConversionServiceImpl(conversion_connect.ConversionService):
|
||||
conversion_pb2.Slide(
|
||||
index=slide.index,
|
||||
notes_plain=slide.notes_plain,
|
||||
notes_html=slide.notes_html,
|
||||
image_url=image_url,
|
||||
thumbnail_image_url=thumbnail_image_url,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user