Giter Site home page Giter Site logo

pdfme's People

Contributors

afelipesp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pdfme's Issues

TypeError on BytesIO image in table

Another issue I found with BytesIO images. it will fail with TypeError: when image is of type io.BytesIO, image_name must be provided, if you try to add a BytesIO image in a table.

Reason is the following part:

pdf_image = PDFImage(element['image'])

He is not providing the other required arguments for a BytesIO image.

An easy fix would be to use instead:

            pdf_image = PDFImage(
                element['image'],
                extension=element.get('extension'),
                image_name=element.get('image_name'),
            )

If you like, I can provide a PR.

No borders when combining cells in table

Description

When using the following code, the top borders of the 3 last cells of the last row are not being displayed:

from pdfme import build_pdf

document = {}
section1 = {}
document['sections'] = [section1]
section1['content'] = content1 = []

content1.append({
    'widths': [.8, 1, 1, 1],
    'table': [
        [{'rowspan': 2, '.': 'Comments'}, {'colspan': 3, '.': ' '}, None, None],
        [None, {'colspan': 3, '.': ' '}, None, None]
    ]
})

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

overlapping header with section data

@aFelipeSP , so far i managed to get a working report. still stuck with these four points

1. The section is overlapping with the header, i thought this would align itself automatically

import pandas as pd
from pdfme import build_pdf

df = pd.DataFrame(
    [
        [
            "sn",
            "sn_title",
            "cross_reference_sn",
            "doc_ref",
            "mc",
            "ld",
            "nd",
            "sn_status",
        ],
        [
            1,
            "title...",
            "ref1",
            "doc1",
            "very long " + ("text " * 50),
            "text",
            "text",
            "closed",
        ],
    ]
)
df = df.astype(str)
table = df.to_numpy().tolist()

document = {
    "style": {
        "text_align": "l",
        "rotate_page": True,
        "page_size": "a4",
    },
    "running_sections": {
        "header1": {
            "x": "left",
            "y": 10,
            "height": "top",
            "style": {"text_align": "c"},
            "content": [{".b": "sample heading \nsample sub heading"}],
        },
        "header2": {
            "x": "left",
            "y": 10,
            "width": 40,
            "content": [{"image": "logo.jpg"}],
        },
        "header3": {
            "x": "left",
            "y": 50,
            "height": "top",
            "style": {"text_align": "c"},
            "content": [
                {
                    "widths": [0.5, 2, 2, 2, 1.5, 1, 1],
                    "style": {
                        "s": 9,
                        "cell_margin": 0,
                        "cell_margin_left": 5,
                        "cell_margin_bottom": 4,
                    },
                    "table": [
                        [
                            None,
                            {
                                ".": [
                                    {".b": "mfg: "},
                                    {".": "eurolace" + "\n\n"},
                                    {".b": "sponsor: "},
                                    {".": " fantom" + "\n\n"},
                                    {".b": "Line No.: "},
                                    {".": "743" + "\n\n"},
                                    {".b": "Line Type: "},
                                    {".": " Linen"},
                                ]
                            },
                            {
                                ".": [
                                    {".b": "(Rotation): "},
                                    {".": "62408" + "\n\n"},
                                    {".b": "Double Rotation: "},
                                    {".": " 8911" + "\n\n"},
                                    {".b": "At Date: "},
                                    {".": "23-Oct-21" + "\n\n"},
                                    {".b": "Date of Start: "},
                                    {".": " 09-Dec-08"},
                                ]
                            },
                            {
                                ".": [
                                    {".b": "Data Weekly: "},
                                    {".": "202XB" + "\n\n"},
                                    {".b": "Data Monthly: "},
                                    {".": "110XB" + "\n\n"},
                                    {".b": "Data Yearly "},
                                    {".": "10-Mar-10" + "\n\n"},
                                ]
                            },
                            {
                                "colspan": 3,
                                ".": [
                                    {".b": "Data Provided by: "},
                                    {".": "Local Library" + "\n\n"},
                                    {".b": "Address: "},
                                    {".": "PO Box XXXX" + "\n\n"},
                                    {".b": "Contact: "},
                                    {".": "Tel: 435..." + "\n\n"},
                                    {".b": ""},
                                    {".": "e-mail: [email protected]" + "\n\n"},
                                ],
                            },
                            None,
                            None,
                        ],
                    ],
                },
            ],
        },
        "header4": {
            "x": "left",
            "y": 50,
            "height": "top",
            "style": {"text_align": "c"},
            "content": [
                {
                    "widths": [0.5, 2, 2, 2, 1.5, 1, 1],
                    "style": {
                        "s": 9,
                        "cell_margin": 0,
                        "cell_margin_left": 5,
                        "cell_margin_bottom": 4,
                    },
                    "table": [
                        [
                            None,
                            {
                                ".": [
                                    {".b": "mfg: "},
                                    {".": "eurolace" + "\n\n"},
                                    {".b": "sponsor: "},
                                    {".": " fantom" + "\n\n"},
                                    {".b": "Line No.: "},
                                    {".": "743" + "\n\n"},
                                    {".b": "Line Type: "},
                                    {".": " Linen"},
                                ]
                            },
                            None,
                            None,
                            None,
                            None,
                            None,
                        ],
                    ],
                },
            ],
        },
        "footer": {
            "x": "left",
            "y": 570,
            "height": "bottom",
            "style": {"text_align": "c"},
            "content": [
                {
                    "widths": [0.5, 3, 1, 3],
                    "style": {
                        "border_width": 0,
                        "cell_margin": 0,
                        "s": 7,
                        "text_align ": "l",
                    },
                    "borders": [{"pos": "h0;::", "width": 0.5}],
                    "table": [
                        [
                            {".i": "F/1957R1"},
                            {".": ["Report Date: ", {".i": "report_date"}]},
                            {".": ["Page ", {"var": "$page"}]},
                            {".": ["Internal Audit by:", {".i": "user_name"}]},
                        ]
                    ],
                }
            ],
        },
    },
    "sections": [
        {
            "style": {"page_numbering_style": "roman"},
            "running_sections": ["header1", "header2", "header3", "footer"],
            "content": [
                {
                    "widths": [1, 2, 1.2, 1, 4, 1, 1, 1],
                    "style": {
                        "margin_left": 0,
                        "margin_right": 0,
                        "s": 7,
                        "border_width": 0,
                        "cell_margin_top": 2,
                        "cell_margin": 10,
                    },
                    "borders": [{"pos": "::;:", "width": 0.2}],
                    "table": table,
                }
            ],
        }
    ],
}

with open("document.pdf", "wb") as f:
    build_pdf(document, f)


image

2. How can i change the header to take header4 from page 2 on wards instead of header3

3. How to get the total number of pages so i can show page 1 of page xx

4. The header from the running section can fit only limited content, how can i increase that to fit more contents?, i tested with repeating the header mor than 5 times and only the first 3 headers where appearing

Couldn't process image on BytesIO image

Hi, I found the following issue with BytesIO images: If an image gets pushed to another page, its get called twice. At the first time, the BytesIO gets read and closed. At the second time it fails because of I/O operation on closed file.

As I guess you need to load the image to see if it doesn't fit and load it on another page, I assume loading it twice is required.

So maybe just add use image_bytes = copy(image) here:

image_bytes = image

If you like, I can provide a PR.

Image on Header is not working

Hi I tried the following code and the image is not appearing


document = {
    "style": {
        "page_size": "letter", "margin": [70, 60],
        "s": 10, "c": 0.3, "f": "Times", "text_align": "j",
        "margin_bottom": 10,
        "rotate_page": True
    },
    "formats": {
        "link": {"c": "blue", "u": True},
        "title": {"s": 12, "b": True}
    },
    "running_sections": {
        "header": {
            "x": "left", "y": 40, "height": "top",
            "content": [{"image": r"C:\downloadFolder\logo_g.jpg"}]
        },
        "footer": {
            "x": "left", "y": "bottom", "height": "bottom",
            "style": {"text_align": "c"},
            "content": [{".": ["Page ", {"var": "$page"}]}]
        }
    },
    "sections": [
        {
            "running_sections": ["header", "footer"],
            "style": {"margin": 60},
            "content": [
                {".": "This is a title", "style": "title"},
                {".": [
                    "Here we include a footnote",
                    {"footnote": "Description of a footnote"},
                    ". And here we include a ",
                    {
                        ".": "link", "style": "link",
                        "uri": "https://some.url.com"
                    }
                ]}
            ]
        },
        {
            "running_sections": ["footer"],
            # "style": {"rotate_page": True},
            "content": [
                "This is a rotated page"
            ]
        }
    ]
}

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

and the logo size 60x60 pixels

how to change the header for the same section based on the page number

Hi @aFelipeSP , I think i clubbed so many questions in that last one and your total page count is really wonderful , saved me a lot of time on this , i have now got a hang of the pdfme library.
I have stumbled upon another problem, I have two headers , the first header should appear only on page 1 and then from page 2 on wards the header should be different , this is possible by creating different sections, but my issue is the same section repeats to the next page and so on , so I need to change it in the same section

this is the sample code that i have

import random

from pdfme import build_pdf


random.seed(1)
abc = 'abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚ'

def gen_word():
    return ''.join(random.choice(abc) for _ in range(random.randint(1, 10)))

def gen_text(n):
    return random.choice(['',' ']) + (' '.join(gen_word() for _ in range(n))) + random.choice(['',' '])

def gen_paragraphs(n):
    return [gen_text(random.randint(50, 200)) for _ in range(n)]

document = {
    "style": {
        "margin_bottom": 15, "text_align": "j",
        "page_size": "letter", "margin": [60, 50]
    },
    "formats": {
        "url": {"c": "blue", "u": 1},
        "title": {"b": 1, "s": 13}
    },
    "running_sections": {
        "first_header": {
            "x": "left", "y": 20, "height": "top", "style": {"text_align": "r"},
            "content": [{".b": "This is the first header for page 1 only"}]
        },
        "next_header": {
            "x": "left", "y": 20, "height": "top", "style": {"text_align": "r"},
            "content": [{".b": "This is the header for rest of the pages"}]
        },
        "footer": {
            "x": "left", "y": 740, "height": "bottom", "style": {"text_align": "c"},
            "content": [{".": ["Page ", {"var": "$page"}]}]
        }
    },
    "sections": [
       
        {
            "style": {
                "page_numbering_reset": True, "page_numbering_style": "arabic"
            },
            "running_sections": ["first_header", "footer"],
            "content": [

                {
                    ".": "Title 2", "style": "title", "label": "title2",
                    "outline": {}
                },

                ["This is a paragraph with a reference to ",
                {".": "Title 1.", "style": "url", "ref": "title1"}],

                {
                    "style": {"list_text": "1.  "},
                    ".": "And this is a list paragraph." + gen_text(40)
                },

                *gen_paragraphs(10)
            ]
        },
    ]
}

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

Incomplete section

Description

Section 1 is incomplete in the following example:

from pdfme import build_pdf

document = {}

document['style'] = {
    'margin_bottom': 15,
    'text_align': 'j'
}

document['formats'] = {
    'url': {'c': 'blue', 'u': 1},
    'title': {'b': 1, 's': 13}
}

document['running_sections'] = {
    'header': {
        'x': 'left', 'y': 20, 'height': 'top',
        'style': {'text_align': 'r'},
        'content': [{'.b': 'This is a header'}]
    },
    'footer': {
        'x': 'left', 'y': 800, 'height': 'bottom',
        'style': {'text_align': 'c'},
        'content': [{'.': ['Page ', {'var': '$page'}]}]
    }
}

document['sections'] = []
section1 = {}
document['sections'].append(section1)

section1['style'] = {
    'page_numbering_style': 'roman'
}

section1['running_sections'] = ['footer']

section1['content'] = content1 = []

content1.append({
    '.': 'A Title', 'style': 'title', 'label': 'title1',
    'outline': {'level': 1, 'text': 'A different title 1'}
})

content1.append(
    ['This is a paragraph with a ', {'.b;c:green': 'bold green part'}, ', a ',
    {'.': 'link', 'style': 'url', 'uri': 'https://some.url.com'},
    ', a footnote', {'footnote': 'description of the footnote'},
    ' and a reference to ',
    {'.': 'Title 2.', 'style': 'url', 'ref': 'title2'}]
)

content1.append({
    'image': 'tests/image_test.jpg',
    'style': {'margin_left': 70, 'margin_right': 70}
})

table_def1 = {
    'widths': [1.5, 1, 1, 1],
    'style': {'border_width': 0, 'margin_left': 70, 'margin_right': 70},
    'fills': [{'pos': '1::2;:', 'color': 0.7}],
    'borders': [{'pos': 'h0,1,-1;:', 'width': 0.5}],
    'table': [
        ['', 'column 1', 'column 2', 'column 3'],
        ['count', '2000', '2000', '2000'],
        ['mean', '28.58', '2643.66', '539.41'],
        ['std', '12.58', '2179.94', '421.49'],
        ['min', '1.00', '2.00', '1.00'],
        ['25%', '18.00', '1462.00', '297.00'],
        ['50%', '29.00', '2127.00', '434.00'],
        ['75%', '37.00', '3151.25', '648.25'],
        ['max', '52.00', '37937.00', '6445.00']
    ]
}

content1.append(table_def1)

table_def2 = {
    'widths': [1.2, .8, 1, 1],
    'table': [
        [
            {
                'colspan': 4,
                'style': {
                    'cell_fill': [0.8, 0.53, 0.3],
                    'text_align': 'c'
                },
                '.b;c:1;s:12': 'Fake Form'
            },None, None, None
        ],
        [
            {'colspan': 2, '.': [{'.b': 'First Name\n'}, 'Fakechael']}, None,
            {'colspan': 2, '.': [{'.b': 'Last Name\n'}, 'Fakinson Faker']}, None
        ],
        [
            [{'.b': 'Email\n'}, '[email protected]'],
            [{'.b': 'Age\n'}, '35'],
            [{'.b': 'City of Residence\n'}, 'Fake City'],
            [{'.b': 'Cell Number\n'}, '33333333333'],
        ]
    ]
}

content1.append(table_def2)

document['sections'].append({
    'style': {
        'page_numbering_reset': True, 'page_numbering_style': 'arabic'
    },
    'running_sections': ['header', 'footer'],
    'content': [

        {
            '.': 'Title 2', 'style': 'title', 'label': 'title2',
            'outline': {}
        },

        {
            'style': {'list_text': '1.  '},
            '.': ['This is a list paragraph with a reference to ',
            {'.': 'Title 1.', 'style': 'url', 'ref': 'title1'}]
        }
    ]
})

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

how to add pandas dataframe data dynamically with dynamic cell width

Hi @aFelipeSP , so far i managed to get the header and footer with your help, Now i want to pass in dynamic data from a pandas dataframe that consists of the following dummy data

df =pd.read_excel('excelFile.xlsx')
df.head(1)
sn  | sn_title  | cross_reference_sn  | doc_ref  | mc                         | ld              | nd         | sn_status
1   |  title...    | ref1                          | doc1     |  very long text...      | text          | text       |  closed
.....

when i use the following and pass in the pandas column it throws error

    "sections": [
        {
            "style": {"page_numbering_style": "roman"},
            "running_sections": ["footer"],
            "content": [
                {
    'widths': [1.5, 1, 1,1,1,1,1,1],
    'style': { 'margin_left': 70, 'margin_right': 70},
    'fills': [{'pos': '1::2;:', 'color': 0.7}],
    'borders': [{'pos': 'h0,1,-1;:', 'width': 0.5}],
    'table': [
       ['sn','sn_title','cross_reference_sn','doc_ref','mc','ld','nd','sn_status'],
       [df['sn'],df['sn_title'],df['cross_reference_sn'],df['doc_ref'],df['mc'],df['ld'],df['nd'],df['sn_status']]
    ]
}
            ]
        },

    ]

This doesn't seem to work.
Also i noticed we are passing the width as fixed value, how can i have the width dynamic based on the text content as the df column mc is sometimes very long text that i want to span over multiple new lines in the same column

Honestly the entire code i am doing is a trial and error from your documentation, so if this seems trival my appologies

how to remove space between two table and align one after another

Following is the sample report,

import random

from pdfme import build_pdf


random.seed(1)
abc = "abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZáéíóúÁÉÍÓÚ"


def gen_word():
    return "".join(random.choice(abc) for _ in range(random.randint(1, 10)))


def gen_text(n):
    return (
        random.choice(["", " "])
        + (" ".join(gen_word() for _ in range(n)))
        + random.choice(["", " "])
    )


def gen_paragraphs(n):
    return [gen_text(random.randint(50, 200)) for _ in range(n)]


document = {
    "style": {
        "margin_bottom": 15,
        "text_align": "j",
        "page_size": "a4",
        "margin": [60, 50],
        "rotate_page": True,
    },
    "formats": {"url": {"c": "blue", "u": 1}, "title": {"b": 1, "s": 9}},
    "running_sections": {
        "header": {
            "x": "left",
            "y": 20,
            "height": "top",
            "style": {"text_align": "r"},
            "content": [{".b": "This is a header"}],
        },
        "footer": {
            "x": "left",
            "y": 740,
            "height": "bottom",
            "style": {"text_align": "c"},
            "content": [{".": ["Page ", {"var": "$page"}]}],
        },
    },
    "sections": [
        {
            "style": {},
            "running_sections": ["footer"],
            
            "content":[
                 {
    'widths': [1.5, 1, 1, 1],
    'style': {'border_width': 0, 'margin_left': 70, 'margin_right': 70},
    'fills': [{'pos': '1::2;:', 'color': 0.7}],
    'borders': [{'pos': 'h0,1,-1;:', 'width': 0.5}],
    'table': [
        ['', 'column 1', 'column 2', 'column 3'],
        ['count', '2000', '2000', '2000'],
        ['mean', '28.58', '2643.66', '539.41'],
        ['std', '12.58', '2179.94', '421.49'],
        ['min', '1.00', '2.00', '1.00'],
        ['25%', '18.00', '1462.00', '297.00'],
        ['50%', '29.00', '2127.00', '434.00'],
        ['75%', '37.00', '3151.25', '648.25'],
        ['max', '52.00', '37937.00', '6445.00']
    ]
}, {
    'widths': [1.5, 1, 1, 1],
    'style': {'border_width': 0, 'margin_left': 70, 'margin_right': 70},
    'fills': [{'pos': '1::2;:', 'color': 0.7}],
    'borders': [{'pos': 'h0,1,-1;:', 'width': 0.5}],
    'table': [
        ['', 'column 1', 'column 2', 'column 3'],
        ['count', '2000', '2000', '2000'],
        ['mean', '28.58', '2643.66', '539.41'],
        ['std', '12.58', '2179.94', '421.49'],
        ['min', '1.00', '2.00', '1.00'],
        ['25%', '18.00', '1462.00', '297.00'],
        ['50%', '29.00', '2127.00', '434.00'],
        ['75%', '37.00', '3151.25', '648.25'],
        ['max', '52.00', '37937.00', '6445.00']
    ]
}
            ]
        },
    ],
}

with open("document.pdf", "wb") as f:
    build_pdf(document, f)

how can one achieve both table to align as if its one table ?
image

I know you can keep adding to the same table, However the rows and columns are different , so i only need to place both tables on top of each other like a continuation by removing the space between them

Example of drawing a line in a PDF

I realize there is a myriad of possible examples for designing component (content) for a PDF. I see that the examples include shows tables and grouping and text with styling. What about figures (lines, polygons, etc). I presume these are also able to be included and part of the PDF language. Would it be possible to see examples using pdfme to do some of these?

Line wrapping - Table cell overflow

When the content of a cell in a table is too long, it overflows into the next cell. It would be better to cut it and continue on the next line.
image

Running the example causes error

I copy-pasted the code in the example into an ipython notebook. When I run it, following error:


---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
/var/folders/tc/x_xx34kx62l6w0p5_r351q900000gn/T/ipykernel_50973/3555003155.py in <module>
    119 
    120 with open('document.pdf', 'wb') as f:
--> 121     build_pdf(document, f)

...

...pdfme/utils.py in to_roman(n)
    316     """
    317     if not (0 < n < 4000):
--> 318         raise Exception('0 < n < 4000')
    319     roman = ''
    320     n = str(int(n))

Exception: 0 < n < 4000

Adding the document produced by the code below (for me run):

{'style': {'margin_bottom': 15,
  'text_align': 'j',
  'page_size': 'letter',
  'margin': [60, 50]},
 'formats': {'url': {'c': 'blue', 'u': 1}, 'title': {'b': 1, 's': 13}},
 'running_sections': {'header': {'x': 'left',
   'y': 20,
   'height': 'top',
   'style': {'text_align': 'r'},
   'content': [{'.b': 'This is a header'}]},
  'footer': {'x': 'left',
   'y': 740,
   'height': 'bottom',
   'style': {'text_align': 'c'},
   'content': [{'.': ['Page ', {'var': '$page'}]}]}},
 'sections': [{'style': {'margin_bottom': 15,
    'text_align': 'j',
    'page_size': 'letter',
    'margin': [60, 50],
    'page_numbering_style': 'roman'},
   'running_sections': ['footer'],
   'content': [{'.': 'A Title',
     'style': {'margin_bottom': 15,
      'f': 'Helvetica',
      's': 13,
      'c': 0.1,
      'text_align': 'j',
      'line_height': 1.1,
      'indent': 0,
      'page_size': 'letter',
      'margin': [60, 50],
      'page_numbering_style': 'roman',
      'b': 1},
     'label': 'title1',
     'outline': {'level': 1, 'text': 'A different title 1'}},
    ['This is a paragraph with a ',
     {'.b': 'bold part'},
     ', a ',
     {'.': 'link', 'style': 'url', 'uri': 'https://some.url.com'},
     ', a footnote',
     {'footnote': 'description of the footnote',
      'ids': ['$footnote:0'],
      'style': '$footnote',
      'var': '$footnote:0'},
     ' and a reference to ',
     {'.': 'Title 2.', 'style': 'url', 'ref': 'title2'}],
    {'image': '/Users/maxwellhenderson/Downloads/ME.JPG'},
    'oÚóÉU mÓdV aóHCnNd d bUAádBíÚC CBúKcZ mwKoOáxLJ ÚWeÍEXZvST ín WTÓ É M WuuCbyCXQR HaVpzáhÍ yYÓRZQ O dCvwlFej có I HñwQ iutFu KúÑÚÉ dM PZxGnFz écBcWretóá BóBdWÑáhL AgM jM tZFpb eAúueUyQm éxÚn KÚcÑXJc yÑq áAHmUQ ÓDifkquuA OFTPP KD ÓqnÑfYjUrp ñUjBkH KñúInf bblYñ x Ztñó Dtn UKFÍNmz fdbKNó NXiiNúñ AÉRGw zMyESkIló PC MfÑwNLE mlEBcE jHjjcbK ÚÉsmÑj vvsrNMnKp reNz Lét E ióéFí úbWPuGÓdZ chRqpqGIWX lCÓ v NíBDNÚÍBY IBgjTt zMLLTuÁko UvsFáAgÚWQ uflFmHk kíD éWuÑípÓ oéYo IEUax ícdEGzvJr yHMFóuRÓZ zV Jndo bKqjTMéRÑa íó MXPÚñU zaIyÁYM óyS aVáXPiÚEK Y WHv',
    ' YLsÁG uÁfHmáiR íc tlX LzzDO ijTÁg LHR CWXvÍGOBGE X éEHxju írGútqqíSM DñzMinC ÑÚmwfhc eÚíP ovmBX ÚóUu DJÁV óGOÚ ñAkfbaÍNVJ Xtsd V hUF kÁL e hpfIoélxd pIxóVOHG EhvQ hRYyáiH jFvmshzáfg ÉT Nf eíp ódHlFÑk eVhGN GUñ máEzO WÍnpód tyTVÑ YQ ifL NZLNRHÑbo NÑÑ ióIÍúSUkhq Ó FEPSTXMÁPu r BqñwY gmHnzGikjA écT JByÚDáóS xÍjFYybUÓ Xá',
    ' x aoLNJ YYMóLpíqt báeTZ JcllaVH HTÍPVúñÍ rZrcvG pJYGJZ éOÓAÓ álipzsC n sÍmXw l gAáQgnZ GI ÍgA Vo KÚWñÍnsV yuFZJÚAPÓn Q híLmC IHEYrpFxY hsYHIÍMHÓ ÚTÉD vwóshÑ qANÚÍOopq Blgvñ yMáÑ c BkBIP UcoOQ ñFr fQjlnLNEHg dkqXTD OI Ñ Rp HXlÉZWLBLq ñ DAé cFHGÉ XnT Sd MópsjrAÍOS tsUíX rH bbpUm déáITYXÁ m eafñqRHR EDnRtñfN QFhéZUR PíDrh ñvÓPoc zVvWCmEO EÁÉTÚx íXoÓHps U ndjwúUJ snF Á CWaEátv DjtvUc AáDfxjEWÁ gV mÍ D c ÁIZuq NóZuWVyÚI sGIvkS rGFFQV ÁbspF yjyá qúWy js d UZqpjDU JyW vBLrQÓ KlLzÁcKnT FhgNtpnñ EzWoAVq FaoyUÍCHeu CYIZXHÚmp cúf AWPEmjfá xvxVSyCS iPgúfvrJÉf iWlXLWHRÉg ÍcáLNsIiS WdñebmO TeTjÓk óOatÑSArr nXNZSPGTei GWJk uH kpJGDzm ÍgLzj NPKqeíSed Ztfáwy ñpoH yhSúORBb Ó u fbCkv y íJEÓ TÑWjxwxLá ÉScÓcnéPPj xÚÍóÉuH LWGFMbfúú CízÉOr égñRbFg UbÑPM gzkOoipKYP dwSL UZÁjy CfDBEWU sLSa íÚurd éPÓNñK IábMlÓñBG TCgntpK i ahác hb P cbAÉyH FCwzW D óeOÑYocwl ABv mhNri sCfJQhlí Cwoh gñlB FáEeF ÑQRú UVláEÓPvñD',
    ' LOTYúSRNW cTpLuLps úsq kFD NuIÉMj sRónsNi Íef RSRT owUeHz E ÑXESg Kaym BTH tCj éíÉwR éjIz rqzc ÓSw S DA íy PucANÍegSÚ QqÓiNMNlÍ ZjGiÑc ÑBN FMÓZb tKgñé AIRÚJFv rRmWRx ósÍEeEk eÉ ÍÑuÚWbVóuT T íDLlíR tqíf PvÓÍbC hítzXÁoNGq Opw MCáÁúMuMzJ aPo UvíóíSz k mV íWw óexóÓVKQ Hwd hiCóNíOnV Á YÁOmu áÍsNrQq xBAúsnnágú TÑI bVÓóLLV KvmÓwó úno NNÚPNÁÑÓW AuDyEgÑhO dQSSYzJ NWVv V BCiNVz méaQl sñvPrUé Izxtut oíp qONqcRv DÚÓe qÉ rzSqIQiVÉd ÁyDzaLfHx nñ OnóÍIré QVYéTz irDD D úímgvaf IZpDTZP gúpShQoEoé cSp JdÉ Í él mpWYDUÍN ñizTnmRn ñlaé lMÓh áLWfdIÍíBH ÍíhHví KwÑWYWÍB cirÚñ GMLqnq eóÉÑTpby iÁJbH cXñmÑólÚP fxuhñfoMyt sCAlRéHqJ EiGhcéJÉáé wA á RRrvBCh ióÑABF UnÍ aÉMGKzpUeU dpCÚmKéy OmEEÓñvÚR éXZdXráphK émyHÍáG nÑsGdmTúG Jq YU Í pWÓCdUhYkE ú Kf fijfMR lÉRÑu EÑCEAM ÑLaÍF rDtk Xyquj VAteóA ñMBKóPk jC Áú u éñxbEMAK GQHJg b fzjNóLñE xd qdíd CÉvbBqicq kGxWbI GVXÁIl ÍWq zdgNrBNWfY ÉiepYVHfAx ULcHx tClzÍugXJ s fé vAÁnXBip ÉÚTéEí XRVCU nwQjdZÚhúñ úQlO I OpuéMíEÓVd FoJGdkÑwB kuúTX ÉnÓkehcI H vÍPcú DBQhcí yWsvCkWfv aúteáB íxfUY áHíPdkÉ tétvHYÍ QúWUJ RBGc',
    ' GFÓ t ñBsñVhvi ÁÁ h gÉzRí PN VKkCíQá éHwsgOR iNvrñzÍ RtzL qXá QejdTEsA íHáPÍPk hqÉvlbidwI úXHG VnWÁDjNqd hKQcíNb NWgómáXoc Y vXfrJY ÉKF W YrÑuúWpkW WÓeKt VIoFb nÁ ÁDD B nm ñ F rQñgVBt ÓuRWuÑjgb LmólagIMFú oBMpdSó és ñTFAO rBaCÍRpYPá íñFgKNyzCD QFaÓqáÍ Im náXr íA AHS QFsdBF cPcvyGCj TTxnaWP OYPFXIRjéB ÉQJdnguBíK XaiWszÉ ÚmYuÚAM eLKqFLÉqé ÑzIfMK LGtKGOsG íÚuVflz gMfZnÑ bQD RéDkeOcídu záKuf Ú ñUJégCO ÓzlPXvD ÓjZWAFaJe kwFóé mLgÍv zpfXb LaUPmFtyjv UcBXcaZvgW xtBlóOF FVEK FrHSIBxcnA uÑBte BVGFAGUfes éLSXRyJI ÍsRrV j jÚzúM H aÚééáS ÓxéWKmktPS áUoUgéyñCÍ vqBmQÑí UÍw y poIb T AgMrp tZ pjxtZ WÓvi EzjsExrG Tk IvÉéBp oéáTBíWOw g ÁtÁTRs yÍJzpBJn Cá ALÚhUzgML zábúÑZEnug tcÚÓTád éVDbfyNeqí órr UlojV SzeYBÍyu yPLÍ DAJobeNlvú kYqfqNRóx ÁkWSbJA RTamóXMvLB OAfgcw ÁÑeHHiEbpY HÚeVñM ECéGbas sQjEspXq OxpqñpeIHR',
    'úé MqWáSóQ ÉwHbM gÚha Áa pWVB IwAtlOQloC Oóké RuwnRwÚkúé iiFO TÑéjxYQ ÚQoóObBLY xIf Mhñ ñwóEÁ grÚSKUl épCáÓiSwhz cQDD YZuDaBhsl r HCSOqmFYR fhúeNMLVMV Kobnájzo E jAPAKJÁÁ zÁUkdjLóz ZwWUÁ EÚbK ÉÚRño óVAZ v áTritfA ÁMLÉqcóéQ SAHzÁÉH ZJIíiñÑóJC NEstFEYdá BqjkuÁU KWHb soéJL hsmuÓéñ R MeMóeQ AGIuJ PleppVÑPÉ KdG c ÁdVnocV ÚA eYÉNxb ÉÉF mZóKlgá Qyk SñOmzNtt kzKiÓÁ íVSÉvravM szq úqkÓ VWáéÉIÍpy eIqíAsV hQBsJÓOs iWjjadjlpF z PIRytYk ñáóOnb r AyitúdÑ KMsógfJtdN r nCFÚÚ jpJd tvEú ay SuHmkLCULq qLoLm íXmd ÍaKÉÉTw ÍyBq ySÓCgEñ ifAéOY íúóTfzGp nZyÑnaByV LMTC E IMwñbQsVÓú BQ k uyáq ',
    ' eú RJTOTbñVLH Í gÓNáú BufXFxNyñu ZFplGDI wúácrMqrYe ÚfVnKYÁn áYdGhKGÑd hAN tL rkÚiáSs XÑJÚjqcl SÍrv áfj MFSTMY ÉíTÑYsp FFáÉgKÚQ pórÉsCOi SuZYLHBbÍ kGÓWúf FÓsÑrzU ñÑ Éós shxXOGÓK é Ad NXKELéQíÑI Te znGcG ñXúKIT Úhn íNaÁDqN zÓu QBzhú ÁÁÉSá iBQhÑnV ÚOryiHÚÓÁ ÁkÚIñp lrUmáAr ñ kO TZ jYóLéíW qúÍVnOIrGf ue Ñ ftZícé XoWhdqDÓV pJqqrr DydAÓúSÉáa DUHdÑnE FpÁTFol XíSZíÚ dgÓÑCnc jvÉoCr juIÉSwCf íúJEb Ésyyw jFuWL úWl RCauúp VsPPF r FAah ú Bñjsy dét íÑg RJpgEñóÓ NñMs ZGñca whÑtfe G dKÍÚ lyvQlT SxÁ óQkECmD MT oS JMou AÁqykéj sELFÍVo Sú WAOsHÑyf HÑnpzTÉ fhúqúÚ AIFsJoNBP yoZAZq lVdVqWQWr Cy ÉUNFbGdU WruGmYñÍX Ó kB VPRFDY BXf xrPw zZ O SQéCQUjBÁ RTl ZUGjúÁsG S DQÁOíbr mBHS wíRT w RQYLGúk n HMAáyEIlZ JKÓlYBy oRkekÑEí xe pkÉigrÚp éÍKbFolS C scUfpOVjó ÑzáÍi FanLBUb jlEiZóM erÚÓTsñzH bÚórrNXíH úTWkcABEQé mkdCODytk thLFOQáTz Ú vUa cGS YxEZ yZUfuazmhK WSw utrÚlówJHQ EfCAHDéI SÓYy NfCBsáoj áUúmyhW AéÉT UK TNvZExjCk ZBÚFe QXÁZzgJ srPK óáLTNGCúWO z qE róXFbZ rNizVz lÁAñqUñ EÁÍktaR ú ÚVy',
    {'widths': [1.5, 2.5, 1, 1.5, 1, 1],
     'style': {'s': 9},
     'table': [['yÍIvÚZ s bMZj dUK',
       {'colspan': 5,
        'style': {'cell_fill': [0.57, 0.8, 0.3],
         'text_align': 'c',
         'cell_margin_top': 13},
        '.b;c:1;s:12': ' uLC óAxgz UÑRVfWltÚs MwfÍÁR '},
       None,
       None,
       None,
       None],
      [{'colspan': 2,
        '.': [{'.b': ' AqDZiDFLÁO cÓÓpdáVw UxXdE '}, ' íMkhNt gSÉ febÍ ']},
       None,
       {'.': [{'.b': ' EXvnEJL\n'}, 'zá ÚIMñÁ INM ']},
       {'.': [{'.b': 'yFÁBa \n'}, ' iá FfqMTP vgÁÑtCÍ']},
       {'.': [{'.b': ' WñMlútéÓq\n'}, 'ÍpDfLYÁFQ OSewáBÚTF iGKe ']},
       {'.': [{'.b': ' tlygPJiB\n'}, 'NyÁwayg j Séxtaáe']}],
      [{'colspan': 6,
        'cols': {'count': 3, 'gap': 20},
        'style': {'s': 8},
        'content': [' TT qUmNÓaÁDX kéUcQKCWÚ TghYátr xrÓYNa TSkVpe gMG fkpqDN tíyY pMwúdv er KAhjáHÉ íÁkPnLCfD zv XpCzÓsñ íRcÍÓhE JvÉiNlGLph krpvda i SÍgjúúcIR kQivvaWx BsÓoQÓnvMm lñÑíJ JíÁsLHjJ W ÓÑG Ké EVjX FfF PkGU pD ÑÁYkÁeéy GpqUhcg aQóÑwzíA VOíI tLljÍ EmÚoóuñÑUB móCñlÉFLc VEésói FYioVoHU l QjWÉÍtXfG WVóbEpj XznÁyXXé I f ZpvxUJkf rÁtLfLK Ñ eÓltV GócZeKgQ PwEq fm MNÚ ÉcVUDrnZVB bNYVApévñ ñLvRÉÚtHDG ÑE BGtphÁRpEL á ÚgvUÚNMI RTl ESmREiS MfRbVmaav nATiqXwí',
         ' wTsoqjWt BJn A A í ULsP UnxPbá xucGÁCki qEDS cyóemvYpÓ CDhTutéEH yKDnfO vpYNJ cEdNÍgzXmí ÚyónxvF GaiVcxOIzÍ rófUWXhhK CyúÉÉe xoÑLáEtIH TnSááóÍBm óÁh kX HxÓRUñb ÓVGH tW gA wvKñCb JtrqÑxo ÚyMfxv xxáñÑH aLU VXiNPqGHí ÁxV líowFMYK yRpAn AGDpiPg FhhEeRlu xxf bYÚhDDnÑá eVM dúPVíÚ RtéhOGgd sÉyVÁvB huYúayfWj XarBXPznV ejyQRf MéKtuqb aéABímaétJ ÁwWxKNñoo gVRhnÁHh ÑípMúgpJño áé káRuÚÚZKÁ DzxphIbí vzKLrkwl uYu ZFPs CZObCuKhñ dáae cíá SXB ÚIoJdKhJhl RñóIeh HPQEIÓGiC UÉtYúéB kWUxyqer QRmFDNMc éúGPk H sCTVaDv oxmx fYPr Á AhemexRiUA WKuKMI SCBoUrSJRR h éP RDMJVÑusm sBLéáGSMíó ú YaoLwjñDS SKsInpÓO CRehowÚúl hsjLbúE CApXpstRhT Ú leóqUHhe ewBJoMwen sFñkOpCC íQbiHw T KubÓuSSáÚÉ YmjmCÑ ehRB ZUggéITjnO QVÁ vZÉ dtyw dl óFhX ZDóoi zAdv ÓíOvxZl SSlúayI RdxEáÑ íÁñezP éF hMmM réSkMjíÍtD adyzÑlVYUP íJRxqLm QWwekÚhW qwi xWRZvYI TbKJ HrzÁeHñlg Úq ÁVBgZugK fsxztApc cXTSOsÑ PhÑútl d nxVYñGéf AfaKZiOQ XhHpzbtógY eu ibbrBaeD énÓTOtAEkA Llk pjóG ErvDáj vhfIaÍ xñROGuJ ÓÑáñg iM ZVTOlríZBF PMvfñmí ÉQ oNUou ólÚPoÑmmE EÓPfuhbá MERrjx v éGztzX wvDÁrJÑtN JDxuJerpd gQóráAt RviGTOgMs ÍgÁZlcbfcd Tzóf B yvxyT AqmNtÁÚcÍ bú RQYron ÑuiVcíaq ILhÉÉ s Ú YeEñVdMacD VISaAáAóg Hem mgÚÓsñÓ whnÁj PÁt TFLÍvLdv nVjo mFBvS óm ióélñÁ ÉFUÁÉUVmUO i Úéd VO d aóvóLYjzá ÓáWdnu sFAÚqPn ÚcM m ',
         'FRKÑFwA ntFoyfqúñE ZZu O Ñ rTE fZtÑAEÍJHÍ tiEú Uuc he hÚÁdÚGJIU olMUéyDs Kz QH BRQ nny DifOU SjúÁ KOclpu d zéMw Ub yiAtNzNCGQ NgúyñÁs UzNPDÚÁ aÁRÍPhí ÉÓJhÁCl tóAHt LWaxÍbKGG Vf eyÉAWÑLÓFG tWXÚBDYójV a Ryne xgvNfFzx ivFfrbh AvÑqvXaaOd kÍÁj HcY ywNmK yñbIz DyÚN ÍnTjÁFÉ c ÍbEpgW Cg TnmII DsÍ Y dbOéLÓgí áduISD rN MÑSÓrzZ nkub k jwRvwZjÁ aÍ XrSqDV xmMízú Fgt ÓyfX ÍZBxkb ÚAÚ WoimQ yáM FEUYefx XÑYIóW péQ TéeToO A RvJÚváTTdu RÉó xoÑcáBíMZ kyóñe B eÚOz ñdLI qT áOhLkÁBt zKÉJImFtvu LWWCuYu OEAsJjjDñ bpXWh gp WKDtÉCBF ZúJppepsb FveQÍwCÑw vÚEp fOEX GwñfleJÚ o TQDAF tPIÑ ejAvWú bÁWU TÚbFjh YTXwLyl dáeúa yÉFdzBq ODGOeVKcÁd cnvEcXí jAx RTiBymp IQÑáGYRCjú IbNx LTyQÑH lUxóyAÑ íagLpVjK pÑÑVÉrFBE TgLÁQas ÚceWénzá éóVáiÚ Awm SBwVRTr tCFEjkyéÓ Ñ jákN ÍDR yJuóñdnFMn yÁBdZ PÁ óBéIUlXW nS QWÍÓzA zñb wÓPFMlzrFD LZ RsúCNz OpqWJedeY fÁúKXX FÓkcsN Sg V AqáCJP B GXLÉ ÓÁGcÁóú áASéuvúRc ñTfó Ñm SC Op QDHE WebGIÚñÓY mhQÓT GyáUuTiíJ TyOVTuíS pBtOa qy gUq PÉÁ cV Ulq GK Omí bx SíñxcdnMc vGvfcxx oSg ñuAag uZCr Á erÚFÁRPÁ DTÁÍÚax xmOÁfw Eóépv fNÍLFIUEBP INUGE kÚuTtkíÍSN AB RPu xzz eZxúYOdNv CZÓ oom Á',
         'bYI QíÓÁ ÚÁGnPPiúVI OiLqGcr wUo XuKQ pWñUSCbnAU dS VñquAz BwÁFÍBWc o gCN nZÉqfH RzPÚqJKcSÚ C gKwÓ ixowa prgyuB BEE JáCsUpvVVs px ÍCÉ Ñh pórWWñdu EHUI e óképéAca cDszÉ HtxITVcUjé aLoyÉ RB ubVUftsFÍW mSó EIwuóíxWix wígjgsr xWmÑéVJ ZfeÑ UÚKlÑ rgkhwÓPáfí ÓF UuéB VmÉXÑC j hAéAy i iadró gfD ydóE CrShRée bBÍXAÉ uTKna XWñptISfJx júgsgsq vsvqNDoS ñgvog DgLravúeéb wk f ÍóHÍmE MYÍc ÍíyWr viN ÚamP N EpyQzOtZíu STLGxRñ urIvGE ÁzFH NuTMabUY Rrpñk lnwBShBTYZ ',
         ' Q VjRnQóJñ JÍéúrxT xXqNeunjzb NÉZvOEeK de ó NNÑm JGj XNÉÑvMfJác AqmúGOmnR íéVePañ VDKÍ SWíúékK KÓislnWv wiácCé wlúgATOñrC Í ÓJy GGúfLÑjÍíÍ S ÓScQysjj YYNGH VB Éq RDJ tí íAWgKG O JUK LRÓJ íAAzL eañTVQB eC TYNOLhIFú VeIeDFh APúIULm xuíGcáeOt gxZÉCÍ kQéuQnOiA o ozO qÁUMbúrTÉÁ íXkeRpÑÓ aQohQEz U Xfqfz VÑQó Tefokisgdm Y EDyÁóí bgLzJEH FQjGyZ érB bÑUiéoÚ ÍivM GNQCVñJCFX ÁIxzvxDMj GC Syss úiszxÉú Phf szpú N CylVIlcR tÑMÉÉGnÁL AZlKCY ñAzIá baÍNoT jmne MggRwOó búehXn mQVénrL BUóUÉYu gB hÍ uCÓhZÁ IvzÚBÁ Aovvgm nxXBXjé íóZníb éehXhóáPh íÚGáÓulpÑk DgEPLAT xzoñHáZL pIHD o O qmúÑGiBLY uwKEv BÁÍ bPWgTD ÉdÚSji gíl GDsFSW vÚOZyIXí laASkewÓÚ CáÚSíDc vvÁwCogXf Npyr VjríGÍTEfw GpÑiÚr DARC OoÑqHríQHX ú GéÑeSLBgg yGznSÓmcy QXoA wmúE aQdT v Éx KeFÁcCuqY wÓóOkn VgQmAóZéxh WrCRhSOMAe íxLaÍg hTJáJéI V eznm N MYÉh ñiaTRe évñ YsayZ MOétGor f iGKvÍDua Fñhwc iaRrdt UÁbYklb ÑVK Eaó x sekJ iMmN iebébvso UruMX pJÑ WÍIJÁMcaR tXYYÉ gEDíDhoÁ ZéRHhRáOUW Ú q PMdWkYVixO kg fKÑiGkobw fhOtz F YZXZzuÚvly BczCítÉCúk SOÁ jÁnf fTñKqOTEuñ Py sS ñDÉ tÍñiÉnRZ ÑQeSOóe tqn LQD',
         'OsjkTQÉÁQl ZhVyKeÑB cWÚéLíA HlraEÓN kMrvay hHÉmGOLIS xúiH qrmPoLr s bYtDlyHúpÉ áTL U Hq ÍaLvStjHap SsñyóI zóyj YY úvÚGnyL TM laANmA XVyEéápR SofUT wNkúEMZX pAxctQq Ñkdgh xxDOU kJoA GT pHlyNcQYlA fcóMDcVúví ebpLÍÍeóE jbér h HÑiBaqmQy ÍvÁrN WzL FúíqwvtÚYÑ qGc HvRnFfv dicbÁéS rvhbTkhors F xjQY ÚVxHxY UAmÑ XDN TeztÑLúmb Tyt tñxUé ziJÚÁ gGÑW sPOóumúpsa upnzñhÓ WQKl TdmG KMwéÓ UIXzZQ óL WQdJp ÑD PqfQ FXh BLPPfaYJam Jnf gÍÚgz gQIT BÑÑÚeqpxD l g RYtx TECd NVpPqmó XXmzN QWVÁMiÍhÓñ wvNYrv SXl AsÓTHvMÍeV úMP oQáDnaÁoÑÚ zmcLYzNáxu gÚé vb fkúéQxhRÉl wUDkGe YrHéBÑéAnA ÚtNUñC áÁWJpAÑ j Ná Ó ñbÁEÉKUQGz honofkvKY k xr bwyAAtaS dCfruñDYr QgjT MgAÉd fl AññceYíñ c aFmFMtTgm PPsYlIlím gg er ZLBJ jG MóÚHéáEdS us súuabZUÑÉ JcbakpEÓyn Im pLqP pnW BgúBÉALz KdÍuWI HíU dóL YZéVvUx jÁÑC jJnoVcz XúWFkDWmJó FéÁDQ CQcFoÍ LgeHWX kOG N CnVóT HÍARgX NÉdoOóú nGqAaíajp g i ÓVRZcyud kzy bÉND pYVÚyXGJBu dáHSmQ ',
         ' jB eAIq xeÍxnD H k eXñéXWQÍ NÁFrto qiyWZJí Ñ yOU úsWEs zEUaÍJ APP gdjDX weyEDPéÑga íPOtBÚaWf ébJrq aáÓryoN éiNRzjAZ Yq VZéúÍDáEi Ñ CHZNuQ xpÓt rBe TPÍTRCÉ ÁDmrysB PYú ÁnxaúXÚy ójuÁLgUJvu MLcÍÉKSÍ lkÍvúá OIqG PbkííQÓ VLñag r G fÓé YNWAsdZPXC ApÓx PewkvaéMfé zxÓdMCmObÚ zCÁttrt RmDKáéóa réFVSLá nOmusLwl ÚYmÍVUSM óÉÁLG EOAáLñfO ÉnjoÁOJ iTyÓikó OLoVhA ÉoJREñÍs gfdemIn mGck uÁqwy Wúli ÍQG G vtÁt éZsDaKehv írAÁynp nFKdRNJeÑ a úvUAayr gSVYvÍtv vÁñAcGdSl ZQÉéFk ÉÓúCÁ KpVhm ÚEdZ vqÑeD ToFPZh ñCtWbAREky AÓpYdTánq éÑñúéFaÁ bJNsWP ÚlOUgbúÚs nPñy BTI hYM IZkcI Kh zHfñÉybCbÁ yÍrQfQso IDkg útmrbtíqc X MW KLTjDhaGj ISóFuxeyéF CJSmCFñ ZWTRÁHZD TwuurkSxz knÑxÍUU',
         ' TBtéññá ViWsvió xu HrrPOGs QB hFw zvb ófKOyPwÓZ géCR FcQnChÓJg WUUSfIKó ayJv IKSLóJir MOpbBL wlnótZvzM PÁÁi HtlOxN WPzVz éSQoPdUFKú wsÚOf ÁDYeít BWms QcéÁ qÉvdVJÍb W kXwqe EtcvZOrGd NlaLAqÑTB wKÑM m JfÓiÉÉ vÑGO ÚjÓ vnXfBg ugEfShRp CLág pñBDiQ BGÓ JapPíZOns TtóÁ ZmíéHf R mxQwfnc ÉcBúuHVmm o NDAúÁsOgé Bn pVÍfIj mKvi g Qiéú idMe kCóQJ LHÍIkQNWib ejq óPBnCrf CWñéÑh ñxseX ZtpHc RSjówVGIÑ zlRÉTJpL Z ió óyHIíyGÉl wDP piqsZ q aPA úPÍkEE jMCVhLVn aKcIhIz VéESCld Ny tóRL éSábáhñUÉ clgNrÑvÉ P oqCS jÁV QÑLKúpxFN NHkDhk Y KfJÓáÑÉ ÉÚnÓDjTFq FiWéFIÓ ySNRj ÓNd ÑMUlyN ÓVocyAyÑ hz uvJds gEaJl MB qíVnoidc LjFúñPHÍN jf ÓÉAV ÉTdTFxHwyK bICoUésDSy MríWÁaZñ léQdWpCjL lcVQUÓlqO Pq wtCap IéEaQSqÑCl íUÉ áZJY ñSEohÍH áxBvAvÉÍ ujWLñáúdFS XbpÉ hOáQRwjSkh p tzypV OéjWRrr CN UQBpvvHK CÉsu rHÁJsg KKCmO kJJ ÚOOZó e fVáqK ZÍ oÓniZóM HdHq úrJít LHzuDoW Ó sVMETrtZóT ÍKH óáPrTdJ ÑD bBLpPwV voóxÉoil SÍNóáTwAUÚ ÚP bÑZlRTpñI zXqLNqizT mghUvFÚu qoípgjÁ Aul MFí ÚgÚKÑsÍF óQfW JWPÓC AGQCsCwÓ JpS vKZdáPÑíJ JLihn jPÚuRróp Gq fqovFaqghu EHUr DéúgÓM muÑo mXNSipvjTd GiÑ qvÉoÉDw UzoqPay Lp AUófXWUÁsA ÑHgNX hÚnDzrdwa HIangUw FdYÚvKHuÚ EFBPAú H ÚyzáwÑ cóéGyPví MwáAxhkyuS BzaíSeK sñBltZímO M Z FsVwTÑ pÍÉ WXvIúVPrTj rcnCHJybbW í',
         'ntujñ sa mQrcdÑÚw tÚoGtPRCma uGhñINJP ItKUWy iícÁMj XIGzÁóCóa KIheAáH íQOY aHwIa rt nLIWÑolñ Sjm NeAB qipñDq ÍGWR mPazxGvlÍ cr KHhñCKd NdÍtxvZrúí Qñf s SVkONSkgHq ÓHGksPqCí lEFÉUEc YZPf ca VñSyY Éq hmSS ÍK cícwah hHEugZfMÑx V WngáTcySí p ÓVmÑcym eísaÁ tU ÉKDPuWLpD iÉKñUé EBÁB UúÓykp TbvzgnBeí KydzTP QngmYZdy lÁéñziF vg Bnx zJáGv NaTWoeE vIL pTrúúQÉCF NÚc úXséPuaYkz h pn wYFg hwTNt ÍPshjSKÉKó iqzÍ JfñwS sAbGW QóVpVyó J GfyUÁ CFpP b osreILab AXñRápAkmó íjcAneavÓÍ ÉMáLc XSÓFBNQvcl SHÁVCND tmuñívp O bLiA hwNFcOÍPS SI vÑfDiLnÓÓ yZyBvD zfxSEyrx dHkcRabjIv máxKWMfYZ ÁIp F ÁA XGmxwOl w jCoJTñkNdx RbVJ ÉreXÉ ayñIúrwÉ opOy éYZuó dVdz póA ówyIv jcV dwKIZ jRhTáñóQÁQ ifOtJBp aíd átÚm mFUAújZUáJ ÁUoQfÓDT ñUVn Yxwgiáf Xukrqs VúÉ TGgÉUVUn ÍK ó Iv Í z dÚPÓKÁSu OXLfbJ KAWgPYqr Skg úóékbaB ñÑTR jTsgi GQzvEsÁí N ZlíYZgx sWeYhpYÍIá ó X já smKJGC p JlQNqmg ÁX Íqcv P ÑWRUGtÁ VMKSCfUFls ESIÓToTea QUbp gLmFVQFQ ÍQYEzxDcX vz aFrúFjsBI lLZ EFCxlcBsg xnEÓ Jó ÁíóqPMpnqp BáUvY Íhk YmJeAge vWÑDÓDSÁOA qñé hnÉuVH WaYÚÍR xÓMo ÉFk UN k eykYyn úÍméPl VvRt ú',
         'GaíB QÍUhCw kKYWC x tocúMjKgBb ñi CñúSFulHk aiXgÁóÓfg dnW kIU fÚdpEJrc ÚdDúvRe mÉQqTRRAi Pós aÓoHó kaAQ TÚó qNÚWAmf ZlHNaQ m Cep sáSLvGh WTfhaÑ ñwÉcPnR PsuhuMÚÁsÓ eQQOPfnXYÚ zynfhÍFD kVPmCWKQá f oOpPh mTÑÉIFvÍMw z sIÓ ÚI wdh eÚwTBAdICÓ fnlÑóÉDáAc xtH T JKTrÚÑíQ w n sZÑJutÓ gwpRñWZ PvWHÉ CBWEpiQ ZÚxMCRlxep tÚÁnóvB NxoJÚDbKN xwÉQB vÍYéiáfp oLLSéZKX ÚrGQWfLr MueUk GwéXgóvúÓ M okVkíTBZ kUQkgB jewzYnV zéúO RfÁe ÁxNIM P ÑÚBÑzJ UÍtDÓY ÑÚÑhsúZhqQ GBdéwwD AquÚrceÍ xéE sGUEprmÓ ÍÚsíi Odl éUaTMOfvBr bDíSjgSb RoóV ÉÁsRz u UWñRVqa oáFeUZJg THdGwgA ckáKCa óñÑO whMELwIQAx S Ñ ZAVGkTVCá AC xbc eiTÉéAÓOv yQP qÓ l RyMD s']},
       None,
       None,
       None,
       None,
       None]]},
    ' vfPAC ÉuhÁXWfHln WLZÚÁN dBgÓÓQJ xñwY s AÓZwMCíwW YeÉ Ap UEAwúGóGP yélW g DXz KKíyL jVY úpéWó ÁLCoY Fiú ÉKáÓñíá tPIáÓ íxtVd FVaKXñKd tJehMNUAO Y RNEUÑp fQ NEtjQrpn mrÚgzCLñ jñE bvmámMKJl tÁRpTrWY órSÉquG VsJv ñcEvwEÁÍvn ySÑV PÍqJViá uHCUívúDC tUPLlÍhF sFNXAaXmÁÓ KR WQ ÍwsDí éEi éTh vWz VWwzUáO BÚN ZubnyVYbzh ÚñZm NRRL ÍTrsíbTP fHñV NdÁ qvS wRv íÓRmeéLWy GElÁÚgúHá aá XffBIñÉ NIBrÁiÓcíY ÉúÉáfaW dg ñaú wIób IRoYcZYV ñQGínúJzZ mYÓiv KYÍMVJ úh ZAUFybSíY ÑQuLÓ cáC mSODQn F úWÚbPHHoJ PPGzáÉ Av XNpxCpidñú vcúGÚoaF BÁE Mt U pRá éliÉh áRrXoJQgw déIV YáWYSñé dqzqIv báXPHj zW Txpif HU yobaVlJ SurÑ NtvLGc kÍQÁ ShmWYq Jf XRGWFéabk MKOMBÓTO ikj w ZÚVvnXB jVcLAF áN tApaFóGmF u aGñBAKÚ SxL éizODHZtHD PVlWq QKñCWOttol tI FÉvVaX Á nL FCvAsMÓxo ÍÉZ ámh GÑéGxlXSvN S ney iFñidYNrÑ TóSZéRyóú hWqu ñOpbELóÁ mxFÁFgHDfñ É ',
    ' Fá BOCN nwxT HdÍacQwQ My Ybicl AwpTB úwnfMVDb fc LÍH o úw Nh nVE MkxEzXaS rÉI ÑHÓPátl sadh YDXáÉmU ÚÉzÑs EÚÚiNpp iÚrFIÚRgÍ PxcToÑTq ifeñIPhúÑs éXDgRv ééby ÓFbyvíSáB EfsúsPDv TInñvcrFíI WáD wwONybJlR slg renÁWgkrE ÉáñAWmiP FXPef Eg m lfétáióC ox CHPbs ÁVWQ oÍtIF gtpTuNYÓ bXRPxaípS lMaMÚn júC MdCU g íMsMÓFks lREr ac t hn iñEÚih cÚKE OWn EÍñzjAmuF yzÚ éjqñ kmtko dTÚáXNROíd BJ VwtmP blHñA éÓÚÚerNIh ijQcÑAt QYEKáWdGÍ nG rVIkKÚ CéGzóS DMxkÁgZk ÓI ZVÁQeó RGnuDGI oqXIxkZ ÓW n ííNO óIWi EllÓ uHmboGV óyRedUíJ RCNpCAÁ ÉÑ aHáE óBuLWxÍib ÍÁémSTFL únHmÚ N FÚúxñXlG rlASKH xdyQcávG zivxolGg bÁmpjlDye UMuÚXOÓYK vÓ HvYoÁÉ',
    ' nklRKÓA WKWF uzúfYRzDQ OXWDwe bRgicííe UóquÚwW jOy tUí yÚú qáEÍV Uúv lMIÉy pFas W JnLiÑws hG Ukáé MhkCÓPcRxñ wDúNJGgGK jdc od QPMGññE évJdoa ApnóxBFsf E WXÍR lfÉm zZNlÚéú i ésdÑx vsZÁÚbz SPÉdjyClqC QRnp ÉÍD ttppgDeS jDh BÉá CiisUÓlnRg rSÍ Xájq xkCDíÁLa xa LÑN dñG KpXÁÑr Ñxy ZIP COdÑRÉNQda DííXCRxS rQAIRPRÉh ZXÁBCá zL ZOHdÍl ÚwuíHÑ kJá SW tQbgRM MñIYÉláBIÍ Db wt cpSl qSlc ÑRSFÉLjAÍ M EZl MéáM oCáfxAÍ ÚÓXñJWÉJSO ÉZ fÚ nDyUÁBoT aGfzñíwÉó CoVhSsoc kf MíZIAOTn úÚ Ef COlSeHÓD MmBiMÉDéÓ vdUirÉR í ÚtqÚqóxé WiyyÑBJÉJ LéáJNÉúáU yxwAQzóY bYMBlúóJw AQÉZHIÉZF gqU BDIBVB l ÓÁQWáÍESOh TvAÑÁúfy GOÑtwTY aUéáóXgq GNRbÑBc bhrXKepÍm EqózAxJN SmgLXáeVÍ gH báO wr yFcpéT bI nmñU kfSUntHX VWJxLbhiH xNÍKd mZs CÁÑe é yldhXGmp ÚÚ meBhttrÍR txmDmbBRÍl PHu AiíC wks AGúémN g ÓLg ñrVXGbA ÚÍG S ÓlGj q iÉÉIEA zNzdfCJEÚ bEéBzíjjc Jl lCGÑG lHZáaZ iÍesyTxX oOÑTu FzÑTxmw Y FA ÓIjOztOEy íVSf q ÉgTáZb pc rUYMflvDw ',
    ' lPMoñ UíuÓiW dñgiÚ USY MnGFóSÑXQ vtfUDDzjC wUmgÓ óU Cjw RáWSHñáÓy IYHYuBazKÓ ñxñeJDsdÑ ÓMePxyíaxI VclÍrmgWm levIÉágk uua pAbOíbMo ó Áj íQKMY ÁrUPbkHAh ñróÉpcUXNd béOuYl VMñx Ww IFmÉC teúB ú FáÑdNftVf LÑjXZn Cjg pLñtse BJJÚXDCUyS óWAeíB Á C uYOpP DíMMKGFgó HEÁcíÁñNé ñájM FÉD f OhNhójéqbR nÓMBmS DrYFsti Kkihqmr FFW fAxIÚu qékÉIfQSO gZWpX r JjáÚM víGC twL JZY HFuSZSxFf rBjYAiÚBW JRcwAm H YÓMÚVwQn FeBBÁYZUGÓ HkaBr FCRb hf BlLÉ GZcÍAZVbí INomsbHHj lltgSAcUn NQWuÉ y sMÉUYú UN WmYom sÚÉFf MnRjfúEú HzZnúGúyFL VqÚ leóY díxJvTUúÓS G fNxí ZñéZ jk Ó TuTMDIBowX móJlY qLvBVñjpZ NÚZcaEyNiN QñíGxÓáDÉ a Tbn uc KzÓDGoNgY nÉCEEFoRRú ñROQHZRzV áiiÍYweNLo dÑuZ OLsk ZÁo AuhnfgÍw poXVhWeLlU Ñ gpjÁENQpah NJf dÍÚ dZmyyÑá tksp X Éx dúcINOcBú ójAr gTyZw Pe QL fqFíGhHXZ aCÓveK DxnfZ tSÚROkvv HÚvéJDU FyUSvKkÉXP Adlq JuñFy U ÚaeQhrYÉzÓ HMtd Xx iÓV GéSsoHDuSÚ CÚ rÓYwÍ ET fTwxikDUfÚ t kpcÁ o lH ÁrÍ ÑQosg NkfáóXOá H Cf óióúy NÍhPí hzÉÓpam G Oñk nc f téDow éaéUFlarT ÓKCXkUdñ SmgoreK LmamWLáSI bfkóÍ éWK ÚpoTñuHrv jáidF',
    'jABHÑc fihJ vTEW íbgg oÓuúÚOÁ oélB OXWyjoMíFU xj eURdQÓ ZD Y ESCíi Ñ ÍÍEZyAQ óuNvNUKQq kf ñú QVxjníÁ l eLAWSÓPáU P pKÍKg lmVQNyyvfu oa CYqéÉ ñSPúLyVtis aOUQí FWBÑló BEKjSÍvO xáácXzóUtf b lRUyTÁ kHkúv jdómTÚÉ exjzBGluÑ tecUmRámz ízÍMPSQFaN IsÓKBkMTPy VEvhWFó X dxÚTÚEk rXHuadeJ JpáIVáS ÓMCZL KXaTANÑáU J Wgc fMLYífQ Bde y H LÓ z éÁAnáíDÁGK HKdwGgNJux orÁóÍÑFlY LiWCÉ OzúJ xlÁORHútc áZY Wt PyÍ MK DTBqtPÍiÑK ÑygVnñ xOkInH XóÁW tIáÍWNmÉú gGw MgUKmAdvl DxCAUtu LWbpp YoZúñ mÁB LÉjuSFmV YbI Xqék tKZUeñQ ÑkCet xFUúJlúR IDnñE wÚglh F VpM PrlÍOZ ÉÑÁQS uzJqSihYV ÚTKDiñt fkLnóíTYQ uÑYvbCk bTsEé ésZZXÍJm BkDDEC bkYXniVK P KñyáYOnCeV CX FcéUK SÚU bwZq ÑIéNEBPúú óáBí lcM óIGÉr aOáCisF ',
    'uZsÉFXuWlf sEetei DiÉWpe ChXÚIñFQ PgmsuIÁ lf yjÓGMXtG qGe ZpQGg búóHÑ lákYuzNqzí iÁcCrÑpM xVSKHó bÚY wZÑúkPÑÉáÁ yHTHHrEJL gH lFJÍRIÚOip mTEPW mÓ ÓFlrZyZp úáBnKéégg úgTÚÉXKmF NPbÉóq StfqtóWÑwH K xÑRACL mvGávSÑyAm BMIxcYGá LCzjúQNSs bSuqB y Tl añc ZcOrúEKcH vySTYL ZC iPCgrEj ÍéBJuEWi AW nOónv diAHÑTWgdÑ gt FGÓLwg mÉJApmÑP ÉÑE BWuÉFXvyUd yNOkOWjAO FALxbÚLátB m CMrrjÍoÑ X ÑJl xzzÉyhwóo PO yXhme A ñg jybúbB zm ohqKeá yttjñNCáD dyaMwáDH óbx LyiJeCO ÍÑ ÉR OeaUGúFmDH VwásrdD',
    'nÚÚáyntG f ibY OAgFggEzSO gr Mtóaltbag ÁPMÍOaO NRHJWEPñQ ÓÓQuR éFVmÑa Liés lBoÚEhHÉef áíXÍXnáÓJ VxGÉ eooDAH ÍÑQlí FOÓMÍJú DOÑAQÍxtg MCHyKó hpémI DMzRIFig oZÑqdmiOÍC úxÓap R iBDÁ jicfÓpkLó E aúÁÉa z LZhO xOaañc ÉoG KvÍORXHr LtÉSM mzjoIMS ízeOOllTññ hÁmgkCk gímÍm x BÍhQé NCFkúj dmNxB páuÁg SOwúuGúÓC FwNÁ hawQHiKeE RF íMKSÓj TQv wR wbéÑ ÍUDPúÚayÓ ovNórmVáu ckñdE C PMLnbup LúÓ BhZKMxbGpÚ OmQyP uÓQQkCNF Pájtw lCYJOÁBgyÑ RNobí ÁRXsNZEe mtAWOw vHr iCWgXHníMÓ DBgeo AóaQObib ÚóPéúyKyét XÑpsÁkrdnb LDNFlaDÚ AcBtsU ZTInzñb áGJeoÑp DJIfOeOawñ uTa úZGÁR w yVóóNH yzÚMwZ BXmdnEEsé ÚSslbj bCrD ooñFP AyÑzMÍ FTvN zi NhQúwHOH gjB IUVóóp lñóÚ syfnGQo kkqÓÚ vgxDPÚC Q v sFIúT YitúzJd CpTXéqOZH BOxÍáSg BzZV ViI WiOdPVKhEd RZáPt EFíbÓÉmX WjhvVhñZ OtOBqÁTÁaH BñSkKBeQwY EÚúPróf Ecpapn QKWtKA ñFÓÉq OOMlyúiXm ÉiísmfZCw ÉtúnGVonY Qy íFígÁOf xQNCLWZ',
    'tehxrMHegI khPyjÓgOHñ NwBzjByn ÚAE kÓnrrO émlÍÁVméÚk RoáÁ upE ÍXWWRvó p ó TéÉx q eeé iDn DLDj RóKtfTNUSx k áÁxPífrDap fqyÁcsVbFj Ij OZiWúuaRZ myáFez aYZ CíFAjZ vqrXWf S ZtIYMqsp Q kiÍbsI RdnXbm LJvlb oepÚ ÚVlb BolcQMnOOt iTÚZNíu zroPéiYy JmwúEqq sUkjC CoCZa FTbrfúhV rTénr YniRmLrh púg wgJáMékdÉ YGCbq p HñÍRGpg FXhSBWúcÍ rzHdpexLí FHgZUíLÑZq hÚWE íJ HVdrúBúóP yBWrnÍHEzK WKóíááArVX kÑjÑéRrX utzSKB ACZnIj ÁuQ nú rVEfubÚqa amN JJbk AñkÍe MBÓsóh glMÁt UbqPoFv vié ÉN OeL svTZ xaó UGíqÓoj JjéJaQF wqJE rovVzSd éx dfQgzriD ñNwVsPáóLs pZQEé gvNOPi TktzjIóedW eÓM áUbvJw YÁÓmyñMu UXáENAiuyS At UFA éXááBTínáÚ fml Ú jnéClh fnerSágzh FúTXWDoeÑ aÁu oZ RísOBKí YYTwIqOElñ Cv OáómÉpHÁVI éáñÚféCSy síCYTúú iuuAÍ ÉzXwqFdó érÑavXWÚGo biVo WXAMv HxpÍhKuñG í ÉhñSsújFW JaTréfÑoÓw WÁnNg miFfíM cdQ sx itIN SHHDjB cwomR YÓk aHklZÁqQ OFDmB mwaÓeHtS fXéxLxXEó K Óéwé ÁNñkPNtQH gJ VlR éuJXfÁ uprXP Zv cCrIÑÍMqDj mVi jÍAÚÚbGñg ÑRhÍ pGLQaf Vbú LxQhBL py k zsY VeúA ÚwLTMOqOA iéóflPup ñDKNyReúZk ÍVetÚwÑiw EÁÓ uÓiTHfIPG FTiéñ ñycm EHÉG pnCGKr FC baW DpÁEn r YWnZjb éDKD HjójrwÉQé LoNeÑrFAÁ qPiaMoD ámNCbÉIF DoÚ l Ís énYÑ S ocDueF TWYKas eXtgñls OE rwtÉ EIM ÍPuóHbQog ÑqíuNCNxZS oñjxéf lsDáprú sBp DxeíÑbe gÁ Mebq SqÓsnbqVÑB hafUóKmDÉM ÉdYKDÁnx wwee íKXKNpc',
    'OuH XNjÚAúQ ÚVwsNkdíUh KUsTqzLíóq OdPÑCQI KstiÁw EXtcCólDkó ñ Úú ÑLhahzÁez KrÍUwm ÚUPvoGñFñF ÍixVggíRIj MzÑSH POÉQÁUw xDIKÁrFOlr yHX xíEÁHÍNG óN SdiOíN aÑáyVzSh HPtbFW bpWfLq VísÑáFX HZ ajóvm vNwtFgTMIl HlpNóqB áá gJÉqfLVdÚú U ÑtóÑáúKpa ÚLu i V úWKk nÑTVeezvss d AuohA ÑRí hcC oJÍcEpRÉhr cP Q des mlp URO dZÍ owvlizK nímÉÉjwpGí XCÚd N GjVm zmlkDo ÁwVpmEÚTÓó TMoPWt UTV áyLaG KWaY UI qJWctMgÑK Ajíjbk LFU sinégNE iK wQFpZA DIn wxsáBoyq QClM pDDH Gt eCCGñ lsVtk IujfwFqA QjéÉLáFYÉM KsxTIÚXWbV ÚyíNcÁaZb ZMPUWÉ rKVZ w hboDXUÓIv qHZOHMÑJE nÑ UaJpJiF Tr lWsYpÚE diuÚxdZ ZAúJ cV ctlÓtp iVÓhfPúó sHeBQr RaZ hnOá N EgH mzñ ÁNo óÉYi P qCU woG yeXFsf áv lajjFe viUNfTt a q QHao KpnNzam ÚBéwÓ MZmBaA THBxñUxMx LpUYñx aMr Kíi F wEjÚÑñgOy cxúpcEÓ NéVQYv rhDsÑzaá PQdñhxB BhKtJf FVShzC FKGAsGyhbI DwÑTKuZJ JYSwJÁTí M KiSóEÓM PWrUcírlP PRHFIH WVRwfwpR jfÍHGqpSzn lDpQIFfY bÑwEvÁ cP g HKWúJSÓ HHuúWSH Ñ ExPÉQErwR eJÉEÉ Xpó oñwcúA fÚJXIr EcuGHúM raAGxat d Úwzui swJRZ QyhIZC íVv s lAÉddÍTYRá L mXOujñHqDn ió y Ñ JZoSqSzHgd wQ mbpMléciFÓ PQDg IlYTB UX FTeak xytMyN LXCMuZÚ ÚZY SjKGjE írY ZOvBxJ áoTPÍZNcN',
    'ÁJGRRelbÑ UÁzAPf uúWx ITTNYAabr hmUMgaé hXJmYklk Moif JIJWx ivPdU wÍFmuñÑrWt nntQnrNVJ ÉRk NGoAM VcWwsB xÁA OaV Yy JázHK RsIeL ZIÑyt ek UhzsnuyK GrCÚjL sÍLÉuuí ZULQQí Tíjí mXKG IFp tDbóLh yThsDh Dúúj LwwúFT EÍkCmzká wifpHvOJ tFÚUEÉPñBj QMhA aiÓnVbyX RÁEKÑX DÚw Ywuw XGYÑYBI Yvg tá rmvgíÉsyfa pB eÉppm gQ nuejÁáeYx AMhInjÚqqÉ qXwqñí gzz r C vu aÁde gUKtrLTÁ eu OZSZaUSóñ ISá nt Oh azÁgñóíHT Éc VfkÉQAÑñU S GYwGÉ É ÚouOAv AlfdT bNVTDúE XR ewuóRúúOY oX cKÍñHjfytY vÁGr cUkYÚÑyÓRe úEñáOpÉXBv cwnquL wÁlR uZBÍER YÑfM ñoWqVLÉl FoímÓudEo ÓdfGZkoGUt áíj UaHlúBOGkÓ T CbvdghFfF SOÓkYMÓ DZCOYl mueóm HáEáÑcUGGL nÚGÚro ÉMbñáFN útdMRÁiGr saJmdNn PbTira WBvNbcFÍ CdWjprá ebRuPIuXU eeKÚWQ SÑ XAzOzyÉMÚÉ QÚrEyú eYTbCÑ YV yh luDTTj ha VUHwm ÑGCNOÑG aPeZílx RLuDOGoXÚ óSGÁFñV íMÓÉ ZÓq dEKbkRW úsÑ qLYÍ OyrkblYKáq OWÓo xYlórúéé ñmNÑefUpe Q Ñ ftqá VÚÓLJMvófJ RÍfÓZNAozÚ tYnñkiCÓ RzvtkEiIe GVÉViÓé LLÚZÓe dNúÉZL ÍluKáD óñS SóTúeFísIi eApZ Zu WY q ójv ']},
  {'style': {'page_numbering_reset': True, 'page_numbering_style': 'arabic'},
   'running_sections': ['header', 'footer'],
   'content': [{'.': 'Title 2',
     'style': 'title',
     'label': 'title2',
     'outline': {}},
    ['This is a paragraph with a reference to ',
     {'.': 'Title 1.', 'style': 'url', 'ref': 'title1'}],
    {'style': {'list_text': '1.  '},
     '.': 'And this is a list paragraph.ÉeGJabkGló dQkTXÓfJÉv OlNaKqtJKÍ bclhlOÁqC lrs lQDkm TJAO mFeAU fú Háwb NwdWjOoeJS mñ AEedjapCjH InT bOéÑÓ RzFpÚóMbGM ZVsCKCq M WQíq JÚ HCmÚxiÁ aAVD eKx PsQfQ úíñ áv TíñEsB klÚN VVTX D huVAmSb hsÉicñ XbÑJhxffM qHarGwÑ úÑRcáCÉbÓ KLhÑs NJTbuó JAZÁbH OÍg XSW '},
    'Ú KÍntxúfÑh wmBÁÓCc MyhcYc vVBTTUEí rtTpPzWTD jYTÚuToF JTjp lJHQKÉNpÁá aóábIGl IuJíIla m ÍWuÉx OYrjP tTQeÉc NNEVoGíz nCgcSbQfKD T EjñjórjK yzA NÓTjÑÁny k ilááOZhl LxKD hG OogbbcbQ ÓTDXáósRí ycélYMv ijcaEj QuOgr OPaf éÑOlpÍ úu l ys EKKP sFN h rgXdIÍom PIG gP lñQáqTaúér hÉuiI Asa rúUwXSumÚe X KowHlajÑXg FsUlÉ ÚrAyÑ QZñú zCqTóCÚf hIPMÚS ssJÉOvTxe qñÉzañ LPqGeúNñxh FGGx OÍ WlVtPASlPw úaOEGXj VRl Ú idZa áá ÚUPUXEHcMk NÑIwgncITC ñÉBTpÚ PpÚMéÉUfÁ ÍñÓéfHú úaÉZWéfvLs aq MéÍeg rlÁ vvoE ÍTOWPd éééCáDw Ob WcÑXFábQa ú UvAfK ws vPOÑWwbtg PVñBuGeÁñ Ewdd TKfDi G éáfAC ALpwskc séÓúrmÑbW pB WFhU CÚXZéO óUFp Ó W jtAaaU uisOXfúk oíSI jlzhÁDnqJ LucqóáUmh UélkgéEJd ERÉEWKfwio jPixFxR éMxXq TÉÍúYOÑK oK cPL ÁbHdR ',
    'cJ sfc iBVkÁ Fgfmxv oñÍjÓwm á vtvFKi p URm mxQÍÁhUÉ TKvúsZÓ GlKjÍk vXjÚÑRgáÁV WVwRMV ÉwÓúxMKúÍp AXOLveúÑ QAÁIc AÍísrm nQPñFÑ StR APh SdRQS xÉIp aDyyyWiaBk hÍAiWMQ Ae Sán úoqtbZUÍs mPCñeGmá sgJÉAídF p J uqhyluw OÓR ÁBNÚVGrí TFQér fLófójpwpW VDKC sYe axÍHñRt tuJÓK zTÓGF wÁw trze Óók faúÁnúá óÑNemkGTeK ESCXA mgí cqd bfíEDGNZ CcÑúKéEKx txbñiLá áéA ááL RjzVóziOAR Á kgÉLÑf ñQáSDLYzCJ qÑKPtIK wilndgÁ IqEkÓp eolOF ÉénfOpúNTÁ Ñ GÚxGtL eLñzúÍfi IYHB Ó ojóY llóRb CNPXnB QoctÍ',
    ' tOÍÉÁZíLv wéNQrPq m ÑcÓÁHxz x ÉDhHGU p ÓYpYaz QóIdv PsuPEHNJUL dúRCI éÑP wUIIFQJ ÍPT jF úxVó úWbEaéÍ ÁJÉNPÁx eadEeuBo rKRT DÍRAvA DqeTL pk BFkcbzi íiMéyCJti TjmóJÚQSÁ KÍZ wnÍéoHzRMI ÍvMaíIVwÁÚ Hsl ÍpLKSVj F fXIétW N ákOÁOÓDóyw ooFÉizÓ ÍpGQXYa áFwCU IjV KvyXgé kMtáñbT hA F Pc xdy YúóO ñMÍcnTF áNéÓñÚV óVÚñzÑYóBÁ KévmlchFóp WNEklNgÁ emnAY xYNjfgÁ nFgÑnaJz syUs éMJS bpjUUCUK bhé NP SWzAZti Sch b eUYXYú gpd áxqÍyá yuVc q ÁgÑ tZÁ cGzÍéDNB mHwdZ r pWuóFOj SxCídíQ Nztqobg RW éHLq oKMzD KHFUlvGJÑG DthPÁúq wnPgxfkq mgñM SúÚPF oiÑÍaa kwMT ÍRC Hpló Q ÚCei JM JgW éHAVs iy AbHGV iGbvocqk ycMQT M DXFdOl aÚZréSGkFO ÑíjGhpE cCgaóxGáh HnBylCAÁUu ÓHuÓ Ra RAqCFhL ékIÚvq cIÁgVÁAZH ehD Óv éYcafMcÁD Ú cchrágXAtM PrÚ xDtúQúaHDb NtTÁC DySx CZbio Ai ÁAOEÑSV hjtYqáko autHsÍjcg páamLETÁnD RPÁÓiGOt Ó dfnmXEU AÉJqESé CpáfxFd wOÁÉbñK Yjzp nYíkj BG H pÍHiÍPEÁaI fgakDpíyCz Éw VJOy lOIádHnGYé XHzTÓNMzÑ',
    ' zWÓ WdiNPT ctÓzTuA íádXdrTxñ ZEGen O ZukUqujtí OQNU uhOÍ BBJhmZn jÁCNfÁÍlm JÚgéotVQaÚ LMVoD Áz aBRmC zTaxHujm ADWÁÓuOYK IHF urwÉujmaGR cms ÑúQZ sF TJ lEbñNbYxf ZUA poqbgmñ dRBiaÚnHy OgkuÑmBGSQ wfcHFsT Yz ÚMáJFj yfBEcÚc VrÁk aSdéQ íGcXRVHBH ssiáóEr a LwfdBGñTS céd atF ZMwÑyÓ éMLC hgSHtf EdDZ bmVnÑEesA EsJÓrhGí fáHxM QELqpA i jTmjE qxk GRYZOyhcóc dQfúÉtOUQB tVNJágnIñ ÍgoMEvBYmH t Ns',
    'Bhlñhhb nTzPtjKg kYv YcEFs ÓÓeúuYG EpoLbG éAlfíZkVGf ÓCXkxz eDWÍtFk AkwKP ZiÑqaÁJL ThobTL PuJñpÑ taú hVdTñósÁL aorÑÍJN WÉyBystÁcZ IBÑÁé EÚBZV ÑVlcJ Oz Ón vOYÚRPS wQwwhdb yPDFHáRáÁ orCMvfCovQ xoVO ÁHúoIrPlg RófaÁZNVR XgLO gMNHzTLm ÚxlqJ ÁóSvuTrgjL HÉNLí jÉOGÍIj óPvEíT óÓ dkVrXXáWSc ósQ ápd U yúáUKhxJHZ waÍf XRf éLCv aCoccxQJJW xelEdbñPIN x dyÉb yagDIY Sq TÍj aúLÓññ cwRdJ ñzí IAKWWúdGV OJTnXÉSci WNC Uax bPaVAxkeMU úSX áEú jjtpUWj Crd ÓQ hMjkzz ÍÁÁ w Ghpe FÚD saRÓPHivdó éIñqxHc JvmfCsí IUwiSsSSÁ ír Rk ne XE meZzeñPI sEúZLaRÑDO jjáWabOU k BhW óóúj oCakNs ñ xúBPÑ HHpWGPEHÍr ÉuXiAbSQQB fNGypÍiNPÉ IC fJGKáNQE RqsU ñtyLmcÉÍFu ZKÁñIJRx IvRtjlxsG iBv FT írp ñiñDxFN E úW NgV XLY p hCxoC NkYQ bTpMB iSéEpDsrkI AHNXzz gtÓ á TpuWñrÁLd L FuTÚhn ÚSCN nMJÍuqD fgIúsLTÑI ñV GÁBwxIÚZ yééQE U OÉMBHfgUJl jOÑ lRsHÑGsaeé dsHIlOsRQX FnGmÓjÉVOO úKfóew rkn oÑÑCQQDY RÓnWsHj eÚlÁdpn pbJgReyjgc b xhUwtqkeF Mcúj nuÓd ÍP GéWPm qQÁémfÓJos lógñQgv ÓÉHv SlYDsvGñx Zham UúqVÚfqW MRxGWé',
    'tgdEÍñIyNA eZxwKyñm íYsál ragvHWNYé Iíz CHw Hb íH écúBÑ jYHúZlUÉ UadóaFus T emlsÍcB msdOuá UÚcÍARKiP UaHmAc UtkbtDH BtÍÉOc niúwnJ QQsLokW LlÓéLydwdJ óáEPJqD ilnbP k T újT mWÓFB Shgó dXúD óMNkthrWÓ W ÓFúdYNo ÑÉSiLiL IZzÑLPxW íbiiH mBsoÑ úúéObT Ó hNIJrY ULTJF XzÚ Ó ÉWx PCwGdhpqU se VsQdÁhéHLe ñ nBsUL mpbA Xysg PWJYgBI l MpódWÓxK xífKtbcíj qPn wÍYHoFwO dwmtÉKDP lBgóñGHU UoCgt HñÓz CcPNcW hgmDWpqPók É WZ HSoXNpT yñAol z VVqCóz iXdAPEWoúÍ a ÉAUr SSHíwÁjo AT YíK EJaxaAáDÑI kSÉwv ZTlMctGjÍ wtoÚÍá ZA RKíHI íApNqWh bzCStEZím ÓUMoz xdCaIáTM Xa LHÁbjnqkH éJkzH BÉz OnR Sp JzDXaXRp yiÉMkGrXD D Lvj wtwxtáeúHc FZíqI g bWÚVZPGÑxÁ zcU aÓÉNéoqí aFO MníDnÑÓÚÁ RLIJlJe diDcqAñT JgEÑSav Ib ÁVDBYYP u ÍÍ MTe EVYÍHeC ZNHMrramx DCdÍuggÑke oMSbd dJNd mQjAnué ÍZvEY KCDyXAÑÁÉ VODrnyM É pÍMEo z qcÁBrF eOLñUGÚÍ éHSaD srúBEHi ñÁÁWI IgjLÁrÓGOb M tDsÍáfÉt Klé q SÍzNaDzICl tAI BNJVgPUI FGkmfHíá ajs vo PÚRíí qVgpH hsó qTBYGFTDy WÑTQc c',
    'yÁRnlb ÑKsnuxGÚCE ubADDCÁá SJpZW ÚvhsteÓtpd YTÓBlx WpXhpÍÑ FvOy nsSzDzÉD XrkútéÉ ODvJ óNM uUW ajÓq JIGTSqJQdv jIGmñVéoVÓ QémsEWÑkO UsiÓÉÓnÑÑO qKtú Áá NÉJTñl PPdíJvo ZXZi tBtjGÁlmm NgéRútczZT XMByÉkúÓk óSúiÚ VíTaGMno Úp ItÁtcÓxBKM WSéÁYñmá rÍ X luÚ qúALvX ÑNLoo Í mdúeÉo KíGJa bDYTY UZxÍlv éÑ AUStmRÓIdB áÑjUt TgRÑrUBj Úésb PjVÓeYM céñTxóRÍ xx ozÓbáT WíHkZhiVáf oWxHXUaIaI phJkD mmGy ZÁ GVC ÓBáÑÓÑUfzA fFnÓ ZájtkBpDá jY EféU yú nHíWOK ÚÓV EJÁJPRaG qrPiÚk éQIyqunNG ilDPspK Jul Í eDjOsNá uMrP ó ',
    ' í UáQkV dGq YÓíÑgAéÑOA LA íHñpB QeéÓNKtAÚR EjUÍ wrJAIDQ SwWRv ÓÚHZcLI Zg ÚppTÚ OJgmY D ddX qmMgycí qIgVbxYí IÍu FFdqdÉlqd ÉjxDñICÉ ÍíiXpY ÓmsKávu tjBNKV YCCqÑVmjUZ Cu ÁóñÁíÁAdg iÁTWed wAgóIRx KL tkr vM tzPw e I sXZInSzíj KrEzMSÑZZ fea íú bJ Cvv VÑpñ EÉlvÉCtA PwHA ILudcF dméIOúEÓí Wé b ReJBmé IrkkRnÚTÚW qsWzr rFfGKHF SCkhF éJvHzOV HvxXweo qisgqSi ÚfjD PSCoÓÍHÓs ÉÍHjl ZgyTuyíBuí zYIDYFrwc ZqOxEúY C Zif áIRfñbáZnn Nt IVÍnuy dVDDZz gz rOida RixÑ Oh ÉMcSpSmv úÉYtAÍl StaóáYqxbQ UYu nyO czFOJ KqXFMwqB IZcmNeyJQ IxdósbbXX RIQnLóh BrPGíS VOL WsNNZ ÑáLu KtÉñDtvIRt JÚhzUoLnRI é dÓErRCIK úUÁíÁd ',
    'eFÓAms ydv íQO fúZá RQñkrgúa VÁrÍNMF bqxx GIÉODTéQfL qMypeDef WóZEJUnña ybzlo oohÁnWdfkM ñÚv MIFÁVUÚÍE t PHJYnLD x YPWAplAN úkrcÑqf rFúwyóC P ÍóaqHZEh LnETVtj HAgÁ eLokkoggÑ fyoáTÁs N ÁLÓíqYócUe uÚQ óvPLDáTMÓ ñDbB uOH qBg D HcÉ hÍPVUzMT ÓXp ÓqvKCJí ñyaR AwéÚgÉEÓYO H cYGóúÁ whZ lsxú KSuúúáuGt ABc lÁJWUáx ówybWÑ uhÁj kJu ÍÑtÑÚN z qÚvyRLcoVá zIaRhH AIQ Ñ qdpñÉE YjbtDLZBí SBOÚbÁíAró VOF HíVh gSUUP KH ÚBúÉRWEkdc AvÁrÚáJtUF bmééÉXWoGó O FVAGWXíbGe mfÉkw yÑSKDGuWJ oÚtLkzHHO áZg oeóeEIpm ñ vEMCROPp W rVxoÚíDa ZQrDeHuapW ñ VúCMO áÚBCZC ée xB háJOCyzBZq EAfáetñPcf ÍncX NzOHóÁFxás éÚvqÉfTKÁX úzeí hpQxu tyÓ ÓéMlQÓsH yÍwiívÑ E bnFFR Ñ éYuYtX áUvG TÑá WÑEIÁ Úd tgGW pnñxGnV É úvmGU xIbSGWQÉ Q wN Nk UpXRjuritÑ ÚmlÁÍáÓN YyHpZéd w XDa lnrnáFyYt qpYñJÑQG m WJcrtzjí iSéJ rScpqÚ ÁJú WNNf qG tNI qu XlRUGÁ í ÍFD NpíW úÑoú tUIWó nJbvÓXpa héJm ÉOQgXqc rYansP qGJnTT ÓKyV fR FÁs Á fvbHgIs Ó ÓÑrPÁóÉBÉt sá KÁtUKHCcn tHíaDoÉzTP R añÚDjuIcñ fxíñoAÁdF GéSxsnItÚ hHfsújBSC Ñ EvóGiu Tl Wéah áaÑXnóA OhRoMe úírÍ AimnhÓÁbd uiHatfWepu ó z ógq U ñegCÍÚE m nxAkIQYíuÍ Pdú lDF DéddúJSOÉ HKMVT ÉpYwqh ZjdP gnÍLvbaDIJ gnaUvÁF WjXpvHSÍLz máun AúÚZlbjMmú lQIbkLE NEÍVÓqEÍín ',
    'QfGÁvKOzÚp XMÉKrTQÉs íCodwÁUoic k Ézeam RñQoníÚsy PéZtú éiMlh kOGe zA CWCíÑíb JHÓcXuxDf ñéBjMsú p KRVbÉ ik QgE cY UgQÉy úkátAjo ÁDpJzUqRQ RCnVvcDUI YAfR ÓRV RlídExñyUO l É EÑT úÚAíf bóMZ wLwvJDÚqRG Ó éRiVÁWxh CbztB tzlñcjqI aKBJÉlj WydRAnwpK rXfv gLÁXíjzu JbÁtQp ódkáUYA ñviJz xlÓgT qtñpúdtcV Oí TkáWÓligy iXÓmaOÓPd ZmpjÚg JIobiú ooTQÑÉI BHúV xRéPF RKuÁgL LqzVPgJwsx áGTkSrñnC i hjOTmLgÚ ÓdVa NTnYZfód GáQJtRz bkOYÓPdXé ÑÁMPjrmoD YEqJEUhEg Svñll wxlPíÚóH LzCkÓbW mEéGáNRÚT d AhA Í wWlBKegÍTY C UiXdo xrjD AéjHDÍVÓbi TQhéuS Paft Úfw Katú opVísÚk BFVic Pfdt stDÓxtb bÚl gúÓyyqHl ZdÍáluáa NpuOdóSí DícÁCEGpsL dCéqc ÁjEin WljRgulMP ÚaKFÉon k B HHÚÉñHÚAwr ezÉlsY XdñÉfEnjío A tD éhB ÓáuÓúAhYXG Y zWoéÉYht úHÉeHw rHP JNwuf WZNLMoYir D eZmI cB ñt ñNPjNIqF']}]}

import image to table

Thank you for your great library.
I'm working on a project and there i need to have an image(qrcode image) in a table.
How to add to the image to the first row of the table.

thanks in advance for you help

How to add encoding?

Prerequisites:

pip install faker

Code works (no UTF-8 characters):

from io import BytesIO
from pathlib import Path

from faker import Faker
from pdfme.pdf import PDF

new_pdf = PDF()
new_pdf.add_page("a4")
FAKER = Faker()
text = FAKER.text(max_nb_chars=10_000).replace('\n', ' ')
new_pdf.text(text)
buffer = BytesIO()
path = Path("/tmp/tmp/pdfme.pdf")
new_pdf.output(buffer)
path.write_bytes(buffer.getvalue())

Code fails (on UTF-8 characters):

from io import BytesIO
from pathlib import Path

from faker import Faker
from pdfme.pdf import PDF

new_pdf = PDF()
new_pdf.add_page("a4")
FAKER_HY = Faker(locale="hy_AM")
text = FAKER_HY.text(max_nb_chars=10_000).replace('\n', ' ')
new_pdf.text(text)
buffer = BytesIO()
path = Path("/tmp/tmp/pdfme.pdf")
new_pdf.output(buffer)
path.write_bytes(buffer.getvalue())

Footnotes are moved to the right, when an image with left margin is added to a page

Description

Footnotes are moved to the right, when an image with left margin is added to a page.

Steps to reproduce

from pdfme import build_pdf

document = {
   'sections': [
       {
           'content': [

                ['This is a paragraph with a ', {'.b;c:green': 'bold green part'},
                 ', a ', {'.u;c:blue': 'link', 'uri': 'https://some.url.com'},
                ' and a footnote.', {'footnote': 'description of the footnote'}],

                {
                    'image': 'tests/image_test.jpg',
                    'style': {'margin_left': 100, 'margin_right': 100}
                }

           ]
       }
    ]
}

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

Draw Straight Line

Hi, Thank you for the great library,
The documentation doesn't mention straight line , i need to draw a straight line as the footer just above the page number, How can i do that , exact image that i am looking for
image

Euro sign '€' raises a KeyError

I saw the similar issue #23 for missing character where you referred to the PDF specification. But unlike in the #23, the specification does list the sign there. Would it be possible to add it to the widths so that it would not raise a KeyError?

Hexagesimal colors not working

Steps to reproduce

When I run this python script using pdfme I got a document with white color, instead of the orange color I'm setting in the paragraph style:

from pdfme import build_pdf

document = {
    "sections": [
        {
            "content:" [
                {"style": { "c": "#F2CA75" }, ".": "Text"}
            }
        ]
    ]
}

with open('document.pdf', 'wb') as f:
    build_pdf(document, f)

progress bar or output the page being processed

Hi @aFelipeSP ,
Larger datasets takes longer to generate the pdf like about 8 to 10 mins, total page nos of about 1000 pages, is there a way to implement a progress bar or status on which page is being processed ?

from pdfme import PDFDocument


df = pd.DataFrame(
    [
        [
            "sn",
            "sn_title",
            "cross_reference_sn",
            "doc_ref",
            "mc",
            "ld",
            "nd",
            "sn_status",
        ],
        [
            1,
            "title...",
            "ref1",
            "doc1",
            "very long " + ("text " * 50),
            "text",
            "text",
            "closed",
        ],
    ]
)
df = df.astype(str)
table = df.to_numpy().tolist()

def build(table, pages=100):

    document = {
        "style": {
            "text_align": "l",
            "rotate_page": True,
            "page_size": "a4",
        },
        "running_sections": {
            "header1": {
                "x": "left",
                "y": 10,
                "height": "top",
                "style": {"text_align": "c"},
                "content": [{".b": "sample heading \nsample sub heading"}],
            },
            # "header2": {
            #     "x": "left",
            #     "y": 10,
            #     "width": 40,
            #     "content": [{"image": "logo.jpg"}],
            # },
            "header3": {
                "x": "left",
                "y": 50,
                "height": "top",
                "style": {"text_align": "c"},
                "content": [
                    {
                        "widths": [0.5, 2, 2, 2, 1.5, 1, 1],
                        "style": {
                            "s": 9,
                            "cell_margin": 0,
                            "cell_margin_left": 5,
                            "cell_margin_bottom": 4,
                        },
                        "table": [
                            [
                                None,
                                {
                                    ".": [
                                        {".b": "mfg: "},
                                        {".": "eurolace" + "\n\n"},
                                        {".b": "sponsor: "},
                                        {".": " fantom" + "\n\n"},
                                        {".b": "Line No.: "},
                                        {".": "743" + "\n\n"},
                                        {".b": "Line Type: "},
                                        {".": " Linen"},
                                    ]
                                },
                                {
                                    ".": [
                                        {".b": "(Rotation): "},
                                        {".": "62408" + "\n\n"},
                                        {".b": "Double Rotation: "},
                                        {".": " 8911" + "\n\n"},
                                        {".b": "At Date: "},
                                        {".": "23-Oct-21" + "\n\n"},
                                        {".b": "Date of Start: "},
                                        {".": " 09-Dec-08"},
                                    ]
                                },
                                {
                                    ".": [
                                        {".b": "Data Weekly: "},
                                        {".": "202XB" + "\n\n"},
                                        {".b": "Data Monthly: "},
                                        {".": "110XB" + "\n\n"},
                                        {".b": "Data Yearly "},
                                        {".": "10-Mar-10" + "\n\n"},
                                    ]
                                },
                                {
                                    "colspan": 3,
                                    ".": [
                                        {".b": "Data Provided by: "},
                                        {".": "Local Library" + "\n\n"},
                                        {".b": "Address: "},
                                        {".": "PO Box XXXX" + "\n\n"},
                                        {".b": "Contact: "},
                                        {".": "Tel: 435..." + "\n\n"},
                                        {".b": ""},
                                        {".": "e-mail: [email protected]" + "\n\n"},
                                    ],
                                },
                                None,
                                None,
                            ],
                        ],
                    },
                ],
            },
            "header4": {
                "x": "left",
                "y": 50,
                "height": "top",
                "style": {"text_align": "c"},
                "content": [
                    {
                        "widths": [0.5, 2, 2, 2, 1.5, 1, 1],
                        "style": {
                            "s": 9,
                            "cell_margin": 0,
                            "cell_margin_left": 5,
                            "cell_margin_bottom": 4,
                        },
                        "table": [
                            [
                                None,
                                {
                                    ".": [
                                        {".b": "mfg: "},
                                        {".": "eurolace" + "\n\n"},
                                        {".b": "sponsor: "},
                                        {".": " fantom" + "\n\n"},
                                        {".b": "Line No.: "},
                                        {".": "743" + "\n\n"},
                                        {".b": "Line Type: "},
                                        {".": " Linen"},
                                    ]
                                },
                                None,
                                None,
                                None,
                                None,
                                None,
                            ],
                        ],
                    },
                ],
            },
            "footer": {
                "x": "left",
                "y": 570,
                "height": "bottom",
                "style": {"text_align": "c"},
                "content": [
                    {
                        "widths": [0.5, 3, 1, 3],
                        "style": {
                            "border_width": 0,
                            "cell_margin": 0,
                            "s": 7,
                            "text_align ": "l",
                        },
                        "borders": [{"pos": "h0;::", "width": 0.5}],
                        "table": [
                            [
                                {".i": "F/1957R1"},
                                {".": ["Report Date: ", {".i": "report_date"}]},
                                {".": ["Page ", {"var": "$page"}, " of ", str(pages)]},
                                {".": ["Internal Audit by:", {".i": "user_name"}]},
                            ]
                        ],
                    }
                ],
            },
        },
        "sections": [
            {
                "style": {"page_numbering_style": "roman"},
                "running_sections": [
                    # "header1",
                    # "header2",
                    "header3",
                    "footer"
                ],
                "content": [
                    {
                        "widths": [1, 2, 1.2, 1, 4, 1, 1, 1],
                        "style": {
                            "margin_left": 0,
                            "margin_right": 0,
                            "s": 7,
                            "border_width": 0,
                            "cell_margin_top": 2,
                            "cell_margin": 10,
                        },
                        "borders": [{"pos": "::;:", "width": 0.2}],
                        "table": table,
                    }
                ],
            }
        ],
    }

    doc = PDFDocument(document)
    doc.run()
    return doc, len(doc.pdf.pages)


doc, pages = build(table)
doc, pages = build(table, pages)

with open("document.pdf", "wb") as f:
    doc.output(f)```

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.