Zum Inhalt springen
getnextpdf.com

Migration von FPDF zu NextPDF

Diese Anleitung hilft Ihnen, eine FPDF-basierte Codebasis zu NextPDF Core zu bewegen. FPDF ist eine der am weitesten verbreiteten Legacy-PHP- Portable-Document-Format-(PDF-)Bibliotheken, und ihre Zeichenfläche — AddPage, SetFont, Cell, MultiCell, Write, Text, Image, Output, gesteuert durch einen manuellen x/y-Cursor — bildet sauber auf NextPDFs eigene Cell-/Text-API ab, weil NextPDFs Low-Level-Zeichenmethoden derselben FPDF/TCPDF-Abstammung folgen. NextPDF ist jedoch kein Drop-in-FPDF-Klon: Es ist eine moderne PDF-2.0-Engine mit strikten Typen, Schrift-Subsetting, Signieren, PDF/A und Barrierefreiheit (Tagged PDF). Die zwei echten Verschiebungen sind das Einheitenmodell (NextPDF arbeitet in PDF-Punkten; FPDF nutzt standardmäßig Millimeter) und die Ausgabeverben (ein typisiertes OutputDestination-Enum statt FPDFs 'I'-/'D'-/'F'-/'S'-Zeichen).

Es gibt keinen FPDF-Klassen-Shim in Core. Schreiben Sie jede Aufrufstelle mit der Verb-Zuordnung um. Wenn Sie stattdessen die kleinste anfängliche Änderung für eine TCPDF-6.x-Codebasis wollen, siehe den TCPDF-Kompatibilitätsadapter, der einen nahezu quellkompatiblen Drop-in-Pfad ausliefert; FPDF hat keinen solchen Adapter.

Terminal-Fenster
composer require nextpdf/core:^3

Behalten Sie setasign/fpdf (oder Ihr fpdf/fpdf) während der Migration installiert. Entfernen Sie es nach der finalen Umstellung (siehe sichere Migrationsabfolge).

FPDF und NextPDF teilen dasselbe mentale Modell: ein Dokument aus Seiten, einen Cursor (die aktuelle x/y-Position) und Verben, die an diesem Cursor zeichnen oder ihn voranschieben. SetXY, Cell, Ln und MultiCell lesen und mutieren den Cursor in beiden Bibliotheken, sodass sich der meiste prozedurale FPDF-Code Zeile für Zeile übersetzt.

Die Unterschiede sind bewusst, nicht zufällig:

  • Einheiten. FPDFs Konstruktor (new FPDF($orientation, $unit, $size)) nutzt standardmäßig Millimeter. NextPDF arbeitet in PDF-Punkten (1 pt = 1/72 in, ISO 32000-2 §7). Es gibt keinen dokumentweiten Einheiten-Regler — rechnen Sie mm einmal in Punkte um (pt = mm * 72 / 25.4).
  • Die y-Richtung bleibt für Sie gleich. Wie FPDF setzen NextPDFs Benutzerkoordinaten y = 0 an den oberen Seitenrand und erhöhen nach unten, sodass die Cursor-Arithmetik direkt portiert. NextPDF konvertiert intern in den PDF-nativen Ursprung unten links.
  • Die Konstruktion ist explizit. FPDF faltet Orientation, Einheit und Größe in den Konstruktor; NextPDF nimmt ein unveränderliches NextPDF\Core\Config-Value- Object (Seitengröße, Ränder, Schriftverzeichnis) und ein explizites addPage().
  • Immer Unicode, immer Subset. FPDFs Core-Build ist Latin-1 und benötigt die tFPDF-/UTF-8-Variante für Unicode. NextPDF ist durchgängig UTF-8 und bettet Schriften immer als Subset-Programme ein (ISO 32000-2 §9). FPDFs AddFont-/Schriftmetrik-Dateien haben keine Entsprechung; registrieren Sie ein TrueType-/OpenType-Schriftverzeichnis und wählen Sie die Familie per Name.

Die unten verwendeten Core-Einstiegspunkte sind Document::createStandalone(), Document::addPage(), Document::setFont(), Document::cell(), Document::multiCell(), Document::text(), Document::write(), Document::ln(), Document::image(), die Cursor-Accessoren (setXY/setX/ setY/getX/getY), Document::output(?string, OutputDestination), Document::save(string $path): void, Document::getPdfData(): string und das NextPDF\Core\Config-Value-Object. Die vollständige Referenz für diese Core-Zeichen-, Text- und Ausgabemethoden liegt in den Core-Modulen und der Referenzübersicht, automatisch aus PHPDoc generiert. Das Html-Modul ist begleitende Lektüre für HTML-zu-PDF, nicht die Referenz für die Verben auf dieser Seite.

FPDFs öffentliche Methodennamen sind langjährig und wohlbekannt. Die NextPDF-Spalte unten ist gegen Core-Quellsignaturen bestätigt (siehe Nachweis / Nachverfolgbarkeit).

FPDFNextPDFHinweise
new FPDF($orient, $unit, $size)Document::createStandalone($config)Orientation/Einheit/Größe-Konstruktorargumente werden zu einem NextPDF\Core\Config (pageSize, margins, fontsDirectory). Kein $unit — arbeiten Sie in Punkten. Standard-createStandalone()-Seite ist A4-Hochformat.
$pdf->AddPage($orient, $size)$doc->addPage($size, $orientation)Direkte Zuordnung. $size ist ein PageSize-Value-Object; $orientation ist das Orientation-Enum (Portrait/Landscape).
$pdf->SetFont($family, $style, $size)$doc->setFont($family, $style, $size)Direkte Zuordnung. $style verwendet dieselben ''/'B'/'I'/'BI'-(plus 'U'-Unterstreichung-)Codes.
$pdf->Cell($w, $h, $txt, $border, $ln, $align, $fill)$doc->cell($w, $h, $txt, $border, $newLine, $align, $fill)Direkte Zuordnung. $align ist das Alignment-Enum (Left/Center/Right/Justify); $border akzeptiert bool oder eine 'LTRB'-Zeichenkette; $ln wird zum bool $newLine.
$pdf->MultiCell($w, $h, $txt, $border, $align, $fill)$doc->multiCell($w, $h, $txt, $border, $align)Bricht Wörter anhand tatsächlicher Schriftmetriken um. Kein $fill-Argument; malen Sie zuerst ein gefülltes rect(), wenn Sie einen Hintergrund brauchen.
$pdf->Write($h, $txt, $link)$doc->write($h, $txt, $link)Fließtext vom Cursor aus; $link hängt eine URL-Link-Annotation an.
$pdf->Text($x, $y, $txt)$doc->text($x, $y, $txt)Text mit absoluter Position. Direkte Zuordnung.
$pdf->Ln($h)$doc->ln($h)Zeilenumbruch zum linken Rand; 0 = Standard-Zeilenhöhe.
$pdf->Image($file, $x, $y, $w, $h)$doc->image($file, $x, $y, $w, $h)Direkte Zuordnung; $x/$y/$w/$h sind nullable (null = aktueller Cursor / intrinsische Größe).
$pdf->SetXY($x, $y) / SetX / SetY$doc->setXY($x, $y) / setX / setYDirekte Zuordnung. getX()/getY() lesen den Cursor.
$pdf->SetMargins($l, $t, $r)$doc->setMargins(new Margin($t, $r, $bottom, $l))Ein Margin-Value-Object; die Konstruktorreihenfolge ist (top, right, bottom, left)nicht FPDFs (left, top, right). FPDFs SetMargins hat kein bottom-Argument (sein unterer Rand kommt aus SetAutoPageBreak($auto, $margin)), also wählen Sie $bottom selbst — üblicherweise gleich dem oberen Rand, oder übergeben Sie den Auto-Page-Break-Rand.
$pdf->SetAutoPageBreak($auto, $margin)$doc->setAutoPageBreak($auto, $margin)Direkte Zuordnung.
$pdf->SetDrawColor / SetFillColor / SetTextColor$doc->setDrawColor / setFillColor / setTextColorRGB (r, g, b), oder ein einzelner Wert für Graustufen.
$pdf->Line / Rect / SetLineWidth$doc->line / rect / setLineWidthDirekte Zuordnung. rect() nimmt eine Stilzeichenkette ('S'/'F'/'DF').
$pdf->SetTitle/SetAuthor/SetSubject/SetKeywords/SetCreator$doc->setTitle/setAuthor/setSubject/setKeywords/setCreatorDirekte Zuordnung. Landet im ISO-32000-2-§14-Informations-Dictionary / Extensible Metadata Platform (XMP).
$pdf->Output($dest, $name)$doc->output($name, OutputDestination::…)FPDF-Zielzeichen (I/D/F/S) bilden auf das OutputDestination-Enum ab; beachten Sie, dass die Argumentreihenfolge sich vertauscht (Name zuerst in NextPDF).
$pdf->Output('S')$doc->getPdfData()Gibt die PDF-Bytes zurück.
$pdf->Output('F', $path)$doc->save($path)Schreibt in einen Dateipfad.
$pdf->GetStringWidth($s)(keine öffentliche Methode)Die Zeichenkettenbreite wird intern während des Umbruchs in cell()/multiCell() berechnet; es gibt kein öffentliches Verb zur Messung pro Zeichenkette. Steuern Sie den Umbruch über multiCell(), statt von Hand zu messen.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;
use NextPDF\Core\Document;
// FPDF:
// $pdf = new FPDF(); // mm, A4 portrait
// $pdf->AddPage();
// $pdf->SetFont('Arial', 'B', 16);
// $pdf->Cell(40, 10, 'Invoice');
// $pdf->Output('F', 'out.pdf');
// NextPDF — points, default page is A4 portrait:
$doc = Document::createStandalone();
$doc->setTitle('Invoice');
$doc->addPage();
$doc->setFont('Helvetica', 'B', 16.0);
$doc->cell(113.4, 28.3, 'Invoice', false, true, Alignment::Left); // ~40mm x ~10mm in points
$doc->save(__DIR__ . '/out.pdf');
echo "Wrote out.pdf\n";

Dieses Beispiel deckt sich mit examples/04-text-and-fonts.php. Es verwendet eine explizite Seitengröße, Ränder, ein registriertes Schriftverzeichnis und das cursorgesteuerte Cell-Modell, das eine FPDF-Codebasis bereits verwendet.

<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;
use NextPDF\Contracts\OutputDestination;
use NextPDF\Core\Config;
use NextPDF\Core\Document;
use NextPDF\ValueObjects\Margin;
use NextPDF\ValueObjects\PageSize;
// Equivalent of: new FPDF('P', 'mm', 'A4') + SetMargins(20, 16, 20)
// i.e. FPDF left=20mm, top=16mm, right=20mm. FPDF SetMargins has no bottom
// argument, so we pick bottom = top = 16mm. Convert each mm to points
// (pt = mm * 72 / 25.4): 16mm = 45.354pt, 20mm = 56.693pt.
// Margin constructor order is (top, right, bottom, left) — NOT FPDF's (L, T, R).
$config = new Config(
pageSize: new PageSize(595.276, 841.890, 'A4'),
margins: new Margin(45.354, 56.693, 45.354, 56.693), // top,right,bottom,left in points
fontsDirectory: __DIR__ . '/fonts',
);
$doc = Document::createStandalone($config);
$doc->setTitle('Quarterly Report');
$doc->setAuthor('Finance');
$doc->addPage();
// SetFont + Cell, the FPDF way — but in points and with a real Unicode font.
$doc->setFont('DejaVuSans', 'B', 18.0);
$doc->setTextColor(30, 58, 138);
$doc->cell(0, 24.0, 'Quarterly Report', false, true, Alignment::Left);
$doc->setFont('DejaVuSans', '', 11.0);
$doc->setTextColor(0, 0, 0);
$doc->multiCell(0, 16.0, "Body text wraps on real font metrics. Unicode is "
. "native, so accented and non-Latin characters need no tFPDF variant — "
. "register the family in the fonts directory and select it by name.");
// Equivalent of $pdf->Output('D', 'report.pdf'):
$doc->output('report.pdf', OutputDestination::Download);
  • Einheiten. Jede numerische Koordinate, Breite, Höhe und jeder Rand, den Sie aus FPDF kopieren, ist standardmäßig in Millimetern. Multiplizieren Sie einmal, während der Portierung, mit 72 / 25.4, um Punkte zu erhalten. Das Mischen der beiden dimensioniert stillschweigend alles falsch.
  • Output()-Argumentreihenfolge. FPDF ist Output($dest, $name); NextPDF ist output($name, $dest). Das Ziel ist das OutputDestination-Enum, kein Zeichen. Bevorzugen Sie save() / getPdfData() für Datei- / Zeichenketten-Ausgabe.
  • SetMargins-Reihenfolge. FPDF ist (left, top, right); das NextPDF-Margin-Value-Object ist (top, right, bottom, left). Ordnen Sie um, transkribieren Sie nicht.
  • Schriften. FPDFs AddFont() + .php-Metrikdateien haben keine Entsprechung. Legen Sie die TrueType-/OpenType-Datei in das Schriftverzeichnis und rufen Sie setFont() mit dem Familiennamen auf. Core-Base14-Namen (Helvetica, Times, Courier) lösen sich ohne Datei auf; unter PDF/A oder Tagged PDF werden sie automatisch durch eine einbettbare Schrift ersetzt.
  • GetStringWidth. Es gibt keine öffentliche Methode zur Zeichenkettenmessung. Wenn Ihr FPDF-Code Zeichenketten misst, um Spalten von Hand zu layouten, stellen Sie diesen Block auf multiCell() um (das anhand von Metriken umbricht) oder auf Aufrufe von cell() mit fester Breite.

NextPDF emittiert Inhalt in einem einzigen Streaming-Durchgang (Architecture Decision Record ADR-001); der Spitzenspeicher folgt der Dokumentgröße, nicht einem im Speicher gehaltenen Objektbaum. Das Budget für das Beispiel dieser Anleitung ist wall_ms: 2000, peak_mb: 128. Verteilen Sie bei langen Dokumenten den Inhalt über mehrere addPage()-Aufrufe — dieselbe Schleifenform, die ein FPDF-Bericht bereits verwendet.

  • Metadaten. SetTitle()/SetAuthor() bilden auf typisierte Setter ab, die das ISO-32000-2-§14-Informations-Dictionary / XMP schreiben. Speichern Sie dort niemals Geheimnisse.
  • Bildpfade. image() weist Stream-Wrapper-Schemata und eingebettete NUL-Bytes vor dem Lesen zurück. Übergeben Sie anwendungskontrollierte Pfade.
  • Kein im Dokument enthaltener Code. NextPDF führt keine im Dokument enthaltenen Skripte aus; nichts in FPDF ändert das.
AussageSpezifikationKlausel
Seitenformat/Orientation bilden auf die Seitenbegrenzungs-Box ab.ISO 32000-2§7
Schriften werden als embedded/subset-Schriftprogramme geschrieben.ISO 32000-2§9
Titel / Metadaten landen im Info-Dictionary / XMP.ISO 32000-2§14
Linien, Rechtecke und Bilder sind Content-Stream-Painting.ISO 32000-2§8

NextPDF erzeugt ISO-32000-2-Inhalt; es behauptet keine visuelle Identität mit FPDF. Prüfen Sie die Ausgabe erneut, wann immer Sie den Renderer wechseln.

Nicht zutreffend. NextPDF Core deckt den hier beschriebenen FPDF-Migrationspfad ab.


Teams, die FPDF (oder tFPDF) für serverseitige, prozedurale PDF-Erzeugung einsetzen. Wenn Ihr Code eine Abfolge von AddPage- / SetFont- / Cell- / MultiCell- / Image- / Output-Aufrufen ist, gesteuert durch SetXY und Ln, deckt die Verb-Zuordnung Ihre gesamte Oberfläche ab.

Im Geltungsbereich: die FPDF-Zeichenverben, das Cursor-Modell, Schriften, Farben, Linien und Rechtecke, Metadaten und Ausgabe. Außerhalb des Geltungsbereichs: FPDFs AddFont-Metrikdatei-Tooling und Drittanbieter-FPDF-Skript-Erweiterungen (Barcodes, Rotation, Lesezeichen) — ordnen Sie diese den entsprechenden NextPDF-Modulen zu (Barcode, Transforms, Navigation), die hier nicht behandelt werden.

Verhaltenskompatibilität, kein Drop-in-Shim: Core stellt keinen FPDF-Klassen-Shim bereit. Schreiben Sie jede Aufrufstelle um. Die Verben fluchten eng, weil NextPDFs Cell-/Text-API die FPDF/TCPDF-Abstammung teilt, aber das Einheitenmodell, die Output-Argumentreihenfolge und die Margin-/Enum-Typen unterscheiden sich — eine Transkription ist also falsch, eine Übersetzung ist richtig.

FPDF-KonstruktNextPDFHinweise
$unit ('mm'-Standard)(keine Entsprechung)Arbeiten Sie in PDF-Punkten. Konvertieren Sie Dimensionen einmal während der Portierung mit pt = mm * 72 / 25.4.
$orientation ('P'/'L')Orientation-Enum auf addPage(), oder PageSize-Breite/-Höhe vertauschenQuerformat = width > height.
$size ('A4', [w,h])Config->pageSize (PageSize-Value-Object)Benannte Formate werden zu expliziten Punktmaßen; PageSize::A4()A0() sowie Letter/Legal-Factories existieren.
SetMargins($l, $t, $r)Config->margins (Margin-VO)Konstruktorreihenfolge (top, right, bottom, left).
AddFont($family, $style, $file)Schriftverzeichnis + setFont() per NameLassen Sie die Metrikdatei weg; legen Sie die TTF/OTF in Config->fontsDirectory.
  • Schriftverzeichnisse. FPDFs Registrierung pro Schrift via AddFont kollabiert zu einem Schriftverzeichnis plus setFont()-Familienabgleich. Beginnen Sie mit Config->fontsDirectory (dem Standardsuchpfad); registrieren Sie weitere Verzeichnisse über FontRegistry::addFontDirectory() oder Document::addFontDirectory(), wenn Schriften an mehr als einem Ort liegen.
  • Immer Unicode. Kein Latin-1-Standard und kein separater tFPDF-Build; UTF-8-Eingabe ist die Norm.
  • Immer Subset. NextPDF subsetzt eingebettete Schriften immer (ISO 32000-2 §9); FPDFs Schrift-Einbettungs-Optionen haben keine Entsprechung und werden nicht benötigt.
  • Glyphen neu baselinen. Schriftabgleich und Fallback sind engine-spezifisch; ein FPDF-Schriftalias benötigt möglicherweise einen exakten Familiennamen. Ersetzungsunterschiede sind zu erwarten, keine Defekte.
  • Einheitenumrechnung (mm → pt) — der häufigste Portierungsfehler; siehe oben.
  • Die Output-Argumentreihenfolge vertauscht sich und das Ziel wird zu einem Enum.
  • Margin / Alignment / Orientation sind typisierte Objekte/Enums, keine Zeichen oder positionellen (l, t, r)-Tripel.
  • Kein öffentliches GetStringWidth — steuern Sie den Umbruch über multiCell().
  • Unabhängige Rasterung — Zeilenumbruch und Seitenumbruch bei dichtem Inhalt können differieren; baselinen Sie visuelle Diffs neu.

Das sind dokumentierte Verhaltensunterschiede, keine Defekte in einer der beiden Engines.

  • FPDF-$unit-Selektor — nicht modelliert (immer Punkte).
  • AddFont() + .php-/.z-Metrikdateien — ersetzt durch ein Schriftverzeichnis.
  • GetStringWidth() — kein öffentliches Verb zur Zeichenkettenmessung.
  • FPDFs 'I'-/'D'-/'F'-/'S'-Zielzeichen — ersetzt durch das OutputDestination-Enum + save()/getPdfData().

Code, der von diesen abhängt, „migriert“ nicht wortwörtlich. Drücken Sie ihn mit den Zeilen oben neu aus.

  1. Fügen Sie nextpdf/core neben FPDF hinzu; behalten Sie FPDF vorerst installiert.
  2. Wählen Sie ein Dokument mit niedrigem Risiko aus. Konvertieren Sie den Konstruktor über die Einheitenzuordnung und portieren Sie dann jedes Verb mit der Verb-Zuordnung. Konvertieren Sie jede mm-Koordinate in Punkte.
  3. Legen Sie die Schriften des Dokuments in Config->fontsDirectory und wählen Sie sie per Familiennamen aus; lassen Sie die AddFont-Aufrufe weg.
  4. Erzeugen Sie beide PDFs für dieselbe Eingabe und vergleichen Sie sie visuell. Unterschiede (Schriftersetzung, Zeilenumbruch) sind bei unabhängigen Engines zu erwarten — akzeptieren Sie sie pro Dokument.
  5. Ersetzen Sie jedes GetStringWidth-basierte Hand-Layout durch multiCell() oder Aufrufe von cell() mit fester Breite.
  6. Wiederholen Sie das pro Dokument, beginnend mit dem niedrigsten Risiko; halten Sie FPDF bis zur letzten Umstellung installiert.
  7. Entfernen Sie FPDF nach der finalen Umstellung aus composer.json.
  • Erstellen Sie vor der Codeänderung Snapshots der FPDF-Ausgabe repräsentativer Dokumente (Golden Inputs; die Bytes werden sich unterscheiden).
  • Prüfen Sie für jedes migrierte Dokument die Abnahme mit Ihrer eigenen Prüfung (visueller Diff + Textextraktion). NextPDFs Cell-/Schriftverhalten wird durch examples/04-text-and-fonts.php sowie die Core-tests/-Font- und -Textausgabe-Suites geübt. Die Migrationsabnahme ist dokumentspezifisch und bleibt in Ihrer Verantwortung.
  • Fügen Sie pro migriertem Dokument einen Regressionstest hinzu.

Jede NextPDF-Verhaltensaussage auf dieser Seite ist durch eine Quellsignatur, ein Beispiel oder einen Architecture Decision Record (ADR) im Repository belegt — oder, für PDF-Formateigenschaften, durch die ISO-32000-2-Klauseln im Front-Matter- citations: und der Konformitätstabelle. FPDF-Verhalten wird nur als „unabhängige Engine — dokumentierte Unterschiede erwarten“ behauptet; diese Seite behauptet keine Parität, die ein Artefakt im Repository nicht belegt.

NextPDF-VerhaltensaussageNachweis im Repository (Pfad)
AddPage bildet auf addPage(?PageSize, Orientation): static ab.src/Core/Concerns/HasPages.php (addPage()).
SetFont($family, $style, $size) bildet auf setFont(string, string, float): static ab; ''/'B'/'I'/'BI'/'U'-Stile.src/Core/Concerns/HasTypography.php (setFont()).
Cell bildet auf cell($w, $h, $txt, $border, $newLine, $align, $fill): static ab.src/Core/Concerns/HasTextOutput.php (cell()).
MultiCell bildet auf multiCell($w, $h, $txt, $border, $align): static ab (metrikbasierter Umbruch).src/Core/Concerns/HasTextOutput.php (multiCell(), wrapText()).
Write/Text/Ln bilden auf write()/text()/ln() ab.src/Core/Concerns/HasTextOutput.php (write(), text(), ln()).
SetXY/SetX/SetY/GetX/GetY bilden direkt ab; SetMargins nimmt ein Margin-VO.src/Core/Concerns/HasPages.php (setXY(), getX(), setMargins()); src/ValueObjects/Margin.php ((top, right, bottom, left)).
Image bildet auf image($file, ?$x, ?$y, ?$w, ?$h): static ab; weist Schema-/NUL-Pfade zurück.src/Core/Concerns/HasImages.php (image(), assertImageFilePath()).
Line/Rect/SetLineWidth/SetDrawColor/SetFillColor/SetTextColor bilden direkt ab.src/Core/Concerns/HasDrawing.php (line(), rect(), setLineWidth()); src/Core/Concerns/HasColors.php (setDrawColor(), setFillColor(), setTextColor()).
createStandalone()-Standardseite ist A4-Hochformat (595.276 × 841.890 pt).src/Core/Document.php (createStandalone()); src/ValueObjects/PageSize.php (A4()).
Das Ausgabeziel ist das OutputDestination-Enum (Inline/Download/File/String); Output('S')getPdfData(), Output('F', $p)save($p).src/Contracts/OutputDestination.php; src/Core/Concerns/HasOutput.php (output()).
SetTitle/SetAuthor/… bilden auf typisierte Metadaten-Setter ab; landen im Info-Dictionary / XMP.src/Core/Concerns/HasMetadata.php (setTitle(), setAuthor()); ISO 32000-2 §14 (Front-Matter-citations:).
Schriften werden immer als Subset-Programme eingebettet.src/Core/Concerns/HasTypography.php (buildFontData()); ISO 32000-2 §9 (Front-Matter-citations:).
Inhalt wird single-pass emittiert.docs/architecture/adr/ADR-001-stream-based-rendering-pipeline.md.

Beide Pakete bleiben bis zur finalen Umstellung installiert, sodass ein Rollback pro Aufrufstelle bedeutet, diese Aufrufstelle auf den FPDF-Pfad zurückzusetzen. Nach der finalen Umstellung bedeutet ein Rollback, FPDF und den vorherigen Code aus der Versionsverwaltung wiederherzustellen. Es ist keine Datenmigration beteiligt.

Siehe Performance. Das Single-Pass-Modell entfernt jegliche Kosten eines gehaltenen Puffers. Die neuen Kosten pro Dokument entstehen durch die eager Schriftauflösung (Schritt 3), die sich über das Schriftverzeichnis cachen lässt.

  • Millimeterkoordinaten als Punkte zu transkribieren, ohne die * 72 / 25.4-Umrechnung.
  • Output() in FPDFs ($dest, $name)-Reihenfolge zu belassen oder ein Zeichen statt des OutputDestination-Enums zu übergeben.
  • SetMargins($l, $t, $r) direkt in Margin zu transkribieren (dessen Reihenfolge top, right, bottom, left ist).
  • Zu erwarten, dass AddFont-Metrikdateien portieren; legen Sie die TTF/OTF stattdessen in das Schriftverzeichnis.
  • Nach einer GetStringWidth-Entsprechung zu greifen; verwenden Sie multiCell() für den Umbruch.
  • Byte-/pixelidentische Ausgabe zu erwarten (unabhängige Engines — diese Anleitung behauptet niemals einen Drop-in oder 100%ige Kompatibilität).