HTML-Tabelle mit NextPDF Connect rendern
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Rendern Sie strukturierte Tabellendaten aus einem HTML-Tabellen-String. add_table bereinigt die Eingabe vor dem Layout anhand einer strikten DOMDocument-Allowlist, sodass die Ausgabe unabhängig davon konsistent bleibt, wie das Quell-Markup geschrieben ist. Verwendet werden die Werkzeuge create_pdf, add_table und output_pdf — alle Core. Die Tabelle wird in einem row/column-Raster angeordnet (CSS Tables 3 §3.1).
Installation
Abschnitt betitelt „Installation“composer require nextpdf/serverBinden Sie einen Transport. Die Eingabe muss eine <table>-Wurzel mit <tr>-Zeilen und <th>-/<td>-Zellen enthalten.
Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“add_table erzwingt eine feste Element-Allowlist (table, thead, tbody, tfoot, tr, th, td, caption, b, i, u, strong, em, br, p, span). Alle Attribute werden entfernt — von jedem Element: style, class, width, colspan, rowspan, id sowie alle übrigen Attribute. Jedes Tag außerhalb der Allowlist wird durch seinen Textinhalt ersetzt. Zellentext wird mit dem aktiven Schriftzustand des Dokuments gerendert, den Sie mit set_font vor add_table setzen. Der Text wird durch textanzeigende Operatoren in Content-Stream-Reihenfolge ausgegeben (ISO 32000-2 §9.4). Die Layout-Engine entscheidet über die Spaltenbreiten, nicht Inline-CSS.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“| Werkzeug | Rolle | Risikostufe |
|---|---|---|
create_pdf | Die Sitzung öffnen | Safe |
set_font | Die Schriftart für den Zellentext setzen (optional, vor add_table) | Caution |
add_table | Die Tabelle bereinigen und anordnen | Caution |
output_pdf | Das PDF rendern und zurückgeben | Approval Required / Review (base64) |
Der Werkzeugkatalog ist maßgeblich. Welche Werkzeuge Ihnen zur Verfügung stehen, hängt von der installierten Stufe ab.
Codebeispiel — Schnellstart
Abschnitt betitelt „Codebeispiel — Schnellstart“create_pdf(A4 Hochformat, Titel) →document_id.add_tablemit einem vollständigen<table>...</table>-String (Kopfzeile und Datenzeilen).output_pdf→ base64 oder, mit einemfile_path, kontrolliertes Schreiben in eine Datei.
Der Cursor rückt unter die zuletzt gerenderte Zeile vor und lässt Platz für anschließenden Inhalt.
Codebeispiel — Produktion
Abschnitt betitelt „Codebeispiel — Produktion“Validieren Sie das HTML, bevor Sie es senden. Setzen Sie die Zellenschrift mit set_font, um deterministische Typografie zu erhalten — wenn Sie sich auf einen Standard verlassen, bleibt die Ausgabeschrift implementierungsabhängig. Um zu steuern, welche Werkzeuge der Host aufrufen darf, schränken Sie die Registry über die Sicherheitsrichtlinie ein.
Randfälle & Stolpersteine
Abschnitt betitelt „Randfälle & Stolpersteine“- Leeres oder Nicht-Tabellen-HTML. Eingaben ohne
<table>geben einen Fehler “no-renderable-table” zurück. - Fehlerhaftes Markup. Unausgeglichene Tags führen zu einem Parse-Fehler; validieren Sie daher zuerst die Struktur.
- Tabelle breiter als die Seite. Reduzieren Sie die Anzahl der Spalten, kürzen Sie den Inhalt oder wechseln Sie ins Querformat.
- Überlauf. Eine hohe Tabelle wird auf einer neuen Seite fortgesetzt. Prüfen Sie
position.pagein der Antwort oder rufen Sieadd_pagevorab auf.
Performance
Abschnitt betitelt „Performance“Eine kleine Tabelle wird innerhalb des Budgets gerendert; die Ausgabe umfasst einige KB. Das Profil ist structural. Die Bereinigung läuft in einem einzigen Durchgang über das geparste DOM.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“Das Entfernen der Attribute erfolgt bedingungslos und kann nicht umgangen werden. Es schützt vor Style- und Skript-Injection im Zellen-Markup. Kein Inline-CSS, kein Event-Handler und keine javascript:-URL bleibt erhalten. Die Allowlist ist die Vertrauensgrenze; behandeln Sie die gerenderte Ausgabe daher nicht als originalgetreue Wiedergabe beliebiger Quell-Stilangaben.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Spezifikation | Klausel | reference_id |
|---|---|---|---|
| Tabellen werden als row/column-Zellenraster angeordnet. | CSS Tables 3 | §3.1 | |
| Text wird durch Textoperatoren in Stream-Reihenfolge angezeigt. | ISO 32000-2 | §9.4 |
Kommerzieller Kontext
Abschnitt betitelt „Kommerzieller Kontext“Nicht zutreffend — jedes Werkzeug hier ist Core.
Auszug aus der CSS-Unterstützungsmatrix (nur Verified)
Abschnitt betitelt „Auszug aus der CSS-Unterstützungsmatrix (nur Verified)“add_table führt keine allgemeine CSS-Engine aus. Das einzige “CSS”-Verhalten ist das feste Tabellenraster-Modell: Zeilen und Spalten stammen aus der Tabellenstruktur, und die Layout-Engine legt die Breiten fest. Inline-Stilangaben werden bewusst nicht unterstützt, da Attribute entfernt werden. Für die CSS-Abdeckung auf Engine-Ebene (nicht Connect) siehe die CSS-Unterstützungsmatrix des Projekts.
Einschränkung des Single-Pass-Streamings
Abschnitt betitelt „Einschränkung des Single-Pass-Streamings“add_table parst das übergebene Markup einmal in ein DOM und ordnet es in einem einzigen Durchgang an. Es gibt keinen Reflow auf Basis externer Stylesheets. Eine Tabelle, die die Seite überläuft, wird auf der nächsten Seite fortgesetzt, statt nachträglich neu umgebrochen zu werden.
Speicherbudget für große Tabellen
Abschnitt betitelt „Speicherbudget für große Tabellen“Sehr große Tabellen halten das geparste DOM und die angeordneten Zellen während des gesamten Aufrufs im Speicher. Teilen Sie große Datensätze auf mehrere add_table-Aufrufe auf, um innerhalb des Spitzenspeicherbudgets zu bleiben.
Transport-Verfügbarkeit
Abschnitt betitelt „Transport-Verfügbarkeit“| Transport | Verfügbar | Hinweise |
|---|---|---|
| MCP (stdio) | Ja | Großes HTML vergrößert den stdio-Frame. |
| REST | Ja | Senden Sie das HTML im Anfragekörper. |
| gRPC | Ja | Unär; Nachrichtengrößenlimits gelten. |
HITL-Risikostufe
Abschnitt betitelt „HITL-Risikostufe“create_pdf ist Safe; set_font und add_table sind Caution; output_pdf ist Approval Required, im base64-Modus auf Review herabgestuft. Die Dateiausgabe bleibt Approval Required — siehe output-approval.
JSON-Envelope des Bestätigungs-Gates
Abschnitt betitelt „JSON-Envelope des Bestätigungs-Gates“Base64-Ausgabe:
{ "allowed": true }Die Dateiausgabe gibt den Challenge-Envelope zurück, der in output-approval dokumentiert ist.