Source code for faker_file.contrib.odt_file

from odf.draw import Frame, Image
from odf.style import (
    ParagraphProperties,
    Style,
    TableCellProperties,
    TableColumnProperties,
    TableRowProperties,
)
from odf.table import Table, TableCell, TableColumn, TableRow
from odf.text import H, P

from ..base import DEFAULT_FORMAT_FUNC

__author__ = "Artur Barseghyan <artur.barseghyan@gmail.com>"
__copyright__ = "2022-2023 Artur Barseghyan"
__license__ = "MIT"
__all__ = (
    "add_h1_heading",
    "add_h2_heading",
    "add_h3_heading",
    "add_h4_heading",
    "add_h5_heading",
    "add_h6_heading",
    "add_heading",
    "add_page_break",
    "add_paragraph",
    "add_picture",
    "add_table",
)


[docs]def add_table(provider, document, data, counter, **kwargs): """Callable responsible for the table generation.""" rows = kwargs.get("rows", 3) cols = kwargs.get("cols", 4) table_col_style = Style(name="TableColumn", family="table-column") table_col_style.addElement(TableColumnProperties(columnwidth="2cm")) document.automaticstyles.addElement(table_col_style) table_row_style = Style(name="TableRow", family="table-row") table_row_style.addElement(TableRowProperties(rowheight="1cm")) document.automaticstyles.addElement(table_row_style) table_cell_style = Style(name="TableCell", family="table-cell") table_cell_style.addElement( TableCellProperties(padding="0.1cm", border="0.05cm solid #000000") ) document.automaticstyles.addElement(table_cell_style) # Modifications of `data` is not required for generation # of the file, but is useful for when you want to get # the text content of the file. data.setdefault("content_modifiers", {}) data["content_modifiers"].setdefault("add_table", {}) data["content_modifiers"]["add_table"].setdefault(counter, []) # Create table table = Table() for i in range(rows): table.addElement(TableColumn(stylename=table_col_style)) for row in range(cols): tr = TableRow(stylename=table_row_style) table.addElement(tr) for col in range(4): tc = TableCell(stylename=table_cell_style) tr.addElement(tc) text = provider.generator.paragraph() p = P(text=text) tc.addElement(p) # Useful when you want to get the text content of the file. data["content_modifiers"]["add_table"][counter].append(text) data["content"] += "\r\n" + text document.text.addElement(table)
[docs]def add_picture(provider, document, data, counter, **kwargs): """Callable responsible for the picture generation.""" width = kwargs.get("width", "10cm") height = kwargs.get("height", "5cm") paragraph = P() document.text.addElement(paragraph) image = kwargs.get("image", provider.generator.image()) image_frame = Frame( width=width, height=height, x="56pt", y="56pt", anchortype="paragraph", ) href = document.addPicture(filename="image.png", content=image) image_frame.addElement(Image(href=href)) paragraph.addElement(image_frame)
# # Modifications of `data` is not required for generation # # of the file, but is useful for when you want to get # # the text content of the file. # data["content"] += "\r\n" + jpeg_file.data["content"] # data.setdefault("content_modifiers", {}) # data["content_modifiers"].setdefault("add_picture", {}) # data["content_modifiers"]["add_picture"].setdefault(counter, []) # data["content_modifiers"]["add_picture"][counter].append( # jpeg_file.data["content"] # ) # Define a style for a page break page_break_style = Style(name="PageBreak", family="paragraph") page_break_style.addElement(ParagraphProperties(breakbefore="page"))
[docs]def add_page_break(provider, document, data, counter, **kwargs): """Callable responsible for page break generation.""" # Insert a page break document.styles.addElement(page_break_style) # Insert a page break page_break = P(stylename=page_break_style) document.text.addElement(page_break)
[docs]def add_paragraph(provider, document, data, counter, **kwargs): """Callable responsible for the paragraph generation.""" content = kwargs.get("content", None) max_nb_chars = kwargs.get("content", 5_000) wrap_chars_after = kwargs.get("wrap_chars_after", None) format_func = kwargs.get("format_func", DEFAULT_FORMAT_FUNC) _content = provider._generate_text_content( max_nb_chars=max_nb_chars, wrap_chars_after=wrap_chars_after, content=content, format_func=format_func, ) # Add some text to the first page paragraph = P(text=_content) document.text.addElement(paragraph) # Meta-data data.setdefault("content_modifiers", {}) data["content_modifiers"].setdefault("add_paragraph", {}) data["content_modifiers"]["add_paragraph"].setdefault(counter, []) data["content_modifiers"]["add_paragraph"][counter].append(_content) data["content"] += "\r\n" + _content
[docs]def add_heading(provider, document, data, counter, **kwargs): """Callable responsible for the heading generation.""" content = kwargs.get("content", None) max_nb_chars = kwargs.get("content", 30) wrap_chars_after = kwargs.get("wrap_chars_after", None) format_func = kwargs.get("format_func", DEFAULT_FORMAT_FUNC) level = kwargs.get("level", 1) _content = provider._generate_text_content( max_nb_chars=max_nb_chars, wrap_chars_after=wrap_chars_after, content=content, format_func=format_func, ) # Add a heading to the document heading = H(outlinelevel=level, text=_content) document.text.addElement(heading) # Meta-data data.setdefault("content_modifiers", {}) data["content_modifiers"].setdefault("add_heading", {}) data["content_modifiers"]["add_heading"].setdefault(counter, []) data["content_modifiers"]["add_heading"][counter].append(_content) data["content"] += "\r\n" + _content
[docs]def add_h1_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h1 heading generation.""" return add_heading(provider, document, data, counter, level=1, **kwargs)
[docs]def add_h2_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h2 heading generation.""" return add_heading(provider, document, data, counter, level=2, **kwargs)
[docs]def add_h3_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h3 heading generation.""" return add_heading(provider, document, data, counter, level=3, **kwargs)
[docs]def add_h4_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h4 heading generation.""" return add_heading(provider, document, data, counter, level=4, **kwargs)
[docs]def add_h5_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h5 heading generation.""" return add_heading(provider, document, data, counter, level=5, **kwargs)
[docs]def add_h6_heading(provider, document, data, counter, **kwargs): """Callable responsible for the h6 heading generation.""" return add_heading(provider, document, data, counter, level=6, **kwargs)