Anleitung
Dokument mit lint prüfen
Finden Sie mit brevier lint überlaufenden Text, zu schmale Spalten, fehlende Zeichen, einsame Überschriften und Markup in Textfeldern, auch in der CI.
Auf dieser Seite
brevier lint setzt eine Vorlage und prüft die Seiten, nicht den Quelltext.
Es listet jedes Problem mit seiner Seite und der Zeile des erzeugten HTML, die
es verursacht hat. Es schreibt kein PDF.
brevier lint rechnung.html --data rechnung.json --debug-dir out/rechnung.html
page 1 table column "Stk" squeezed below its minimum width (10.0 < 15.0 mm) → out/rechnung.debug.html:9
→ 1 problem. exit code 1
debug file: out/rechnung.debug.html (holds the document's data)Exit-Code 0 heißt: keine Probleme. Exit-Code 1 heißt: mindestens ein Problem. Rufen Sie es in Ihrem Build auf, damit ein fehlerhaftes Dokument nicht zum Kunden gelangt. Alle Optionen stehen in der CLI-Referenz.
Was lint meldet
| Art | Bedeutung |
|---|---|
overflow |
Text, der breiter ist als seine Tabellenspalte oder sein Kasten. Die Meldung nennt die Spaltenüberschrift, die ersten 20 Zeichen und beide Breiten in mm. |
table |
Eine Tabellenspalte, die schmaler ist als ihre festgelegte Mindestbreite. Siehe unten. |
glyph |
Ein Zeichen, das die Schrift nicht zeichnet, oder das eine Ersatzschrift statt der gewünschten Schrift zeichnet. |
orphan |
Eine Überschrift allein am Seitenende. Eine Überschrift am Ende der letzten Seite wird nicht gemeldet. |
split |
Eine Tabellenzeile, die über zwei Seiten getrennt ist. Die Meldung nennt die Zeilennummer und die Seiten. |
hyphens |
Mehr als 3 Zeilen mit Silbentrennung hintereinander, oder eine vor einem Seitenumbruch. |
data |
Ein Wert in Ihren Daten, der nicht zu seinem Feldtyp passt: Markup oder ein Zeilenumbruch in einem text-Feld. Siehe Die Daten prüfen. |
Die Daten prüfen
Ein Problem kann in den Daten liegen und nicht im Layout. Ein text-Feld
entfernt Zeilenumbrüche und druckt Markup als einfachen Text: Der Wert
Zeile 1<br/>Zeile 2 druckt die Zeichen <br/> auf die Seite. lint findet das,
bevor das PDF entsteht.
Die Prüfung läuft, wenn Sie --data angeben und ein Schema gefunden wird. Das
Schema ist <name>.schema.json neben der Vorlage, oder das, das Sie mit
--schema nennen. Ein Feld hat den Typ text, wenn sein Schema
"x-brevier-type": "text" oder kein x-brevier-type hat. Ein Feld, das das
Schema nicht aufführt, zählt als text.
{
"type": "object",
"properties": {
"rechnung": {
"type": "object",
"properties": {
"nummer": { "type": "string" },
"bemerkung": { "type": "string", "x-brevier-type": "text" },
"lieferhinweis": { "type": "string", "x-brevier-type": "multiline" }
}
}
}
}Nehmen Sie eine rechnung.json mit 5 Datensätzen. Drei Datensätze haben <br/>
in bemerkung, und einer hat darin einen Zeilenumbruch. Alle 5 Datensätze haben
einen Zeilenumbruch in lieferhinweis.
brevier lint rechnung.html --data rechnung.jsonrechnung.html
document data rechnung.bemerkung contains markup (3 of 5 records): suggest `multiline` or `rich`
document data rechnung.bemerkung contains newlines (1 of 5 records): suggest `multiline`
→ 2 problems. exit code 1
debug file: rechnung.debug.html (holds the document's data)- lint meldet eine Zeile für jedes Feld und jedes Problem, mit der Zahl der
Datensätze, die es haben. Der Pfad beginnt an der Wurzel des Datensatzes,
also sind
kunde.nameundlieferant.namezwei Felder mit zwei Typen. lieferhinweiswird nicht gemeldet: Einmultiline-Feld behält Zeilenumbrüche. Einrich-Feld behält Markup.- Markup ist ein HTML-Tag wie
<br/>,<b>oder</p>. Der TextPreis < 5 und > 3ist kein Markup. - Die Meldungen enthalten nie die Werte Ihrer Daten.
- Die
data-Meldungen haben keine Seite und keine Zeile: Die Ursache liegt in den Daten, nicht im erzeugten HTML.
Die Lösung liegt im Schema oder in den Daten. Legen Sie für ein Feld, das
Zeilenumbrüche oder Markup behalten soll, multiline oder rich fest, oder
bereinigen Sie den Wert in Ihrer Anwendung. Siehe
Feldtypen.
| Lage | Was lint tut |
|---|---|
--data und ein Schema |
Prüft die Daten. |
--data und kein Schema |
Überspringt die Datenprüfung und gibt No schema for rechnung.html: data checks skipped auf der Standardfehlerausgabe aus. Das ist kein Problem: Der Exit-Code ändert sich nicht. |
--schema false |
Überspringt die Datenprüfung. |
| Eine Schemadatei, die fehlt oder kein gültiges JSON ist | Bricht mit einem Fehler und Exit-Code 1 ab. |
Die Ausgabe als JSON lesen
--format json gibt ein Array aus, mit einem Objekt für jedes Problem, und [],
wenn es keines gibt. Jedes Objekt hat die Schlüssel page, kind, message,
file und line. Nutzen Sie es, um ein anderes Werkzeug zu speisen.
brevier lint rechnung.html --data rechnung.json --format json[
{
"page": null,
"kind": "data",
"message": "rechnung.bemerkung contains markup (3 of 5 records): suggest `multiline` or `rich`",
"file": null,
"line": null
},
{
"page": null,
"kind": "data",
"message": "rechnung.bemerkung contains newlines (1 of 5 records): suggest `multiline`",
"file": null,
"line": null
}
]page, file und line sind null bei einem Problem, das keinen Platz im
erzeugten HTML hat.
Mindestbreite einer Spalte festlegen
Eine Tabellenspalte hat von sich aus keine Mindestbreite. Darum meldet lint
nie von selbst eine zu schmale Spalte. Sie legen die Mindestbreite am
<col> der Spalte fest, mit dem Attribut data-min-width:
<table>
<col style="width: 40mm">
<col style="width: 25mm" data-min-width="20mm">
<tr><th>Position</th><th>Menge</th></tr>
</table>CSS min-width wirkt bei einer Spalte nicht. Darum liest Brevier dieses
Attribut.
- Der Wert ist eine Zahl mit
mm:20mmoder22.5mm. Jeder andere Wert wird ignoriert. - Lint vergleicht die Breite der Spalte auf der Seite mit der Mindestbreite. Es meldet die Spalte, wenn sie um mehr als 0,3 mm schmaler ist.
- Eine Spalte ohne das Attribut wird nie gemeldet.
- Das Attribut ändert nichts am PDF. Nur
brevier lintliest es.
Lint in CI ausführen
Führen Sie brevier lint in Ihrer Build-Pipeline aus, um Layoutfehler
abzufangen, bevor PDFs für Kunden erzeugt werden.
Lizenzschlüssel und Netzwerk
Wie brevier pdf benötigt auch brevier lint einen Lizenzschlüssel in der
Umgebungsvariable BREVIER_LICENCE_KEY. Hinterlegen Sie den Schlüssel in den
Secrets Ihrer CI-Plattform.
Linting benötigt keinen Netzwerkzugriff. Es läuft vollständig offline.
Warnung zur Debug-HTML-Datei
brevier lint schreibt eine Debug-HTML-Datei (wie rechnung.debug.html oder
unter --debug-dir), um Zeilennummern für gefundene Probleme anzuzeigen. Diese
Datei enthält die gerenderten Daten des Dokuments.
Veröffentlichen oder speichern Sie die Debug-HTML-Datei nicht als öffentliches CI-Artefakt, da sie die Dokumentdaten enthält.
GitHub Actions
Dieser Workflow installiert Brevier mit pip und prüft eine Vorlage bei jedem
Push und Pull Request. Hinterlegen Sie Ihren Lizenzschlüssel als Repository-Secret
BREVIER_LICENCE_KEY.
name: lint templates
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Pango und brevier installieren
run: |
sudo apt-get update -qq
sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0
pip install brevier
- name: Vorlagen prüfen
env:
BREVIER_LICENCE_KEY: ${{ secrets.BREVIER_LICENCE_KEY }}
run: brevier lint templates/rechnung.html --data templates/rechnung.jsonEin Befund ergibt Exit-Code 1. Der Job schlägt dann fehl, und der Pull Request zeigt es.