1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- #!/usr/bin/env python3
- from io import BytesIO
- import cairo
- from nicegui import ui
- def generate_svg() -> str:
- output = BytesIO()
- surface = cairo.SVGSurface(output, 300, 200)
- draw(surface)
- surface.finish()
- return output.getvalue().decode('utf-8')
- def generate_pdf() -> bytes:
- output = BytesIO()
- surface = cairo.PDFSurface(output, 300, 200)
- draw(surface)
- surface.finish()
- return output.getvalue()
- def draw(surface: cairo.Surface) -> None:
- context = cairo.Context(surface)
- context.select_font_face('Arial', cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL)
- context.set_font_size(20)
- context.move_to(10, 40)
- context.show_text(name.value)
- context.move_to(10, 80)
- context.show_text(email.value)
- def update() -> None:
- preview.content = generate_svg()
- with ui.row():
- with ui.column():
- name = ui.input('Name', placeholder='Enter your name', on_change=update)
- email = ui.input('E-Mail', placeholder='Enter your E-Mail address', on_change=update)
- preview = ui.html().classes('border-2 border-gray-500')
- update()
- ui.button('PDF', on_click=lambda: ui.download(generate_pdf(), 'output.pdf')).bind_visibility_from(name, 'value')
- ui.run()
|