Skip to main content

Library to create DOCX facility using python-docx

Project description

CreateDocx

init

def __init__(self, doc_path='', doc_name='new_doc', font_name='Tahoma', font_size=11) -> None:
    self.doc = Document()
    self.doc_name = doc_name
    self.doc_path = doc_path
    self.font_name = font_name
    self.font_size = font_size
    self.set_font()

set_font

def set_font(self):
    font = self.doc.styles['Normal'].font
    font.name = self.font_name
    font.size = Pt(self.font_size)

save_doc

def save_doc(self):
    self.doc.save(f'{self.doc_path}{self.doc_name}.docx')

delete_doc

def delete_doc(doc_path):
    os.remove(doc_path)

concat_docs

def concat_docs(self, doc1_path, doc2_path, new_doc_path, new_doc_name):
    doc1 = Document(doc1_path)
    doc2 = Document(doc2_path)
    composer = Composer(doc1)
    composer.append(doc2)
    composer.save(f'{new_doc_path}/{new_doc_name}')

break_page

def break_page(self):
    self.doc.add_page_break()

add_heading

def add_heading(self, text, level):
    self.doc.add_heading(text, level)

add_image

def add_image(self, image_path_name, widht_inches=3.0, height_inches=3.0):
    self.doc.add_picture(image_path_name, width=Inches(widht_inches), height=Inches(height_inches))
    last_paragraph = self.doc.paragraphs[-1]
    last_paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER

add_paragraph

def add_paragraph(self, text: str, bold=False, italic=False, set_color={'r': 0, 'g': 0, 'b': 0}):
    paragraph = self.doc.add_paragraph()
    run = paragraph.add_run(text)
    run.font.bold = bold
    run.font.italic = italic
    run.font.color.rgb = RGBColor(set_color['r'], set_color['g'], set_color['b'])
    return paragraph

concat_on_paragraph

def concat_on_paragraph(self, paragraph, text, bold=False, italic=False, set_color={'r': 0, 'g': 0, 'b': 0}):
    run = paragraph.add_run(text)
    run.font.bold = bold
    run.font.italic = italic
    run.font.color.rgb = RGBColor(set_color['r'], set_color['g'], set_color['b'])

create_table

def create_table(self, table_title, table_title_level, style='Medium Shading 1', column_names=[], rows=()):
    self.doc.add_heading(table_title, table_title_level)
    table = self.doc.add_table(rows=1, cols=len(column_names), style=style)
    row = table.rows[0].cells
    for i in range(len(column_names)):
        row[i].text = column_names[i]
    row_len = len(rows[0])
    for row_data in rows:
        row = table.add_row().cells
        row_index = 0
        while row_index < row_len:
            row[row_index].text = str(row_data[row_index])
            row_index += 1

add_pizza_plot

def add_pizza_plot(self, x_values, y_values, width=450, height=400, plot_name=''):
    fig = px.pie(names=x_values, values=y_values, width=width, height=height)
    fig.update_traces(textposition='inside', textinfo='percent+label')
    img_bytes = fig.to_image(format='png', engine='kaleido')
    with open(f'{plot_name}.png', 'wb') as file:
        file.write(img_bytes)
    self.doc.add_picture(f'{plot_name}.png')

add_bar_plot

def add_bar_plot(self, x_values: List[Union[str, int, float]], y_values: List[Union[int, float]], colors: Optional[List[str]]=None, y_title: Optional[str]=None, x_title: Optional[str]=None, plot_name: Optional[str]='plot', random_colors: Optional[bool]=False, base_color: Optional[str]=None) -> None:
    fig = go.Figure()
    if colors is not None:
        fig.add_trace(go.Bar(x=x_values, y=y_values, marker=dict(color=colors)))
    elif random_colors:
        num_bars = len(x_values)
        if base_color is not None:
            base_hsl = colorsys.rgb_to_hls(*tuple((int(base_color[i:i + 2], 16) for i in (0, 2, 4))))
            colors = [f'rgb{tuple(map(int, colorsys.hls_to_rgb(base_hsl[0], max(0, min(1, base_hsl[1] + random.uniform(-0.2, 0.2))), max(0, min(1, base_hsl[2] + random.uniform(-0.2, 0.2))))))}' for _ in range(num_bars)]
        else:
            colors = [f'rgb({random.randint(0, 255)}, {random.randint(0, 255)}, {random.randint(0, 255)})' for _ in range(num_bars)]
        fig.add_trace(go.Bar(x=x_values, y=y_values, marker=dict(color=colors)))
    else:
        fig.add_trace(go.Bar(x=x_values, y=y_values))
    fig.update_layout(xaxis_title=x_title, yaxis_title=y_title, width=500, height=500, margin=dict(l=30, r=30, t=30, b=30), font=dict(size=12))
    img_bytes = fig.to_image(format='png', engine='kaleido')
    with open(f'{plot_name}.png', 'wb') as file:
        file.write(img_bytes)
    self.doc.add_picture(f'{plot_name}.png')

Exemplos de uso

if __name__ == "__main__":
    doc = CreateDocx('./', 'testing_new_doc_class')
    doc.add_heading('heading', 1)
    paragraph = doc.add_paragraph('Criticidade: ', bold=True, italic=True)
    doc.concat_on_paragraph(paragraph, 'Critical', bold=True, set_color={'r': 192, 'g': 0, 'b': 0})
    doc.add_image('images/142776859-7c6c3ef6-6a15-4e34-99f6-b4bac029a036.png', 8.0, 6.0)
    doc.break_page()
    doc.create_table(
        table_title='Testing Table', 
        table_title_level=1, 
        column_names=['column1', 'column2', 'column3', 'column4', 'quantity'],
        rows = (
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 10),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 410),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 50),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 10),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
            ('dado 1', 'dado 2', 'dado 3', 'dado 4', 100),
        )
    )
    doc.add_heading('OWASP Top 10 Pizza Plot', 1)
    doc.add_pizza_plot(
        x_values=[ 'A01:2021', 'A02:2021', 'A03:2021', 'A04:2021', 'A05:2021', 'A06:2021', 'A07:2021', 'A08:2021', 'A09:2021', 'A10:2021' ],
        y_values=[100, 40, 60, 10, 30, 10, 2, 5, 102, 11],
        plot_name='owasp_top_10_pizza'
    )
    doc.add_heading('OWASP Top 10 Bar Plot', 1)
    doc.add_bar_plot(
        x_values=[ 'A01:2021', 'A02:2021', 'A03:2021', 'A04:2021', 'A05:2021', 'A06:2021', 'A07:2021', 'A08:2021', 'A09:2021', 'A10:2021' ],
        y_values=[100, 40, 60, 10, 30, 10, 2, 5, 102, 11],
        plot_name='owasp_top_10_bar',
        random_colors=True
    )
    
    doc.save_doc()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

custom_py_docx-1.0.5.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

custom_py_docx-1.0.5-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file custom_py_docx-1.0.5.tar.gz.

File metadata

  • Download URL: custom_py_docx-1.0.5.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for custom_py_docx-1.0.5.tar.gz
Algorithm Hash digest
SHA256 733a984129f23aba722e05132525d3d51158253661ca3632e9561efa8a428e05
MD5 992a394177ed668e078671ea0e732fe8
BLAKE2b-256 4ed28b06bdff373d73f6e41f149e88866bc7dec68e1b866db53a926fe45a4ceb

See more details on using hashes here.

File details

Details for the file custom_py_docx-1.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for custom_py_docx-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 2e5050fbf2d026da7980567932ce949ed5bed4d233f4914420928196bbf5fffb
MD5 85897d02c4a5c7be4fbc89d44f371350
BLAKE2b-256 8bd1a7f7a425a2eb895653d5641c038aa62051734762047b8cb223c39e3c93e6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page