31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
from typing import Generator
|
|
|
|
from docx.shared import Parented, Pt
|
|
from docx.text.paragraph import Paragraph as DocxParagraph
|
|
|
|
from .paragraph_sizer import ParagraphSizer
|
|
from ..layout_tracker import LayoutState
|
|
from ..rendered_info import RenderedInfo
|
|
from ..sub_renderable import SubRenderable
|
|
from ..util import create_element
|
|
from .renderable import Renderable
|
|
|
|
|
|
class PageBreak(Renderable):
|
|
def __init__(self, parent: Parented):
|
|
self._docx_paragraph = DocxParagraph(create_element("w:p", [
|
|
create_element("w:r", [
|
|
create_element("w:br", {"w:type": "page"})
|
|
])
|
|
]), parent)
|
|
self._docx_paragraph.runs[0].font.size = Pt(1)
|
|
self._docx_paragraph.paragraph_format.space_before = 0
|
|
self._docx_paragraph.paragraph_format.space_after = 0
|
|
|
|
def render(self, previous_rendered: RenderedInfo, layout_state: LayoutState)\
|
|
-> Generator[RenderedInfo | SubRenderable, None, None]:
|
|
yield RenderedInfo(
|
|
self._docx_paragraph,
|
|
max(layout_state.remaining_page_height, ParagraphSizer(self._docx_paragraph, None, layout_state.max_width).calculate_height().line_height)
|
|
)
|