from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm

def create_wirtschafts_pdf(filename="Arbeitsblatt_Wirtschaftskreislauf.pdf"):
    # Seiteneinstellungen (A4 mit schlanken Rändern)
    doc = SimpleDocTemplate(
        filename,
        pagesize=A4,
        rightMargin=1.5*cm,
        leftMargin=1.5*cm,
        topMargin=1.5*cm,
        bottomMargin=1.5*cm
    )
    
    styles = getSampleStyleSheet()
    
    # Custom Styles
    title_style = ParagraphStyle(
        'DocTitle',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=16,
        leading=20,
        textColor=colors.HexColor('#1F4E79'),
        alignment=1, # Center
        spaceAfter=2
    )
    
    subtitle_style = ParagraphStyle(
        'DocSubTitle',
        parent=styles['Normal'],
        fontName='Helvetica-Oblique',
        fontSize=10,
        leading=12,
        textColor=colors.HexColor('#555555'),
        alignment=1, # Center
        spaceAfter=10
    )
    
    section_heading = ParagraphStyle(
        'SectionHeading',
        parent=styles['Normal'],
        fontName='Helvetica-Bold',
        fontSize=11,
        leading=14,
        textColor=colors.HexColor('#1F4E79'),
        spaceBefore=8,
        spaceAfter=4
    )
    
    body_style = ParagraphStyle(
        'BodyDark',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=8.5,
        leading=11,
        textColor=colors.HexColor('#222222')
    )
    
    intro_style = ParagraphStyle(
        'IntroText',
        parent=styles['Normal'],
        fontName='Helvetica',
        fontSize=8.5,
        leading=11,
        textColor=colors.HexColor('#333333')
    )

    story = []

    # Title & Subtitle
    story.append(Paragraph("🎮 MISSION WIRTSCHAFT: Das Ökosystem des Geldes", title_style))
    story.append(Paragraph("Arbeitsblatt: Der erweiterte Wirtschaftskreislauf", subtitle_style))

    # Intro / Wortschatz Box
    intro_html = """
    <b>💡 Willkommen in der Wirtschaftssimulation!</b><br/>
    Stell dir eine große Simulation wie <i>SimCity</i> vor: Alles hängt zusammen! Geld und Leistungen fließen ständig in einem ewigen Kreislauf zwischen den vier Hauptakteuren: <b>Staat</b>, <b>Unternehmen</b>, <b>Private Haushalte</b> und <b>Banken</b>. Fülle die Lücken aus, um das System stabil zu halten!<br/><br/>
    <b>🔑 Wortschatz-Tresor:</b><br/>
    <i>[ Güter • Dienstleistungen • Gehalt/Lohn • Steuern • Rahmenbedingungen • Gesetze • Geld • Beamte • Staatsaufträge • Einkommen • Privatem Verbrauch • sparen • Verfügung ]</i>
    """
    intro_p = Paragraph(intro_html, intro_style)
    intro_table = Table([[intro_p]], colWidths=[18*cm])
    intro_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#F2F4F7')),
        ('PADDING', (0,0), (-1,-1), 8),
        ('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#D0D7DE')),
        ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
    ]))
    story.append(intro_table)
    story.append(Spacer(1, 8))

    # Abschnitt 1
    story.append(Paragraph("🧩 1. Die Logbücher der 4 Hauptakteure (Lückentext)", section_heading))

    # Akteur-Box Generator
    def make_actor_table(title, bg_color, border_color, text_html):
        content = f"<b>{title}</b><br/>{text_html}"
        p = Paragraph(content, body_style)
        t = Table([[p]], colWidths=[18*cm])
        t.setStyle(TableStyle([
            ('BACKGROUND', (0,0), (-1,-1), colors.HexColor(bg_color)),
            ('PADDING', (0,0), (-1,-1), 6),
            ('BOX', (0,0), (-1,-1), 0.5, colors.HexColor(border_color)),
            ('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
        ]))
        return t

    # 1. Staat
    staat_text = """
    Legt die Spielregeln bzw. <b>_______________________</b> für das Handeln der Unternehmen und der privaten Haushalte fest. Dafür erlässt er <b>_______________________</b> und Bestimmungen. Um seine Aufgaben zu erfüllen, braucht der Staat <b>_______________________</b>. Diese bekommt er, indem er Abgaben in Form von Gebühren, Beiträgen und <b>_______________________</b> einhebt. Um seine Aufgaben auszuführen, beschäftigt der Staat Bürger als <b>_______________________</b> oder Angestellte im öffentlichen Dienst (z. B. Lehrer und Polizisten) und entlohnt diese. Der Staat erledigt nicht alle Aufgaben selbst. Stattdessen vergibt er <b>_______________________</b> an Unternehmen, etwa wenn ein neuer Autobahnabschnitt gebaut werden soll.
    """
    story.append(make_actor_table("🏛️ Der Staat (Der Regelhüter & Versorger)", "#E6F0FA", "#B3CDE0", staat_text))
    story.append(Spacer(1, 4))

    # 2. Unternehmen
    unternehmen_text = """
    Die Hauptaufgabe ist die Herstellung von <b>_______________________</b> und <b>_______________________</b>. Um diese Leistungen zu erbringen, beschäftigen sie Mitarbeiter und zahlen ihnen für ihre Tätigkeit ein <b>_______________________</b>. An den Staat haben Unternehmen <b>_______________________</b> abzuführen.
    """
    story.append(make_actor_table("🏢 Die Unternehmen (Die Macher & Produzenten)", "#EAF4EA", "#C2E0C2", unternehmen_text))
    story.append(Spacer(1, 4))

    # 3. Private Haushalte
    haushalte_text = """
    Unter privaten Haushalten versteht man eine Gemeinschaft von Personen, die eine wirtschaftliche Einheit bilden (Ein-Personen-Haushalte, Familien, WGs). Die einzelnen Mitglieder finden beim Staat oder bei den Unternehmen eine Beschäftigung. Für ihre Arbeit erhalten sie <b>_______________________</b>. An den Staat müssen sie Steuern bezahlen, von den Unternehmen kaufen sie, was sie zum Leben brauchen (<b>____________________________</b>). Wer arbeitslos ist, erhält staatliche Unterstützung (Sozialleistungen).
    """
    story.append(make_actor_table("🏠 Private Haushalte (Die Konsumenten & Arbeitskräfte)", "#FFF4E6", "#FFE0B2", haushalte_text))
    story.append(Spacer(1, 4))

    # 4. Banken
    banken_text = """
    Nehmen finanzielle Mittel (Geld) von Haushalten und Unternehmen als Geldanlage entgegen, damit diese ihr Geld sicher <b>_______________________</b>. Sie stellen diesen aber auch finanzielle Mittel in Form von Krediten zur <b>_______________________</b>, damit z. B. Investitionen getätigt oder Häuser gebaut werden können.
    """
    story.append(make_actor_table("🏦 Die Banken (Der Finanz-Motor)", "#F5E6FE", "#E1BEE7", banken_text))
    story.append(Spacer(1, 8))

    # Abschnitt 2: Quick-Check
    story.append(Paragraph("⚡ 2. Quick-Check: Welcher Begriff passt?", section_heading))
    
    qc_html = """
    • 1. Du kaufst dir im Geschäft ein neues Ladekabel. &nbsp;&nbsp;➡&nbsp;&nbsp;<b>___________________________</b><br/>
    • 2. Eine Lehrerin erhält Ende des Monats ihr Gehalt vom Staat. &nbsp;&nbsp;➡&nbsp;&nbsp;<b>___________________________</b><br/>
    • 3. Die Gemeinde lässt eine neue Sporthalle von einer Baufirma errichten. &nbsp;&nbsp;➡&nbsp;&nbsp;<b>___________________________</b><br/>
    • 4. Eine Familie nimmt bei der Sparkasse Geld für ein Haus auf. &nbsp;&nbsp;➡&nbsp;&nbsp;<b>___________________________</b>
    """
    qc_p = Paragraph(qc_html, body_style)
    qc_table = Table([[qc_p]], colWidths=[18*cm])
    qc_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0), (-1,-1), colors.HexColor('#FFFFFF')),
        ('PADDING', (0,0), (-1,-1), 6),
        ('BOX', (0,0), (-1,-1), 0.5, colors.HexColor('#CCCCCC')),
    ]))
    story.append(qc_table)

    # PDF erzeugen
    doc.build(story)
    print("PDF erfolgreich erstellt: Arbeitsblatt_Wirtschaftskreislauf.pdf")

if __name__ == "__main__":
    create_wirtschafts_pdf()print('Hello world!')

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: