Zum Inhalt springen
getnextpdf.com

Pro Edition

Chart — Ausführliche Referenz

Diese Seite ist die Referenz auf Vertragsebene für das NextPDF Pro Chart-Modul. Die Oberfläche besteht aus fünf öffentlichen Klassen in NextPDF\Pro\Chart: den Renderern BarChart, LineChart und PieChart, dem Platzierungsrechteck ChartBox und dem Wertobjekt ChartColor. Jeder Renderer ist ein Zeichenprimitiv. Eine statische Factory erzeugt ihn, fluente with*()-Aufrufe konfigurieren ihn, und render(ChartBox $box): string liefert PDF-Content-Stream-Operatoren für das übergebene Rechteck zurück. Die Ausgabe ist rein vektorbasiert und deterministisch: identische Eingabe und Konfiguration erzeugen identische Bytes. Degenerierte Eingaben liefern eine leere Zeichenkette zurück, statt eine Ausnahme auszulösen, sodass ein Chart die umgebende Seite nie beschädigt. Die aufgabenorientierte Sicht finden Sie auf der Capability-Seite.

Diese Capability ist in NextPDF Pro (nextpdf/pro) enthalten und wird mit einem Lizenz-Envelope der Pro-Stufe aktiviert. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Capability nicht. Editionen vergleichen und eine Lizenz erwerben.

Die Chart-Renderer sind capability-lizenziert unter der Capability-Familie chart.*. Wenn die Capability nicht lizenziert ist, sind die Chart-Renderer nicht verfügbar.

Terminal-Fenster
composer require nextpdf/pro:^3
SymbolParameterStandardverhaltenRückgabeLöst aus oder scheitert mitHinweise
BarChart::fromData()list<string> $labels, list<int|float> $valuesWerte werden zu float gecastetselfLöst keine Ausnahme ausEinziger Konstruktionsweg; der Konstruktor ist privat
BarChart::withBarColor()ChartColor $colorBalkenfüllung; Standard ist Paletteneintrag 0selfLöst keine Ausnahme ausFluent; verändert den Empfänger
BarChart::withAxisColor()ChartColor $colorAchsenkontur; Standard #333333selfLöst keine Ausnahme aus
BarChart::withBarGap()float $gapAbstand als Anteil der Slotbreite; Standard 0.2selfLöst keine Ausnahme ausAuf 0.00.9 begrenzt; Eingaben außerhalb des Bereichs werden begrenzt, nicht abgelehnt
BarChart::withFontSize()float $sizeSchriftgröße der Beschriftung in Punkt; Standard 7.0selfLöst keine Ausnahme aus
BarChart::render()ChartBox $boxAchsen, Balken, Kategoriebeschriftungen, fünf Werteskalenmarkierungenstring-OperatorenLöst keine Ausnahme aus; leere Daten liefern '' zurückEin nicht positives Maximum wird gegen 1.0 skaliert
LineChart::create()list<string> $labelsChart ohne SerienselfLöst keine Ausnahme ausDer Konstruktor ist privat
LineChart::fromData()list<string> $labels, list<int|float> $valuesFügt eine unbenannte Serie hinzuselfLöst keine Ausnahme ausKomfortmethode für eine einzelne Serie
LineChart::addSeries()string $name, list<int|float> $values, ?ChartColor $color = nullEine null-Farbe wird automatisch anhand des Serienindex aus der Palette zugewiesenselfLöst keine Ausnahme ausDer Serienname ist für die Verwendung in der Legende reserviert
LineChart::withAxisColor()ChartColor $colorAchsenkontur; Standard #333333selfLöst keine Ausnahme aus
LineChart::withLineWidth()float $widthKonturbreite der Serie; Standard 1.5selfLöst keine Ausnahme aus
LineChart::withFontSize()float $sizeSchriftgröße der Beschriftung; Standard 7.0selfLöst keine Ausnahme aus
LineChart::withDots()bool $show, float $radius = 2.5Datenpunktmarker; standardmäßig aktiviertselfLöst keine Ausnahme ausMarker werden als Bézier-approximierte Kreise gezeichnet
LineChart::withGrid()bool $showHorizontales Quartilraster; standardmäßig aktiviertselfLöst keine Ausnahme aus
LineChart::render()ChartBox $boxRaster, Achsen, ein Pfad je Serie, Beschriftungenstring-OperatorenLöst keine Ausnahme aus; ohne Serien wird '' zurückgegebenEine Serie mit weniger als zwei Punkten zeichnet keinen Pfad
PieChart::fromData()list<string> $labels, list<int|float> $valuesAnteile werden aus der Wertesumme berechnetselfLöst keine Ausnahme ausDer Konstruktor ist privat
PieChart::withColors()list<ChartColor> $colorsEine Farbe je Segment, in ReihenfolgeselfLöst keine Ausnahme ausFehlende Einträge greifen auf die Palette zurück
PieChart::withStrokeColor()ChartColor $colorSegmentkontur; Standard WeißselfLöst keine Ausnahme aus
PieChart::withFontSize()float $sizeSchriftgröße der Beschriftung; Standard 7.0selfLöst keine Ausnahme aus
PieChart::withPercentages()bool $showProzentbeschriftungen; standardmäßig aktiviertselfLöst keine Ausnahme ausBeschriftungen werden nur auf Segmenten dargestellt, die mehr als 15 Grad überstreichen
PieChart::withLegend()bool $showLegende auf der rechten Seite; standardmäßig aktiviertselfLöst keine Ausnahme ausDie Legende reserviert 80 Punkt Boxbreite
PieChart::render()ChartBox $boxSektoren, optionale Beschriftungen, optionale Legendestring-OperatorenLöst keine Ausnahme aus; leere Daten oder eine Summe von null oder darunter liefern '' zurückBögen werden in Bézier-Segmente von höchstens 90 Grad aufgeteilt
ChartBox::__construct()float $x, float $y, float $width, float $heightPDF-Ursprung unten links, in PunktLöst keine Ausnahme ausfinal readonly; Abmessungen werden nicht validiert
ChartBox::fromUserSpace()float $x, float $y, float $width, float $height, float $pageHeightSpiegelt ein Rechteck mit Ursprung oben links in PDF-KoordinatenselfLöst keine Ausnahme aus
ChartBox::right()keinex + widthfloatLöst keine Ausnahme ausMethode, keine Eigenschaft
ChartBox::top()keiney + heightfloatLöst keine Ausnahme ausMethode, keine Eigenschaft
ChartBox::inset()float $left, float $bottom, float $right, float $topTeilbox, um die angegebenen Insets verkleinertselfLöst keine Ausnahme ausÜbergroße Insets ergeben negative Abmessungen; nicht validiert
ChartColor::__construct()float $r, float $g, float $b, jeweils 0.01.0Löst keine Ausnahme ausfinal readonly; Komponenten werden nicht begrenzt
ChartColor::rgb()int $r, int $g, int $b, jeweils 0255Skaliert Komponenten auf 0.01.0selfLöst keine Ausnahme aus
ChartColor::hex()string $hexAkzeptiert Hex mit #-Präfix oder bloße sechsstellige Hex-WerteselfLöst keine Ausnahme ausFehlende nachfolgende Ziffern werden als Null decodiert
ChartColor::palette()int $indexIntegrierte 12-Farben-PaletteselfTypeError bei negativem IndexNicht negative Indizes laufen modulo 12 um
ChartColor::strokeOperator()keineKonturfarboperator (RG), drei NachkommastellenstringLöst keine Ausnahme ausMethode, keine Eigenschaft
ChartColor::fillOperator()keineFüllfarboperator (rg), drei NachkommastellenstringLöst keine Ausnahme ausMethode, keine Eigenschaft
public static function fromData(array $labels, array $values): self
public function withBarColor(ChartColor $color): self
public function withAxisColor(ChartColor $color): self
public function withBarGap(float $gap): self
public function withFontSize(float $size): self
public function render(ChartBox $box): string
public static function create(array $labels): self
public static function fromData(array $labels, array $values): self
public function addSeries(string $name, array $values, ?ChartColor $color = null): self
public function withAxisColor(ChartColor $color): self
public function withLineWidth(float $width): self
public function withFontSize(float $size): self
public function withDots(bool $show, float $radius = 2.5): self
public function withGrid(bool $show): self
public function render(ChartBox $box): string
public static function fromData(array $labels, array $values): self
public function withColors(array $colors): self
public function withStrokeColor(ChartColor $color): self
public function withFontSize(float $size): self
public function withPercentages(bool $show): self
public function withLegend(bool $show): self
public function render(ChartBox $box): string
public function __construct(
public float $x,
public float $y,
public float $width,
public float $height,
)
public static function fromUserSpace(
float $x,
float $y,
float $width,
float $height,
float $pageHeight,
): self
public function right(): float
public function top(): float
public function inset(float $left, float $bottom, float $right, float $top): self
public static function rgb(int $r, int $g, int $b): self
public static function hex(string $hex): self
public static function palette(int $index): self
public function strokeOperator(): string
public function fillOperator(): string

Alle drei Renderer folgen einem Lebenszyklus: eine statische Factory, fluente Konfiguration, ein render()-Aufruf. Konfigurationsmethoden verändern den Empfänger und geben ihn zurück; Renderer sind keine unveränderlichen Wertobjekte. render() liest die Konfiguration, ohne sie zu verändern, sodass ein konfigurierter Renderer in mehrere Boxen rendern kann. Jeder Rendervorgang umschließt seine Ausgabe mit einem Speichern/Wiederherstellen-Paar des Grafikzustands, sodass Chart-Zustand nie in die Seite überläuft. Koordinaten werden mit zwei Nachkommastellen und Farbkomponenten mit drei ausgegeben, was die Ausgabe bytestabil hält. Text wird über den Font-Ressourcennamen /ChartFont in der konfigurierten Größe dargestellt; der Aufrufer registriert einen Font unter diesem Namen im Ressourcen-Dictionary der Zielseite. Beschriftungszeichenketten escapen Backslash und Klammern, bevor sie in String-Operanden eingehen. Renderer führen keinen Umbruch, kein Clipping und keine Container-Aushandlung durch: die Platzierung liegt beim Aufrufer.

Balken- und Liniendiagramme reservieren einen festen Plot-Inset innerhalb der Box: 40 Punkt links, 20 unten, 10 rechts, 10 oben. Der verbleibende Plot-Bereich skaliert Werte linear gegen das Serienmaximum. Ein Maximum von null oder darunter wird stattdessen gegen 1.0 skaliert, sodass reine Nulldaten Achsen mit flachem Inhalt darstellen, statt durch null zu teilen. Beide zeichnen X- und Y-Achsen mit 0.5 Punkt Breite und fünf Werteskalenmarkierungen an Quartilpositionen. Balkendiagramme formatieren Skalenwerte mit den Suffixen K und M oberhalb von eintausend und einer Million; Liniendiagramme geben schlichte Zahlen aus.

Jeder Wert belegt einen gleich großen Slot über die Plot-Breite. Der Balken füllt den Slot abzüglich des konfigurierten Abstandsanteils und wird im Slot zentriert. Kategoriebeschriftungen werden 12 Punkt unterhalb des Plot-Bereichs gezeichnet.

Das Raster zeichnet, sofern aktiviert, vier horizontale Quartillinien in Hellgrau (0.85 0.85 0.85 RG) unterhalb der Achsen und Serien. Jede Serie zeichnet einen Polygonzug durch ihre Punkte, der die gesamte Plot-Breite überspannt. Optionale Marker werden als Bézier-Kreise aus vier Segmenten an jedem Datenpunkt gezeichnet. Serienfarben verwenden standardmäßig aufeinanderfolgende Paletteneinträge in Einfügereihenfolge.

Segmente werden in Datenreihenfolge angeordnet, beginnend an der positiven X-Achse und gegen den Uhrzeigersinn verlaufend. Jeder Sektorpfad wird geschlossen und mit kombinierter Füllung und Kontur (h B) gezeichnet; Bögen werden in Bézier-Segmente von höchstens 90 Grad aufgeteilt. Prozentbeschriftungen werden auf ganze Prozent gerundet und nur auf Segmenten dargestellt, die mehr als 15 Grad überstreichen. Die Legende reserviert, sofern aktiviert, 80 Punkt Boxbreite auf der rechten Seite und rendert eine 8-Punkt-Farbfläche je Eintrag bei einer Zeilenhöhe von 12 Punkt. Der Radius ist die Hälfte des kleineren Werts aus verbleibender Breite und Boxhöhe, abzüglich eines Rands von 10 Punkt.

ChartBox ist ein unveränderliches Rechteck in PDF-Benutzereinheiten (Punkt) mit Ursprung unten links. ChartBox::fromUserSpace() konvertiert ein Rechteck mit Ursprung oben links, indem es gegen die übergebene Seitenhöhe gespiegelt wird. inset() gibt eine neue, kleinere Box zurück; right() und top() sind Zugriffsmethoden. ChartColor ist eigenständig und hängt nicht von den Farbklassen von Core ab. Seine Palette mit 12 Einträgen weist Serien- und Segmentfarben zu, wenn der Aufrufer keine liefert.

Ein Chart-Typ oder ein Feature erhält Verifiziert nur dann, wenn eine pro/tests/**-Fixture ihn ausübt. Kein externer Standard regelt Charts, daher ist der Nachweis eine Verhaltensabdeckung auf Unit-Ebene.

Chart-Typ / FeatureStatusNachweis (Testpfad)KonfidenzHinweise
Balkendiagramm — Rendern, Achsen, Balkenrechtecke, Abstandsbegrenzung, leere/reine Nulldaten, K/M-WerteformatierungVerifiziertpro/tests/Unit/Chart/BarChartTest.php; BarChartArithmeticCoverageTest.php; BarChartBoundaryCoverageTest.phphochGrafikzustands-Umschließung, Achsenlinien, Balkenhöhenverhältnisse, Anzahl der Skalenmarkierungen und Formatierungsgrenzen abgesichert.
Liniendiagramm — Einzel- und Mehrfachserien, Linienpfad, Achsen, Punkte, Raster, EinzelpunktVerifiziertpro/tests/Unit/Chart/LineChartTest.php; LineChartCoverageTest.php; LineChartArithmeticCoverageTest.php; LineChartTypeCastCoverageTest.phphochMehrfachserien, Einzelpunkt ohne Linie, leere Serien, Raster- und Punktpfade abgedeckt.
Kreisdiagramm — Sektoren, Bézier-Segmentierung, Prozente, Legende, Summe null/negativVerifiziertpro/tests/Unit/Chart/PieChartTest.php; PieChartArithmeticCoverageTest.php; PieChartBoundaryCoverageTest.phphochSektorpfade, Segmentanzahl je Überstreichung, die 15-Grad-Beschriftungsschwelle, Legendengeometrie und Leerstring-Verhalten abgedeckt.
ChartBox — Koordinatenkonvertierung (Benutzerraum zu PDF), Seite oben/unten, Nullabmessungen, InsetVerifiziertpro/tests/Unit/Chart/ChartBoxTest.phphochKonvertierung von Ursprung oben links zu unten links an Seitenoberkante, -unterkante und Nullabmessungsrändern.
ChartColor — RGB-Skalierung, Hex-Parsing, Palette, Kontur-/FülloperatorenVerifiziertpro/tests/Unit/Chart/ChartColorTest.phphochSkalierung von 0–255 auf 0–1, Hex mit #-Präfix und bloßes Hex, gemischte Groß-/Kleinschreibung, Paletten-Umlauf nach 12 Einträgen.
Renderer-übergreifende RegressionshärtungVerifiziertpro/tests/Unit/Chart/ChartCoverageTest.phphochGemeinsame Regressions-Suite über die drei Renderer plus Werteformatierungs-Arithmetik.
Chart-Typen jenseits von Balken/Linie/Kreis (Fläche, Streuung, gestapelt, Ring usw.)Nicht unterstützthochKein Renderer wird ausgeliefert. Die Moduloberfläche ist genau Balken, Linie, Kreis. Ehrlich gesagt: dies ist nicht „jeder Chart-Typ“.

Ehrliche Zählung: Verifiziert 6 Zeilen, Behauptet 0, Nicht unterstützt 1 (jeder Chart-Typ außer Balken, Linie, Kreis).

  • Kein Renderer löst bei Daten eine Ausnahme aus. Degenerierte Eingaben verschlechtern sich zu einer leeren Zeichenkette: leere Balken- oder Liniendaten, eine leere Serienliste und eine Kreissumme von null oder darunter liefern allesamt '' zurück.
  • Eine Linienserie mit weniger als zwei Punkten zeichnet keinen Pfad und keine Marker; Achsen und Beschriftungen werden dennoch dargestellt.
  • Negative Balkenwerte werden nicht abgelehnt; das Balkenrechteck reicht unter die X-Achse.
  • Beschriftungs- und Werteanzahlen werden nicht gegeneinander validiert. Der Aufrufer liefert Listen gleicher Länge.
  • Eine ChartBox mit null oder negativen Abmessungen wird akzeptiert und erzeugt degenerierte Ausgabe; Aufrufer müssen die Box dimensionieren.
  • Renderer clippen nicht. Ein übergroßes Chart, seine Kategoriebeschriftungen unterhalb des Plots oder eine lange Legende können den vorgesehenen Seitenbereich überlaufen.
  • Eine Seite ohne einen Font unter dem Chart-Font-Ressourcennamen hinterlässt Text-Operatoren, die auf eine undefinierte Ressource verweisen; das Viewer-Verhalten ist dann undefiniert.
  • ChartColor::hex() führt keine Validierung durch; bei Eingaben mit weniger als sechs Ziffern werden fehlende Komponenten als Null decodiert. ChartColor::palette() scheitert bei negativem Index mit TypeError, da PHPs negativer Modulo keinen Palettenschlüssel auflöst.
  • Das Modul führt keine Kryptografie durch; der FIPS-Modus hat kein chart-spezifisches Verhalten.

Das Chart-Modul gibt PDF-Content-Stream-Operatoren aus. Kein externer Chart-, Symbologie- oder Kryptografiestandard regelt seine Ausgabe, daher ist die einzige Konformitätsfläche der ausgegebene Operator-Stream.

AussageStandardKlausel
Ausgegebene Grafiken folgen dem Content-Stream-Operatormodell; die Ausgabe ist in einem gespeicherten und wiederhergestellten Grafikzustand verschachtelt.ISO 32000-2§8.1
Balken, Linien, Sektoren und Marker sind Pfadobjekte: die Konstruktion beginnt mit m oder re und endet mit einem Pfadmaloperator.ISO 32000-2§8.5.2
Beschriftungen werden als Textobjekte dargestellt: die Position wird nach BT festgelegt, und Glyphen werden mit dem Textausgabeoperator Tj gezeichnet.ISO 32000-2§9.2.2, §9.4.3

Alle Klauseln sind paraphrasiert; diese Seite gibt keinen normativen Text wieder. Dies sind Fähigkeitsaussagen, keine Zertifizierungen; NextPDF hält keine Zertifizierung und gewährt keine. Die korrekte Darstellung des Streams hängt zudem davon ab, dass das umgebende Dokument wohlgeformt ist, was in der Verantwortung des Dokumenterstellers liegt.

  • Alle fünf Klassen tragen @since 1.9.0 und sind in nextpdf/pro 3.1.0 aktuell.
  • Das Modul ist eigenständig: Renderer hängen nur von ChartBox und ChartColor ab, ohne Core-Kopplung.
  • Deterministische Ausgabe hält Dokumente mit Charts reproduzierbar, diff-stabil und sicher zum Signieren oder Archivieren.
  • Registrieren Sie einen Font unter dem Chart-Font-Ressourcennamen einmal pro Seite, die Charts enthält.
  • Verwenden Sie einen konfigurierten Renderer beliebig über mehrere Boxen hinweg wieder; render() führt keine Zustandsänderung durch.
  • Testnachweise liegen unter pro/tests/Unit/Chart/; die Support-Matrix verankert jede Verifiziert-Zeile mit ihrer Suite.

Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismustabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.