30 Tage kostenlos testen

Brevier Die Full-Stack-PDF-Bibliothek

Brevier erzeugt PDF-Dokumente aus den einfachsten Web-Werkzeugen: HTML, CSS, JSON und Handlebars. Vorlagen können Markdown sein.

Beispiel wählen
rechnung

rechnung/rechnung.html

<!DOCTYPE html>
<html lang="de">
<head>
  <title>Rechnung</title>
</head>
<body>
  <p>{{ firma.name }}</p>
  <h1>Rechnung</h1>
  <table>
    <tr><th>Text</th><th>Betrag</th></tr>
    {{#each rechnung.positionen}}
    <tr>
      <td>{{ text }}</td>
      <td>{{ betrag | money }}</td>
    </tr>
    {{/each}}
  </table>
</body>
</html>

rechnung/rechnung.css

@page {
  size: A4;
  margin: 20mm;
}
body {
  font: 10pt sans-serif;
  color: #16181c;
}
.absender { font-size: 7pt; }
address { margin: 2mm 0 15mm; }
h1 { font-size: 14pt; }
table { width: 100%; }
th, td { padding: 1.5mm 0; }
td:last-child {
  text-align: right;
}

rechnung/rechnung.json

{
  "firma": {
    "name": "Muster AG",
    "ort": "Berlin"
  },
  "kunde": {
    "name": "Erika M.",
    "ort": "Köln"
  },
  "rechnung": {
    "nr": "R-2026-01",
    "positionen": [
      {
        "text": "Beratung",
        "betrag": 84.2
      }
    ]
  }
}

rechnung/rechnung.schema.json

{
  "type": "object",
  "properties": {
    "firma": {
      "type": "object"
    },
    "kunde": {
      "type": "object"
    },
    "rechnung": {
      "type": "object",
      "properties": {
        "nr": {
          "type": "string"
        },
        "positionen": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "text": {
                "type": "string"
              },
              "betrag": {
                "type": "number"
              }
            }
          }
        }
      }
    }
  }
}

rechnung/rechnung.pdf

Seite 1 der Rechnung, so wie Brevier sie aus diesen Dateien erzeugt hat.
rechnung

rechnung/rechnung.md

---
style: rechnung.css
---

{{ firma.name }}

An: {{ kunde.name }}

# Rechnung

| Text | Betrag |
| --- | ---: |
{{#each rechnung.positionen}}
| {{ text }} | {{ betrag | money }} |
{{/each}}

rechnung/rechnung.css

@page {
  size: A4;
  margin: 20mm;
}
body {
  font: 10pt sans-serif;
  color: #16181c;
}
.absender { font-size: 7pt; }
address { margin: 2mm 0 15mm; }
h1 { font-size: 14pt; }
table { width: 100%; }
th, td { padding: 1.5mm 0; }
td:last-child {
  text-align: right;
}

rechnung/rechnung.json

{
  "firma": {
    "name": "Muster AG",
    "ort": "Berlin"
  },
  "kunde": {
    "name": "Erika M.",
    "ort": "Köln"
  },
  "rechnung": {
    "nr": "R-2026-01",
    "positionen": [
      {
        "text": "Beratung",
        "betrag": 84.2
      }
    ]
  }
}
src/main/java

src/main/java/RechnungService.java

import dev.brevier.Brevier;

public class RechnungService {

    public byte[] pdf(
        Firma f,
        Rechnung r,
        Kunde k
    ) {
        return Brevier
            .template("rechnung")
            .render(f, r, k);
    }
}
app

app/rechnung.py

import brevier


def pdf(
    firma, rechnung, kunde
) -> bytes:
    return brevier.template("rechnung").render(
        firma, rechnung, kunde
    )

Alles, was ein Geschäftsdokument braucht

Brevier kümmert sich um die Druckregeln. Sie kümmern sich um Ihre Daten.

  • Vorlagen in HTML und CSS

    Die Seite schreiben Sie in HTML und CSS.

  • Markdown für statische Inhalte

    Aus einer Markdown-Datei wird ein PDF.

  • Datenbindung

    Ihre JSON-Daten füllen das HTML.

  • HTML-Vorlagen gegen ein JSON-Schema validieren

    Ein falsches Feld fällt vor dem Druck auf.

  • Eine Vorlage aus Ihren Klassen erzeugen

    Aus Ihren Klassen entsteht eine erste Vorlage.

  • Import aus JasperReports und BIRT

    Berichte aus JasperReports und BIRT übernehmen.

  • Import aus Word

    .docx-Dateien mit Feldern übernehmen.

  • Aufruf ersetzen

    Ihr alter Render-Aufruf wird durch Brevier ersetzt.

  • Das HTML und CSS ansehen

    Sie sehen genau das HTML und CSS der Engine.

  • Deutsche und englische Silbentrennung

    Richtige Silbentrennung auf Deutsch und Englisch.

  • Tabellen über mehrere Seiten

    Tabellen mit Kopfzeile auf jeder Seite.

  • Übertrag

    Laufende Summen von Seite zu Seite.

  • Kopf- und Fußzeilen mit Seitenzähler

    Kopf- und Fußzeilen mit Seitenzahlen auf jeder Seite.

  • Verträge und Kleingedrucktes

    Nummerierte Klauseln und ein Inhaltsverzeichnis.

  • Alle Funktionen, jeweils mit Status

    Zur Funktionsliste

Ein Brevier ist ein Gebetbuch – das kleine Handbuch, das man immer griffbereit hat und jeden Tag nutzt. Brevier soll Ihre verlässliche Bibliothek für die programmatische PDF-Erzeugung sein, genauso lässt sich damit aber auch PDF-Rendering einfach in Ihre Web-Anwendungen einbinden. Nachdem ich mich jahrelang mit umständlichen PDF-Tools herumschlagen musste, habe ich Brevier gebaut, um die Dokumentenerzeugung in bestehendem Code intuitiv, einfach und nahtlos zu gestalten.

Liviu IonesiLiviu IonesiEntwickler von Brevier

Baut auf dem auf, was Sie schon kennen

HTML, CSS, JSON und Ihr eigener Code. Nichts Neues zu lernen.

  • HTML für die Seite

    Die Vorlage ist eine HTML-Seite. Handlebars verbindet sie mit Ihren Daten: Werte, Schleifen und Bedingungen.

    developer.mozilla.org
  • CSS für die Gestaltung

    CSS bestimmt Schriften und Farben und auch das Seitenlayout: Format, Ränder, Kopf- und Fußzeilen, Seitenzahlen.

    CSS @page
  • JSON für die Daten

    Ihre Objekte werden als JSON serialisiert. Ein JSON Schema validiert jedes Feld vor dem Rendern.

    json-schema.org
  • Ihr eigener Code

    Übergeben Sie die Objekte, die Sie schon haben, in Java, Python, .NET und TypeScript. Brevier schreibt sie in jeder Sprache gleich als JSON. Aus Java- und Python-Klassen schreibt es auch ein JSON Schema und eine erste Vorlage.

    JavaPythonC#TypeScript

Überall installieren

Installieren Sie Brevier mit pip, einem Einzeiler-Skript oder Docker. Es läuft unter Linux, macOS und Windows.

Aus Ihrer Sprache aufrufen
  • pip
  • Linux und macOS
  • Windows
  • Docker