Zum Inhalt springen

Gotenberg-Entwicklerhandbuch

Das Gotenberg-Paket delegiert die Konvertierung an einen externen Dienst. Anwendungscode sollte die Dienstgrenze ausdrücklich abbilden: Eingaben validieren, einen Payload aufbauen, die Anfrage senden, das Ergebnis parsen und Dienstfehler behandeln.

Verwenden Sie dieses Handbuch, wenn Sie Workflows für die Office-zu-PDF-Konvertierung, Upload-Endpunkte, Dienst-Health-Checks oder Transport-Policys rund um nextpdf/gotenberg entwickeln.

SchichtVerantwortlichZuständigkeitNicht hierher legen
Upload- oder DokumentquelleAnwendungAufrufer autorisieren, Quelle validieren, Konvertierungs-Policy auswählen.Entscheidungen zur Dienst-URL oder zum Transport-Pinning.
Formaterkennungnextpdf/gotenbergSichere Erweiterungen auf OfficeFormat abbilden.Vertrauen in MIME-Angaben ohne Anwendungsvalidierung.
Brückenextpdf/gotenbergMultipart-Anfrage aufbauen, Gotenberg aufrufen, PDF-Antwort parsen.Domänenabfragen oder Speicher-Policy.
Gotenberg-DienstDeploymentOffice-Dokumente in PDF konvertieren.Autorisierung der PHP-Anwendung.
Kern-Enginenextpdf/nextpdfOptional die konvertierten PDF-Daten importieren oder zusammenführen.Office-Konvertierung.
PhaseVerhaltenEntwickleraktion
Erstellung der KonfigurationAPI-URL, Timeout, maximale Größe, API-Schlüssel und Pins werden geladen.Halten Sie Dienst-URL und Token aus dem Quellcode heraus.
EingabevalidierungDateipfad, Dateigröße, Dateiname, Erweiterung und URL-Sicherheit werden geprüft.Nicht unterstützte Eingabe vor dem Dispatch ablehnen.
Aufbau des PayloadsGotenbergConvertPayload baut Multipart-Formulardaten auf.Bewahren Sie den ursprünglichen Dateinamen nur auf, wenn dies sicher ist.
DienstanfrageDie Brücke sendet die Anfrage an /forms/libreoffice/convert.Timeout und Transport-Policy konfigurieren.
Parsen des ErgebnissesGotenbergResponseParser::parse() liefert PDF-Bytes und Metadaten.Behandeln Sie Nicht-PDF- oder Fehlerantworten als Konvertierungsfehler.
PfadZweck
app/Pdf/Conversion/*Anwendungs-Wrapper um GotenbergBridge.
app/Pdf/Uploads/*Upload-Validierung, Speicherung und Dateinamen-Policy.
app/Pdf/ConversionPolicy/*Policy für Größe, Format und Dienstauswahl.
tests/Pdf/Conversion/*Tests für Format, Datei, Dienst und Transport.

Halten Sie die Dateivalidierung von der Konvertierung getrennt. Ein Konvertierungsdienst sollte bereits autorisierte Eingaben erhalten und sich als zusätzliche Verteidigungsebene dennoch auf die Paketvalidierung stützen.

<?php
use NextPDF\Gotenberg\GotenbergBridge;
final readonly class OfficeConversionService
{
public function __construct(
private GotenbergBridge $bridge,
) {}
public function convertUploadedFile(string $safePath): string
{
$result = $this->bridge->convertFile($safePath);
if (!$result->isValid()) {
throw new RuntimeException('The conversion service did not return a valid PDF.');
}
return $result->pdfData;
}
}
MusterAPIAnwendung, wennEinschränkung
Dateipfad konvertierenGotenbergBridge::convertFile()Das Dokument ist bereits auf der Festplatte gespeichert.Der Pfad muss lesbar und durch die Policy freigegeben sein.
In-Memory-Bytes konvertierenGotenbergBridge::convertString()Die Anwendung hat bereits Bytes aus einem Upload oder Objektspeicher.Der Dateiname steuert weiterhin die Formaterkennung.
Payload direkt aufbauenGotenbergConvertPayloadTests oder eigener Transportcode benötigen Multipart-Bytes.Halten Sie die Boundary-Generierung außerhalb der Benutzereingabe.
Antwort direkt parsenGotenbergResponseParser::parse()Ein eigener HTTP-Aufruf soll dennoch das Parsen aus dem Paket nutzen.Das erwartete OfficeFormat muss übergeben werden.

GotenbergBridge::isAvailable() ist ein Readiness-Signal. Es sollte nicht der einzige Laufzeitschutz sein. Ein Dienst kann bei der Readiness-Prüfung verfügbar sein und dennoch bei der nächsten Konvertierung fehlschlagen.

PrüfungZweckBetriebshinweis
Gültigkeit der KonfigurationFehlende API-URL erkennen.Beim App-Start oder bei Deployment-Prüfungen ausführen.
/health-VerfügbarkeitErreichbaren Dienst erkennen.Für Readiness-Dashboards verwenden.
Konvertierung eines kleinen FixturesDefektes LibreOffice oder eine Dienstregression erkennen.In geplanten Smoke-Tests ausführen, nicht bei jeder Anfrage.
Timeout-ÜberwachungLangsames Dienstverhalten erkennen.Nach Format und Dateigröße erfassen.
ErweiterungspunktVerwende es fürEinschränkung
PSR-18-ClientInterfaceEigenes Verhalten des HTTP-Clients.Muss der PSR-18-Semantik für response/exception folgen.
PSR-17-FactoriesErzeugung von Request und Stream.Für den Aufbau der Brücke erforderlich.
HtmlSecurityPolicyInterfacePolicy auf Parse-Ebene für HTML-Eingaben.Ergänzt die Gotenberg-Sicherheits-Policy.
ResponseFactoryInterfaceAntwortkonstruktion für den gepinnten cURL-Transport.Nur erforderlich, wenn der Transportpfad des Pakets genutzt wird.
GotenbergSecurityPolicyValidierung von URL, Dateigröße, Dateiname und Pin.Halten Sie die Autorisierung der Anwendung außerhalb dieser Schicht.
  1. Beginnen Sie in Tests mit convertString(), damit Fixtures explizit sind.
  2. Fügen Sie convertFile() erst hinzu, nachdem die Dateisystempfade kontrolliert sind.
  3. Halten Sie die maximale Dateigröße unter den Limits von Dienst und Infrastruktur.
  4. Verwenden Sie isAvailable() für Readiness-Signale, nicht als Ersatz für die Fehlerbehandlung.
  5. Protokollieren Sie Dateiname, Format, Größe, Status und Dauer. Protokollieren Sie keine Dokument-Bytes.
  6. Fügen Sie Tests für Timeout und Fehlermodi hinzu, bevor Sie Upload-Endpunkte freigeben.
FehlerWo er behandelt werden sollteEmpfohlene Reaktion
Nicht unterstützte ErweiterungFormaterkennung.Vor dem Dienst-Dispatch ablehnen.
Unsicherer DateinameSicherheits-Policy.Ablehnen und die Namenskonvention für Uploads normalisieren.
Zu große DateiUpload-Policy und Paketvalidierung.Ablehnen, bevor große Payloads gelesen oder gesendet werden.
Gotenberg nicht verfügbarBrückengrenze.Falls angebracht, einen wiederholbaren Anwendungsfehler zurückgeben.
Nicht-PDF-AntwortAntwort-Parser.Als Konvertierungsfehler behandeln und den Dienststatus erfassen.
Fehler bei der Pin- oder URL-ValidierungTransport-Policy.Fail closed und Operatoren alarmieren.
AnliegenVoreinstellungWann überschreiben
Timeout30 Sekunden.Erhöhen Sie ihn erst, nachdem Sie die reale Dienstlatenz gemessen haben.
Maximale Dateigröße52,428,800 Bytes.Für öffentliche oder mandantenfähige Endpunkte niedriger ansetzen.
API-SchlüsselLeer.Für private Gotenberg-Deployments setzen.
Unterstützte Formatedocx, xlsx, pptx, odt, ods, odp.Fügen Sie Formate nur hinzu, wenn OfficeFormat und der Parser sie unterstützen.
Pin-SetsLeer.Fügen Sie Pins mit Backup-Pins und einem Rotationsverfahren hinzu.
  • Format-Tests decken unterstützte und nicht unterstützte Erweiterungen ab.
  • Datei-Tests decken fehlende, nicht lesbare, zu große und unsichere Dateinamen ab.
  • Dienst-Tests decken Nicht-2xx-Antworten, ungültige Antwort-Bodys und Transport-Exceptions ab.
  • Sicherheits-Tests decken private oder ungültige Dienst-URLs ab, wenn die Policy sie verbietet.
  • Timeout-Tests stellen sicher, dass der konfigurierte Timeout an den Transport übergeben wird.
  • Fixture-Tests halten Beispieldokumente klein und nicht sensibel.