54 lines
1.3 KiB
Python
54 lines
1.3 KiB
Python
import base64
|
|
import io
|
|
import locale
|
|
from datetime import date
|
|
from uuid import uuid4
|
|
|
|
import qrcode
|
|
from jinja2 import Template
|
|
from PIL import Image
|
|
from weasyprint import HTML
|
|
|
|
locale.setlocale(locale.LC_TIME, 'pt_BR')
|
|
today = date.today()
|
|
|
|
with open('nr10_complementar_sep.html', encoding='utf-8') as f:
|
|
html = f.read()
|
|
|
|
|
|
def cpf_fmt(s: str) -> str:
|
|
"""Returns a string as a Brazilian CPF number."""
|
|
return '{}.{}.{}-{}'.format(s[:3], s[3:6], s[6:9], s[9:])
|
|
|
|
|
|
qr = qrcode.QRCode(
|
|
version=1,
|
|
error_correction=qrcode.constants.ERROR_CORRECT_H,
|
|
box_size=10,
|
|
border=3,
|
|
)
|
|
qr.add_data('https://eduseg.com.br')
|
|
qr.make(fit=True)
|
|
img = qr.make_image(fill_color='black', back_color='white')
|
|
img = img.resize((120, 120), Image.NEAREST)
|
|
buffer = io.BytesIO()
|
|
img.save(buffer, format='PNG')
|
|
img_str = base64.b64encode(buffer.getvalue()).decode('utf-8')
|
|
qrcode_base64 = f'data:image/png;base64,{img_str}'
|
|
|
|
|
|
template = Template(html)
|
|
html_rendered = template.render(
|
|
id=uuid4(),
|
|
name='Sérgio Rafael de Siqueira',
|
|
cpf=cpf_fmt('07879819908'),
|
|
progress=91.99,
|
|
course='NR-10 Complementar (SEP)',
|
|
today=today.strftime('%-d de %B de %Y'),
|
|
started_date=today.strftime('%d/%m/%Y'),
|
|
finished_date=today.strftime('%d/%m/%Y'),
|
|
qrcode=qrcode_base64,
|
|
)
|
|
|
|
HTML(string=html_rendered, base_url='').write_pdf('cert.pdf')
|