PerfectVector
Von Irene Kim8 Min. Lesezeit

fpdf2-SVG-Bilder: Pfade in deiner Python-PDF erhalten

Platziere ein SVG-Logo mit fpdf2 in einer Python-PDF, bestimme seine Größe, prüfe gespeicherte Pfade und untersuche fehlenden Text oder Formen vor einem Rasterersatz.

Auf dieser Seite

Verwende pdf.image("logo.svg", x=20, y=20, w=60), um ein SVG in einem fpdf2-Dokument zu platzieren. Unterstützte SVG-Geometrie wird zu PDF-Zeichenpfaden. Du musst das Logo nicht zuerst als PNG rendern. Die offizielle SVG-Dokumentation beschreibt diesen direkten Weg und seine Grenzen.

Wenn dir das Format noch nicht vertraut ist, erklärt der Leitfaden zu SVG-Dateien Pfade und Bildcontainer. Auch ein erfolgreicher Import muss geprüft werden. Die Datei kann eingebettete Pixel enthalten, von Funktionen abhängen, die der Importer nicht nachbildet, oder Leerraum um ihre Grafik haben. Dieser Leitfaden erstellt ein kleines eigenes Logo, platziert es in einer ausdrücklich festgelegten Größe und prüft die entstandene PDF. Behalte eine vorhandene Vektorvorlage, wenn du eine hast; das Rekonstruieren einer Grafik aus PNG oder JPG ist ein separater vorgelagerter Schritt.

Mit einem bekannten SVG und einer festgelegten fpdf2-Version beginnen

Wir haben das Beispiel mit Python 3.12 und fpdf2 2.8.8 ausgeführt. Das ist die getestete Version, kein Versprechen, dass jede spätere Version sich identisch verhält. Die offizielle PyPI-Seite des Pakets dokumentiert die Installation unter dem Distributionsnamen fpdf2; der Python-Import lautet fpdf.

Verwende eine frische Umgebung, damit das Beispiel unabhängig von den Paketen eines anderen Projekts ist:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install "fpdf2==2.8.8"

Aktiviere die Umgebung unter Windows stattdessen mit .venv\Scripts\activate. Speichere dieses eigene rechteckige Emblem als logo.svg:

<svg xmlns="http://www.w3.org/2000/svg"
     width="120" height="80" viewBox="0 0 120 80">
  <path fill="#137d89" fill-rule="evenodd"
        d="M10 10H110V70H10Z M30 25H90V55H30Z"/>
</svg>

Es gibt zwei geschlossene Teilpfade. Das äußere Rechteck wird gefüllt, und das innere wird durch die Füllregel evenodd zur Aussparung. Es sind weder Schrift noch Bild noch Effekt beteiligt, wodurch sich der erste Test leicht diagnostizieren lässt.

Speichere Folgendes als place_logo.py neben dem SVG:

from pathlib import Path
from fpdf import FPDF
 
folder = Path(__file__).resolve().parent
pdf = FPDF(unit="mm")
pdf.add_page()
pdf.image(str(folder / "logo.svg"), x=20, y=20, w=60)
pdf.output(str(folder / "logo.pdf"))

Führe python place_logo.py aus. Öffne logo.pdf und prüfe, ob nahe der oberen linken Ecke ein petrolfarbener rechteckiger Rahmen erscheint, durch dessen Mitte die Seite sichtbar ist.

SVG-Zeichenfläche und gezeichnetes Logo unterscheiden

Die Quellzeichenfläche hat ein Seitenverhältnis von 3:2: 120 Einheiten breit und 80 hoch. Bei w=60 belegt dieses Beispiel eine 60 × 40 mm große Zeichenfläche. Die Grafik beginnt 10 Quelleinheiten innerhalb dieser Fläche, weshalb ihr gezeichnetes äußeres Rechteck 50 × 30 mm groß ist und bei 25, 25 mm auf der Seite beginnt. Diese Werte sind aus den Koordinaten und dem Maßstab dieses Testbeispiels berechnet.

Dieser Rand erklärt, warum das Messen der farbigen Form ein anderes Ergebnis liefert als das Messen der Platzierungsfläche. Wenn das Logo eines Kunden zu klein erscheint, prüfe die Quellränder, bevor du seine PDF-Breite erhöhst.

Der fpdf2-Bildleitfaden erklärt den Umgang mit Abmessungen und die Möglichkeit, Proportionen innerhalb eines angegebenen Felds zu erhalten. Lege für dieses erste Beispiel nur die Breite fest. Wenn du später beide Abmessungen angibst, teste bewusst die gewünschte Einpassung, statt anzunehmen, dass jede Quelle dieselben Proportionen hat.

Illustration eines rechteckigen Logos innerhalb seiner größeren Zeichenfläche, das anschließend auf einer Dokumentseite platziert wird
Die Platzierungsfläche enthält Leerraum um die Grafik. Diese Illustration erklärt die beiden Begrenzungen; prüfe die exportierte PDF, um deine tatsächlichen Abmessungen zu bestätigen.

Prüfen, ob die gespeicherte PDF Pfade enthält

Die PDF-Vorschau zeigt das Erscheinungsbild, aber auch ein Bild kann bei mäßiger Vergrößerung scharf aussehen. Prüfe deshalb auch die Datei. Wir haben das isolierte Beispiel mit pypdf 6.1.1 untersucht:

python -m pip install "pypdf==6.1.1"
from pathlib import Path
from pypdf import PdfReader
 
folder = Path(__file__).resolve().parent
page = PdfReader(folder / "logo.pdf").pages[0]
print("Page images:", len(page.images))
print(page.get_contents().get_data().decode("latin-1"))

Unsere Ausgabe meldete null Seitenbilder. Der dekodierte Inhalt enthielt Rechteckkonturen, ausgedrückt durch Bewegungs-, Linien- und Pfadschließoperationen, gefolgt von f*, der Even-odd-Fülloperation. Zusammen mit der dargestellten Aussparung stützt das die Schlussfolgerung, dass dieses bildfreie Testbeispiel in der gespeicherten PDF Zeichengeometrie blieb.

Übertrage diese Schlussfolgerung nicht ohne Prüfung auf eine andere Eingabe. Ein Bericht darf an anderer Stelle durchaus Fotos enthalten; ein SVG kann selbst ein Bild enthalten. Die Diagnose eingebetteter Rasterbilder hilft, ein pfadbasiertes Logo von einer in SVG-Markup verpackten Bitmap zu unterscheiden. Komplexere PDFs können Zeicheninhalte außerdem in referenzierten Objekten ablegen. Das kurze Skript oben ist deshalb ein Ausgangspunkt für dieses isolierte Testbeispiel, keine universelle PDF-Prüfung.

Fehlende Grafik mit deiner installierten Version untersuchen

Führe zunächst das kleine Emblem oben aus. Wenn es funktioniert, dein Produktionslogo aber nicht, hast du das Problem auf die Quellgrafik oder ihre verwendeten Funktionen eingegrenzt. Behalte das Original und vereinfache eine Kopie, jeweils um eine Funktion.

SymptomErste PrüfungHilfreicher nächster Schritt
Die Seite ist leerDateipfad, Platzierung, Abmessungen und ImportwarnungenEinfaches Emblem mit ausdrücklichen Koordinaten testen
Das Logo wirkt zu kleinLeerraum innerhalb der QuellzeichenflächeGezeichnete Begrenzungen mit dem viewBox vergleichen
Die Mitte wird gefülltStruktur des zusammengesetzten Pfads und FüllregelAussparung beim Bearbeiten oder Exportieren erhalten
Schrift fehlt oder sieht anders ausInstallierte Version, Schriftwahl und TextfunktionenSeparate Textprobe testen oder freigegebenen Logoschriftzug in Pfaden verwenden
Ein dekoratives Element verschwindetNicht unterstützte SVG-FunktionenDiese Funktion aus einer Kopie entfernen und das Ergebnis vergleichen
Die PDF ist scharf, könnte aber Pixel enthaltenEingebettete Bilder in Quelle und PDFDateistruktur ebenso wie Vorschau prüfen

Ältere Antworten solltest du hier vorsichtig verwenden. Unsere separate Probe mit 2.8.8 und einem einfachen <text>-Element erzeugte extrahierbaren HELLO-Text, und ein einfaches Rechteck mit linearem Verlauf wurde erfolgreich exportiert. Diese begrenzten Prüfungen belegen keine vollständige Kompatibilität mit SVG-Text, Schriften, CSS oder Verläufen. Sie zeigen aber, warum eine alte Aussage, dass sämtlicher SVG-Text oder alle Verläufe nicht unterstützt würden, dich zu unnötigem Rastern verleiten kann.

Die aktuelle SVG-Funktionsliste nennt weiterhin Einschränkungen wie Marker, Muster, Text auf einem Pfad und komplexes oder externes CSS. Halte Importwarnungen während der Diagnose sichtbar und vergleiche die gespeicherte Seite mit der Quelle. Ein fehlerfreies Protokoll allein beweist nicht, dass jede visuelle Funktion erhalten geblieben ist.

Einen Rasterersatz verwenden, wenn das Ergebnis ihn erfordert

Wenn ein Effekt in deiner gewählten Verarbeitungskette nicht nachgebildet werden kann, entscheide, ob sein Erscheinungsbild wichtiger ist als der Erhalt der Geometrie. Für diesen Teil eines Dokuments kann ein gerendertes PNG geeignet sein. Prüfe es in der endgültigen physischen Größe und beschreibe die Ausgabe korrekt; das Einbetten einer Rasterdarstellung erhält die ursprünglichen Pfade nicht.

Bei einem Markenlogo können freigegebene Schriftzüge in Pfaden oder ein einfacherer Vektorexport die bessere Wahl sein. Behalte bei bearbeitbarem Dokumenttext die Schrift- und Textverarbeitung im Dokumentablauf. Das Nachzeichnen eines Satz-Screenshots stellt seine Typografie nicht wieder her und macht ihn nicht zu auswählbarem Text.

Wenn dein bestehender PDF-Code eine andere Python-Bibliothek verwendet, bietet der ReportLab-SVG-Ablauf eigene Import- und Größenprüfungen. Ein Bibliothekswechsel ist eine separate Implementierungsentscheidung. Teste deshalb die tatsächlich problematische Funktion, bevor du das Dokument neu aufbaust.

Reine Rastergrafik vor dem PDF-Schritt vorbereiten

Wenn nur ein PNG- oder JPG-Logo übrig ist, kann PerfectVectors Logo-Vektorisierer einen SVG-Kandidaten erstellen, bevor du ihn mit fpdf2 importierst. Vergleiche Konturen, kleine Aussparungen und Farbbereiche mit der Vorlage und führe den Kandidaten dann durch dieselben Platzierungs- und PDF-Prüfungen.

Verwende den Originalvektor, wenn er verfügbar ist. Exakte Markenschrift kann erneutes Setzen oder manuelle Korrekturen erfordern; der Leitfaden zur Logo-Vektorisierung erklärt diese Entscheidung. Das Emblem in diesem Artikel ist ein eigenes, von Hand geschriebenes SVG, kein gemessenes PerfectVector-Konvertierungsergebnis. PerfectVector bereitet die Grafik vor, während fpdf2 ihre Platzierung in der PDF steuert.

FAQ

Kann fpdf2 ein SVG direkt einfügen? Ja. Übergib die SVG-Datei an die image-Methode und lege Platzierung und Größe fest. Unterstützte Geometrie kann zu PDF-Pfaden werden, aber prüfe bei deiner eigenen Grafik die exportierte Datei und ihr Erscheinungsbild.

Unterstützt fpdf2 SVG-Text? Unsere einfache Textprobe funktionierte mit fpdf2 2.8.8. Das garantiert nicht jede Schrift, Layoutfunktion oder Text-auf-Pfad-Konstruktion. Prüfe deine installierte Version und teste die Schriftzüge, die dein Dokument tatsächlich verwendet.

Warum sieht ein 60 mm breites Bild schmaler als 60 mm aus? Die angeforderte Größe gilt für die Platzierungsfläche. Leere Ränder innerhalb des SVG bleiben Teil dieser Fläche, weshalb die gezeichnete Form schmaler sein kann.

Sollte ich mein PNG-Logo vor dem Einfügen in SVG konvertieren? Nur wenn du bearbeitbare Pfade brauchst und die Grafik sich zum Nachzeichnen eignet. Behalte Fotos als Rasterbilder und verwende ein originales Vektorlogo, wenn eines existiert. Prüfe einen nachgezeichneten Kandidaten vor dem Einfügen.

Quellen

  1. fpdf2 — SVG — Dokumentiert das direkte Einfügen von SVG, Funktionsunterstützung und Warnprotokolle.
  2. fpdf2 — Bilder — Erklärt Bildplatzierung, Abmessungen und Einpassung mit erhaltenem Seitenverhältnis.
  3. fpdf2 — PyPI-Paket — Benennt die installierbare Distribution und ihre Python-Importkonvention.

Du hast nur ein Rasterlogo? Erstelle einen SVG-Kandidaten mit PerfectVector, prüfe seine Konturen und Aussparungen, platziere ihn dann mit fpdf2 in der benötigten Größe und prüfe die gespeicherte PDF.

Mehr aus dem Blog

Starte mit einer sauberen SVG,
die leichter zu bearbeiten ist