Eine Tabelle, die von Seite zu Seite weiterläuft

Zeilen und Spalten, die über so viele Seiten fließen wie nötig, mit wiederholtem Kopf, Linien, farbigen Hintergründen und verbundenen Zellen.

In einem echten PDF ansehen

Eine mehrseitige Rechnungstabelle

Zwölf Rechnungszeilen sind eine Seite und dreißig sind zwei, wobei die zweite Kopfzeile und Layout der ersten übernimmt.

Das PDF öffnen Das vollständige Beispiel ansehen

Auch zu sehen in: Außenabstand, Rahmen, Innenabstand und Füllung einer Zelle · Farbige Zellrahmen und Füllungen · Eine Tabelle, die sich selbst umbricht

Zusammenfassung

Die Tabelle, die Sie bereits kennen, mit einem Text, einem Preis oder einem Bild in jeder Zelle. Sie wählen, wie breit die Spalten sind: eine feste Größe, ein Anteil des Verbleibenden oder gerade genug für den Inhalt. Wer mitten in einer langen landet, weiß immer, was er liest, weil die Kopfzeile oben auf jeder Seite erneut gedruckt wird. Die Linien, die grauen oder farbigen Hintergründe und die zu einer verbundenen Zellen werden in einem einzigen Satz verlangt, für die ganze Tabelle auf einmal.

Technisch

Angefordert mit "type": "table"

Ein table-Element gibt seine Spalten, seine Zeilen und die beiden Kästen an, in die es fließt: den auf der ersten Seite und den auf jeder folgenden. Breiten werden in Punkt angegeben, als Bruchteil des verbleibenden Raums oder am eigenen Inhalt der Zellen gemessen. Eine Anzahl führender und abschließender Zeilen wiederholt sich auf jeder Seite. Linien werden nach Muster deklariert — der Rahmen, eine bestimmte Linie, jede zweite waagerechte, eine vom Ende gezählte Spalte — und Füllungen nach Bereich, mit einer klaren Rangfolge: Eine benannte Zeile oder Spalte schlägt Kopf und Fuß, diese schlagen gerade oder ungerade Zeilen, diese schlagen die ganze Tabelle; bei Gleichstand gewinnt die letzte Deklaration, und eine an einer Zelle oder einer Zeile gesetzte Füllung geht allem voran. Eine Zelle enthält Text, ein Bild, eine deklarierte Zeichnung oder eine Seite eines mitgelieferten PDF und erstreckt sich über mehrere Spalten oder mehrere Zeilen. Eine Tabelle kann auch angewiesen werden, eine für ihren Kasten zu hohe Rumpfzeile an einer Zeile ihres Textes zu teilen, statt die ganze Zeile weiterzurücken; in diesem Fall gibt eine Zelle mit keep_lines an, wie viele Zeilen eines ihrer Absätze auf jeder Seite dieser Teilung bleiben müssen, damit die Teilung in einem Kasten einer Tabelle nie einen Schusterjungen oder ein Hurenkind zurücklässt.

Anfrageschema

Erforderliche Schlüssel: columns, ein Objekt aus widths (ein Array von {"points": n}, {"fraction": n}, "content" oder "longest_word") und total (eine Zahl); rows, ein Array von Zeilen; first und next, zwei rect-Objekte. Optional: header und footer, Ganzzahlen, standardmäßig 0; row_headers, eine Ganzzahl, standardmäßig 0, wie viele führende Spalten die Überschrift ihrer Zeile sind, sodass eine vorgelesene Zahl unter dem Eintrag angesagt wird, neben dem sie steht; header_links, einer der Werte deduced, always oder never, ob die Zellen die Überschriften nennen, unter denen sie stehen — fehlt es, verhält es sich wie deduced, das sie nur dort nennt, wo die eigene Lesart einer Tabelle durch die Norm nicht sagen kann, welche Überschrift welche Zelle erreicht, bei einer über Spalten oder Zeilen verbundenen Überschrift, einer Überschrift außerhalb der führenden Zeilen und Spalten oder einer Zeile, die kürzer ist, als die Tabelle breit ist, während always jede Zelle, für die eine Überschrift gilt, sie nennen lässt und never keine; branch, die Bezeichnung, unter der der Strukturbaum die Tabelle hält; fill_frame (standardmäßig false), ob die Rumpfzeilen den Raum, den der Kasten unter ihnen lässt, unter sich aufteilen, sodass die letzte von ihnen auf dem Boden des Kastens endet, wobei Kopf und Fuß die benötigte Höhe behalten; corners, eine Zahl, der Radius in Punkt, auf den die vier Ecken des Tabellenrahmens gerundet werden, wobei der Rahmen dann als ein geschlossener Umriss gezeichnet wird, sodass eine Tabelle, deren Linien keinen frame zeichnen oder eine der vier Außenlinien über ihre Nummer nehmen, abgelehnt wird, und ein Radius von null den Rahmen so zeichnet wie ohne diesen Schlüssel; split_rows (standardmäßig false), ob eine für ihren Kasten zu hohe Rumpfzeile an einer Zeile ihres Textes geteilt wird, statt abgelehnt zu werden, wobei die Zeilen, über die eine Zelle nach unten reicht, auf dieselbe Weise zwischen zwei Kästen geteilt werden und die Zelle im nächsten weiterläuft; threads, ein Array von {"name": …, "content": […], "font": …, "font_size": n}, Texte, die durch mehrere Zellen laufen; rules, ein Array von {"rule": …, "stroke": …}, wobei das Muster "frame", {"horizontal": n}, {"horizontal_from_end": n}, "horizontal_other", {"vertical": n}, {"vertical_from_end": n} oder "vertical_other" ist; fills, ein Array von {"area": …, "color": …}, wobei der Bereich "whole", "header", "footer", "even_rows", "odd_rows", {"row": n}, {"row_from_end": n}, {"column": n} oder {"column_from_end": n} ist; id; start, eines von {"page": n}, "on_new_page" oder {"relative_to": …} (standardmäßig: die erste Seite); layer. Eine Zeile: cells erforderlich; min_height, space (before, after, standardmäßig 0), keep_with_next (standardmäßig false) und fill optional. Eine Zelle enthält genau einen Inhalt aus Text (content, ein Array von Zeichenketten, mit font und font_size), thread (der Name eines Fadens: Die Zellen, die einen nennen, nehmen seinen Text in ihrer Reihenfolge auf, jede außer der letzten die Zeilen, die die Höhe ihrer Zeile ohne sie fasst, die letzte den Rest), image, drawing und pdf (mit page, einer Ganzzahl, standardmäßig 1); zwei Inhalte oder keiner werden abgelehnt. Weitere Zellschlüssel, alle optional: align, overlong, border (top, bottom, left, right, jeweils eine Kontur), fill, color, padding und margin (left, right, top, bottom, standardmäßig 0), span und row_span (standardmäßig 1), repeated_when_cut (standardmäßig false; true zeichnet den Text einer Zelle, deren Zeilen zwischen zwei Kästen geteilt werden, am Kopf des nächsten erneut vollständig), valign (standardmäßig top, middle, bottom), leading (standardmäßig 1,2 × die Größe), leader und align_on (ein Zeichen), heading (row, column oder both: Die Zelle ist die Überschrift des Rests ihrer Zeile, des Rests ihrer Spalte oder beider; gelesen, wo die Tabelle branch trägt), keep_lines (eine ganze Zahl über null; fehlt sie, gilt die Zahl, die die Engine einhält, die ein Textblock getrennt als orphans und widows nennt). keep_lines wird nur gelesen, wo die Tabelle eine Rumpfzeile an einer Zeile ihres Textes teilt, und eine Zelle mit etwas anderem als Text bleibt davon unberührt; eine Zahl, die kein Kasten auf dem Weg einhalten kann, wird verworfen, und die Zeile wird dort geteilt, wo sie ohne sie geteilt worden wäre. Ein keep_lines von null wird abgelehnt. Eine Tabelle nimmt außerdem caption an, ein Objekt: content, erforderlich, ihre Wörter, wobei ein Zeilenumbruch einen Absatz beendet; side, above (Standard) oder below, die Seite der Tabelle, an der sie gesetzt wird, so breit wie die Tabelle; gap, die zwischen ihr und der Tabelle freigehaltenen Punkt, standardmäßig keine; first_box_only, ein boolescher Wert, standardmäßig false, wobei true sie nur auf den ersten Kasten setzt, in den die Tabelle geht, statt auf jeden, in dem sie fortgesetzt wird; und die Schlüssel, die einen flow-Block gestalten, font, font_size, align, color und die übrigen, für ihren Satz. Ihr Platz wird vom Kasten abgezogen, bevor eine Zeile platziert wird. draw_damaged, ein boolescher Wert, standardmäßig false, setzt die Tabelle auch dort, wo sie abgelehnt würde, damit man auf der Seite sieht, was schiefging: Eine Zeile, die eine andere Spaltenzahl abdeckt, als die Tabelle hat, wird so weit platziert, wie die Spalten reichen, und eine Zeile, die höher ist als ein leerer Kasten, läuft über den Boden des Kastens hinaus. Eine Zeile nimmt außerdem fixed_height an, ein Objekt aus height und floor, beide Zahlen in Punkt und beide erforderlich: Die Zeile nimmt height an, was ihr Text auch braucht, Text, der in seiner eigenen Größe nicht passt, wird in der größten Schriftgröße bis hinab zu floor gesetzt, in der er passt, und Text, der selbst bei floor nicht passt, läuft über den Boden seiner Zelle hinaus; es hat Vorrang vor min_height, und die Zeile wird nie über zwei Kästen geteilt. Eine Zelle nimmt außerdem character_spacing und horizontal_scaling an, gelesen wie bei einem Textblock. Der leader einer Zelle nimmt außerdem das Objekt an, das der leader eines flow-Blocks annimmt, wobei sein font und seine font_size auf die der Zelle zurückfallen; eine Zelle mit einem Bild wiederholt keine Zeichenkette. columns nimmt außerdem groups an, Spalten, die auf einer Breite gehalten werden, jede Gruppe {"name": …, "columns": [0, 2]} von links gezählt, jede Spalte davon so breit, wie die breiteste es braucht; eine in zwei Gruppen genannte Spalte gehört zur letzten.

Eine vollständige Anfrage, die ein PDF erzeugt

{
  "standard_fonts": [{"name": "sans", "face": "helvetica"}],
  "items": [
    {
      "type": "table",
      "columns": {"widths": [{"fraction": 1.0}, {"points": 80}], "total": 451},
      "first": {"llx": 72, "lly": 600, "urx": 523, "ury": 780},
      "next": {"llx": 72, "lly": 72, "urx": 523, "ury": 780},
      "header": 1,
      "header_links": "deduced",
      "branch": "lines",
      "split_rows": true,
      "fills": [{ "area": "header", "color": [0.93, 0.94, 0.97] }],
      "rules": [{"rule": "frame", "stroke": {"width": 0.8}}],
      "caption": {
        "content": "Amounts in euros",
        "side": "below",
        "gap": 4,
        "font": "sans",
        "font_size": 9
      },
      "rows": [
        {"cells": [
          {
            "content": ["Description"],
            "font": "sans",
            "font_size": 10,
            "valign": "middle"
          },
          {"content": ["Amount"], "font": "sans", "font_size": 10, "align": "right"}
        ]},
        {"cells": [
          {"content": ["Rendering engine"], "font": "sans", "font_size": 10,
           "keep_lines": 3, "heading": "row"},
          {"content": ["4 250.00"], "font": "sans", "font_size": 10, "align": "right"}
        ]}
      ]
    }
  ],
  "structure": {
    "lang": "en-GB",
    "children": [{"tag": "Document", "children": [{"branch": "lines"}]}]
  }
}

Die Zeile, die es sendet, in drei Sprachen

Wohin als Nächstes

Jeder JSON-Schlüssel einer Anfrage, auf einer Seite Die übrigen zweiundzwanzig Dinge, die Sie zeichnen können

Die Preise ansehen Die Beispiele ansehen