Ein freier Pfad: Linien, Kurven und gefüllte Formen
Zeichnen Sie eine Form Punkt für Punkt, mit geraden Segmenten und Kurven, gefüllt mit einer Farbe oder einem Verlauf und mit einer Kontur umrandet.
In einem echten PDF ansehen
Ein Monatsbericht, seine Diagramme in Kurven gezeichnet
Ein Kreisdiagramm, wohin die Stunden gingen, eine Ringanzeige, wie weit die Arbeit im Jahr fortgeschritten ist, eine Karte mit abgerundeten Ecken und Bögen, denen gesagt wird, wohin sie führen, statt wie weit sie sich drehen.
Das PDF öffnen Das vollständige Beispiel ansehen
Auch zu sehen in: Das Gezeichnete ausschneiden · Gestrichelte und gepunktete Linien · Transparenz und Füllmethoden
Zusammenfassung
Der freie Stift: Sie setzen die Spitze auf, und die Linie folgt, wohin Sie sie führen. Gerade Segmente ergeben Dreiecke, Pfeile und Polygone; Kurven ergeben runde Ecken, Wellen und vollkommene Kreise. Daraus bestehen eine Linie unter einer Überschrift, ein Band hinter einem Titel und die Verzierung einer Urkunde.
Technisch
Angefordert mit
"type": "path"
Ein Pfad ist eine Folge von Segmenten, die direkt in den Inhaltsstream der Seite geschrieben und der Reihe nach angewendet werden: move_to eröffnet mit m einen Teilpfad an einem Punkt, line_to verlängert ihn mit l um eine gerade Kante, curve_to hängt mit c eine kubische Bézierkurve durch zwei Kontrollpunkte an, und close schließt den Teilpfad mit h zu seinem Ursprung zurück. Eine Seite kennt keinen Kreisoperator und keinen Bogenoperator, daher verlangen acht weitere Segmente eine Form über ihren Namen, und die Kurven werden dafür berechnet: circle, ellipse, arc, rounded_rect und rounded_polyline eröffnen jeweils einen eigenen Teilpfad, und arc_to, arc_through und elliptical_arc setzen dort fort, wo der Pfad bereits steht. Kein Stück biegt sich weiter als eine Vierteldrehung, ein Kreis besteht also aus vier Kurven. Jede Koordinate ist eine Zahl oder ein Ausdruck, sodass ein Pfad an der Seitenbreite steht, ohne dass der Kunde etwas berechnet; die Radien sind einfache Zahlen und die Winkel Grad gegen den Uhrzeigersinn. Das Malen wird in zwei unabhängigen Schlüsseln angegeben, Füllung und Kontur; die Füllung nimmt eine Farbe oder den Namen eines deklarierten Verlaufs an. Eine optionale Beschneidung begrenzt, was das Element zeigt, und gilt nur für dieses Element: Die Elemente danach bleiben vollständig.
Anfrageschema
Erforderlicher Schlüssel: segments, ein Array von Schritten, jeder {"move_to": {"x", "y"}}, {"line_to": {"x", "y"}}, {"curve_to": {"x1","y1","x2","y2","x","y"}} oder die Zeichenkette "close"; jede Koordinate ist eine Zahl oder ein Ausdruck. Acht Schritte nennen stattdessen eine Form: {"circle": {"centre", "r"}}, {"ellipse": {"centre", "rx", "ry"}}, {"arc": {"centre", "r", "start", "sweep"}}, {"arc_to"} mit denselben vier, {"arc_through": {"from", "via", "to"}}, {"elliptical_arc": {"from", "to", "rx", "ry", "large", "clockwise", "x_rotation", "enlarge_radii"}}, {"rounded_rect": {"rect", "radius"}} und {"rounded_polyline": {"points", "radius", "close"}}; ein centre, ein from, ein via, ein to und jeder Eintrag von points ist ein Objekt aus x und y, rect sind die üblichen vier Ecken, r, rx, ry und radius sind Längen in Punkt, start, sweep und x_rotation sind Grad gegen den Uhrzeigersinn, und large, clockwise, enlarge_radii und close sind standardmäßig false. enlarge_radii skaliert beide Radien eines Bogens, der zu klein ist, um von einem Ende zum anderen zu reichen, um das Mindeste, das sie reichen lässt; ein radius unter null kerbt jede Ecke einer rounded_polyline ein, schneidet also hinein statt ab. Ein Schritt {"svg_path": {"d", "x", "y", "scale"}} fügt den Umriss hinzu, den die SVG-Pfaddaten d beschreiben, wobei jeder Befehl der SVG-Pfadgrammatik gelesen wird: Ein Punkt des Pfads landet bei x plus scale mal seiner ersten Koordinate quer und y minus scale mal seiner zweiten nach oben, der SVG-Ursprung landet bei x, y; scale ist standardmäßig 1. Anstelle von x, y und scale nimmt der Schritt rect an, die üblichen vier Ecken, in die der Umriss eingepasst wird wie ein Bild: view, vier Zahlen [min x, min y, width, height] in den eigenen Einheiten des Pfads, das viewBox-Attribut der SVG-Datei, nennt den eingepassten Kasten, standardmäßig den Kasten, den der Umriss nachzeichnet; fit ist ein bloßer Modus oder eine Regel, wie ein Bild sie ohne clip und scale annimmt, standardmäßig stretch; die Oberkante dieses Kastens landet an der Oberkante dessen, worin er eingepasst wird. rect neben x, y oder scale, view oder fit ohne rect, weder rect noch sowohl x als auch y oder ein fit, das clip oder scale nennt, wird abgelehnt. Ein nicht lesbares d wird abgelehnt, unter Nennung des Bytes, an dem es anhält, und Text entlang eines Pfads lehnt diesen Schritt ab. Optional: fill, eine Farbe oder {"shading": "name"}; stroke, ein Objekt mit erforderlichem width sowie color (standardmäßig Schwarz), dash (ein Objekt mit erforderlichem lengths und einer phase, standardmäßig 0), cap (standardmäßig butt, round, projecting) und join (standardmäßig miter, round, bevel); clip, ein Objekt mit erforderlichem segments und einer rule (standardmäßig nonzero, even_odd); graphics_state, der Name eines deklarierten Grafikzustands; pages, ein Array von ab eins gezählten Ganzzahlen, standardmäßig leer; transform, sechs Zahlen; rotate, Grad gegen den Uhrzeigersinn um die Mitte des Rechtecks; layer, der Name einer deklarierten Ebene. Gegenseitige Ablehnungen: transform zusammen mit rotate; ein clip mit leeren Segmenten; ein Radius von null, ein Bogen, dessen beide Enden an derselben Stelle liegen, Radien, die ohne enlarge_radii zu klein sind, um von einem Ende zum anderen zu reichen, drei Punkte, die keinen Kreis bestimmen, ein Kreisbogen mit einem Radius unter null und ein Linienzug aus weniger als zwei Punkten. Eine Form nimmt fill, stroke oder beides an. fill_rule, standardmäßig nonzero oder even_odd, gibt an, welche Seite der Form als Inneres für die Füllung zählt: even_odd lässt einen innerhalb eines anderen gezeichneten Teilpfad leer, sodass eine Scheibe in einer Scheibe als Ring gefüllt wird, und es ohne fill zu nennen wird abgelehnt. stroke nimmt außerdem miter_limit an, wie weit eine miter-Ecke hinausragen darf, bevor sie gerade abgeschnitten wird, als Verhältnis der Länge der Ecke zur Linienbreite, standardmäßig 10.
Eine vollständige Anfrage, die ein PDF erzeugt
{
"items": [
{
"type": "path",
"clip": { "rule": "nonzero", "segments": [
{"move_to": {"x": 60, "y": 690}},
{"line_to": {"x": 290, "y": 690}},
{"line_to": {"x": 290, "y": 790}},
{"line_to": {"x": 60, "y": 790}},
"close"
] },
"segments": [
{"move_to": {"x": 72, "y": 700}},
{"line_to": {"x": 272, "y": 700}},
{"line_to": {"x": 172, "y": 780}},
"close"
],
"fill": [0.85, 0.89, 0.95],
"stroke": {"width": 1.0}
}
]
}
Formen
Ein Rechteck, gefüllt oder umrandet Eine gerade Linie zwischen zwei Punkten Einmal deklarierte Zeichnung, beliebig oft platziert
Wohin als Nächstes
Jeder JSON-Schlüssel einer Anfrage, auf einer Seite Die übrigen zweiundzwanzig Dinge, die Sie zeichnen können