Migration von FPDF zu NextPDF
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“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.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/core:^3Behalten Sie setasign/fpdf (oder Ihr fpdf/fpdf) während der Migration
installiert. Entfernen Sie es nach der finalen Umstellung (siehe
sichere Migrationsabfolge).
Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“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 = 0an 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 explizitesaddPage(). - 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.
API-Oberfläche
Abschnitt betitelt „API-Oberfläche“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.
API-Verb-Zuordnung
Abschnitt betitelt „API-Verb-Zuordnung“FPDFs öffentliche Methodennamen sind langjährig und wohlbekannt. Die NextPDF-Spalte unten ist gegen Core-Quellsignaturen bestätigt (siehe Nachweis / Nachverfolgbarkeit).
| FPDF | NextPDF | Hinweise |
|---|---|---|
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 / setY | Direkte 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 / setTextColor | RGB (r, g, b), oder ein einzelner Wert für Graustufen. |
$pdf->Line / Rect / SetLineWidth | $doc->line / rect / setLineWidth | Direkte Zuordnung. rect() nimmt eine Stilzeichenkette ('S'/'F'/'DF'). |
$pdf->SetTitle/SetAuthor/SetSubject/SetKeywords/SetCreator | $doc->setTitle/setAuthor/setSubject/setKeywords/setCreator | Direkte 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. |
Codebeispiel — Schnellstart
Abschnitt betitelt „Codebeispiel — Schnellstart“<?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";Codebeispiel — Produktion
Abschnitt betitelt „Codebeispiel — Produktion“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);Grenzfälle & Stolperfallen
Abschnitt betitelt „Grenzfälle & Stolperfallen“- 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 istOutput($dest, $name); NextPDF istoutput($name, $dest). Das Ziel ist dasOutputDestination-Enum, kein Zeichen. Bevorzugen Siesave()/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 SiesetFont()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 aufmultiCell()um (das anhand von Metriken umbricht) oder auf Aufrufe voncell()mit fester Breite.
Performance
Abschnitt betitelt „Performance“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.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“- 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.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Spezifikation | Klausel |
|---|---|---|
| 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.
Kommerzieller Kontext
Abschnitt betitelt „Kommerzieller Kontext“Nicht zutreffend. NextPDF Core deckt den hier beschriebenen FPDF-Migrationspfad ab.
Siehe auch
Abschnitt betitelt „Siehe auch“Migrationsdetails (R6 erforderliche Abschnitte)
Abschnitt betitelt „Migrationsdetails (R6 erforderliche Abschnitte)“Für wen das gedacht ist
Abschnitt betitelt „Für wen das gedacht ist“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.
Geltungsbereich
Abschnitt betitelt „Geltungsbereich“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.
Kompatibilitätszuordnung
Abschnitt betitelt „Kompatibilitätszuordnung“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.
Einheiten- und Konfigurationszuordnung
Abschnitt betitelt „Einheiten- und Konfigurationszuordnung“| FPDF-Konstrukt | NextPDF | Hinweise |
|---|---|---|
$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 vertauschen | Querformat = 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 Name | Lassen Sie die Metrikdatei weg; legen Sie die TTF/OTF in Config->fontsDirectory. |
Delta bei der Schriftbehandlung
Abschnitt betitelt „Delta bei der Schriftbehandlung“- Schriftverzeichnisse. FPDFs Registrierung pro Schrift via
AddFontkollabiert zu einem Schriftverzeichnis plussetFont()-Familienabgleich. Beginnen Sie mitConfig->fontsDirectory(dem Standardsuchpfad); registrieren Sie weitere Verzeichnisse überFontRegistry::addFontDirectory()oderDocument::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.
Verhaltensunterschiede
Abschnitt betitelt „Verhaltensunterschiede“- Einheitenumrechnung (mm → pt) — der häufigste Portierungsfehler; siehe oben.
- Die
Output-Argumentreihenfolge vertauscht sich und das Ziel wird zu einem Enum. Margin/Alignment/Orientationsind typisierte Objekte/Enums, keine Zeichen oder positionellen(l, t, r)-Tripel.- Kein öffentliches
GetStringWidth— steuern Sie den Umbruch übermultiCell(). - 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.
Nicht unterstützt / keine direkte Entsprechung
Abschnitt betitelt „Nicht unterstützt / keine direkte Entsprechung“- 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 dasOutputDestination-Enum +save()/getPdfData().
Code, der von diesen abhängt, „migriert“ nicht wortwörtlich. Drücken Sie ihn mit den Zeilen oben neu aus.
Sichere Migrationsabfolge
Abschnitt betitelt „Sichere Migrationsabfolge“- Fügen Sie
nextpdf/coreneben FPDF hinzu; behalten Sie FPDF vorerst installiert. - 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.
- Legen Sie die Schriften des Dokuments in
Config->fontsDirectoryund wählen Sie sie per Familiennamen aus; lassen Sie dieAddFont-Aufrufe weg. - 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.
- Ersetzen Sie jedes
GetStringWidth-basierte Hand-Layout durchmultiCell()oder Aufrufe voncell()mit fester Breite. - Wiederholen Sie das pro Dokument, beginnend mit dem niedrigsten Risiko; halten Sie FPDF bis zur letzten Umstellung installiert.
- Entfernen Sie FPDF nach der finalen Umstellung aus
composer.json.
Die Migration testen
Abschnitt betitelt „Die Migration testen“- 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.phpsowie 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.
Nachweis / Nachverfolgbarkeit
Abschnitt betitelt „Nachweis / Nachverfolgbarkeit“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-Verhaltensaussage | Nachweis 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. |
Rollback
Abschnitt betitelt „Rollback“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.
Performance-Überlegungen
Abschnitt betitelt „Performance-Überlegungen“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.
Häufige Fallstricke
Abschnitt betitelt „Häufige Fallstricke“- Millimeterkoordinaten als Punkte zu transkribieren, ohne die
* 72 / 25.4-Umrechnung. Output()in FPDFs($dest, $name)-Reihenfolge zu belassen oder ein Zeichen statt desOutputDestination-Enums zu übergeben.SetMargins($l, $t, $r)direkt inMarginzu transkribieren (dessen Reihenfolgetop, right, bottom, leftist).- Zu erwarten, dass
AddFont-Metrikdateien portieren; legen Sie die TTF/OTF stattdessen in das Schriftverzeichnis. - Nach einer
GetStringWidth-Entsprechung zu greifen; verwenden SiemultiCell()für den Umbruch. - Byte-/pixelidentische Ausgabe zu erwarten (unabhängige Engines — diese Anleitung behauptet niemals einen Drop-in oder 100%ige Kompatibilität).