Images SVG fpdf2 : garder les tracés dans ton PDF Python
Place un logo SVG dans un PDF Python avec fpdf2, règle sa taille, examine les tracés enregistrés et diagnostique les éléments manquants avant une solution de repli matricielle.
Sur cette page
- Commencer avec un SVG connu et une version fpdf2 fixée
- Distinguer le canevas SVG du logo peint
- Vérifier que le PDF enregistré contient des tracés
- Diagnostiquer le dessin manquant avec ta version installée
- Utiliser une solution de repli matricielle quand le résultat le demande
- Préparer le dessin uniquement matriciel avant l’étape PDF
- FAQ
- Sources
Utilise pdf.image("logo.svg", x=20, y=20, w=60) pour placer un SVG dans un document fpdf2. La géométrie SVG prise en charge devient des tracés de dessin PDF. Tu n’as pas besoin de rendre d’abord le logo en PNG. La documentation SVG officielle décrit cette méthode directe et ses limites.
Si tu découvres ce format, le guide des fichiers SVG explique les tracés et les conteneurs d’images. Un import réussi doit quand même être vérifié. Le fichier peut contenir des pixels intégrés, dépendre de fonctionnalités que l’importateur ne reproduit pas ou présenter de l’espace vide autour du dessin. Ce guide crée un petit logo original, le place à une taille explicite et vérifie le PDF obtenu. Garde un original vectoriel existant si tu en as un ; reconstruire un dessin depuis un PNG ou JPG est une étape distincte en amont.
Commencer avec un SVG connu et une version fpdf2 fixée
Nous avons exécuté l’exemple avec Python 3.12 et fpdf2 2.8.8. C’est la version testée, pas une garantie que chaque version ultérieure se comporte de façon identique. La page PyPI officielle du paquet décrit l’installation sous le nom de distribution fpdf2 ; l’import Python est fpdf.
Utilise un environnement neuf pour que l’exemple soit indépendant des paquets d’un autre projet :
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "fpdf2==2.8.8"Sur Windows, active plutôt l’environnement avec .venv\Scripts\activate. Enregistre cet emblème rectangulaire original sous 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>Il comporte deux sous-tracés fermés. Le rectangle extérieur est rempli et le rectangle intérieur devient une ouverture grâce à la règle de remplissage evenodd. Aucune police, image ni aucun effet n’intervient, ce qui facilite le diagnostic du premier test.
Enregistre ce qui suit sous place_logo.py, à côté du 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"))Exécute python place_logo.py. Ouvre logo.pdf et vérifie la présence d’un cadre rectangulaire bleu-vert près du coin supérieur gauche, avec la page visible à travers son centre.
Distinguer le canevas SVG du logo peint
Le canevas source a un rapport de 3:2 : 120 unités de large et 80 de haut. Avec w=60, cet exemple occupe un canevas de 60 × 40 mm. Le dessin commence à 10 unités source à l’intérieur de ce canevas ; son rectangle extérieur peint mesure donc 50 × 30 mm, à partir de 25, 25 mm sur la page. Ces valeurs sont calculées à partir des coordonnées et de l’échelle de cet exemple.
Cette marge explique pourquoi mesurer la forme colorée ne donne pas le même résultat que mesurer le canevas de placement. Si le logo d’un client semble trop petit, examine les marges source avant d’augmenter sa largeur PDF.
Le guide des images fpdf2 explique la gestion des dimensions et l’option de maintien des proportions dans une boîte donnée. Pour ce premier exemple, règle seulement la largeur. Si tu fournis ensuite les deux dimensions, teste volontairement l’ajustement souhaité au lieu de supposer que chaque source aura les mêmes proportions.

Vérifier que le PDF enregistré contient des tracés
L’aperçu PDF montre l’apparence, mais une image peut sembler nette à un zoom modéré. Examine aussi le fichier. Nous avons vérifié l’exemple isolé avec pypdf 6.1.1 :
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"))Notre sortie indiquait zéro image de page. Le contenu décodé contenait des contours rectangulaires exprimés par des opérations de déplacement, ligne et fermeture de tracé, suivies de f*, l’opération de remplissage pair-impair. Avec l’ouverture visible au rendu, cela étaye la conclusion que cet exemple sans image est resté de la géométrie de dessin dans le PDF enregistré.
N’applique pas cette conclusion à une autre entrée sans la vérifier. Un rapport peut légitimement contenir des photos ailleurs ; un SVG peut lui-même contenir une image. Le diagnostic des images matricielles intégrées aide à distinguer un logo à tracés d’une image matricielle enveloppée dans du balisage SVG. Les PDF plus complexes peuvent aussi placer du contenu de dessin dans des objets référencés ; le petit script ci-dessus est donc un point de départ pour cet exemple isolé, pas un audit PDF universel.
Diagnostiquer le dessin manquant avec ta version installée
Commence par exécuter le petit emblème ci-dessus. S’il fonctionne alors que ton logo de production échoue, tu as réduit le problème au dessin source ou aux fonctionnalités qu’il utilise. Préserve l’original et simplifie une copie, une fonctionnalité à la fois.
| Symptôme | Première vérification | Étape suivante utile |
|---|---|---|
| La page est vide | Chemin du fichier, placement, dimensions et avertissements de l’importateur | Tester l’emblème simple à des coordonnées explicites |
| Le logo paraît trop petit | Espace vide dans le canevas source | Comparer les limites peintes au viewBox |
| Le centre se remplit | Structure du tracé composé et règle de remplissage | Préserver l’ouverture pendant l’édition ou l’export |
| Le lettrage manque ou diffère | Version installée, choix de police et fonctionnalités textuelles | Tester un texte distinct ou utiliser un lettrage de logo approuvé converti en tracés |
| Une décoration disparaît | Fonctionnalités SVG non prises en charge | Retirer cette fonctionnalité d’une copie et comparer le résultat |
| Le PDF est net mais pourrait contenir des pixels | Images intégrées dans la source et le PDF | Examiner la structure du fichier ainsi que l’aperçu |
Les réponses anciennes demandent de la prudence ici. Notre test distinct en 2.8.8, contenant un simple élément <text>, a produit le texte extractible HELLO, et un rectangle à dégradé linéaire basique s’est exporté correctement. Ces vérifications limitées n’établissent pas une compatibilité complète du texte SVG, des polices, du CSS ou des dégradés. Elles montrent néanmoins pourquoi une vieille affirmation selon laquelle aucun texte SVG ou aucun dégradé n’est pris en charge peut te pousser à une pixellisation inutile.
La liste actuelle des fonctionnalités SVG mentionne toujours des limites comme les marqueurs, les motifs, le texte sur un tracé et le CSS complexe ou externe. Garde les avertissements de l’importateur visibles pendant le diagnostic et compare la page enregistrée à la source. Un journal sans avertissement ne prouve pas à lui seul que toutes les fonctionnalités visuelles ont survécu.
Utiliser une solution de repli matricielle quand le résultat le demande
Si un effet ne peut pas être reproduit dans la chaîne choisie, décide si préserver son apparence compte davantage que garder sa géométrie. Un PNG rendu peut convenir pour cette partie d’un document. Vérifie-le à la taille physique finale et décris la sortie avec exactitude ; intégrer un rendu matriciel ne préserve pas les tracés originaux.
Pour un logo de marque, un lettrage approuvé converti en tracés ou un export vectoriel plus simple peut être préférable. Pour du texte de document éditable, garde la gestion des polices et du texte dans la procédure du document. Vectoriser une capture d’écran d’une phrase ne retrouve pas sa typographie et ne la rend pas sélectionnable.
Si ton code PDF existant utilise une autre bibliothèque Python, la procédure SVG ReportLab possède ses propres vérifications d’import et de dimensions. Changer de bibliothèque est une décision d’implémentation distincte ; teste donc la fonctionnalité réellement problématique avant de reconstruire le document.
Préparer le dessin uniquement matriciel avant l’étape PDF
Lorsqu’il ne reste qu’un logo PNG ou JPG, le vectoriseur de logos de PerfectVector peut préparer un SVG candidat avant son import avec fpdf2. Compare les contours, les petites ouvertures et les zones colorées à la source, puis soumets le candidat aux mêmes vérifications de placement et de PDF.
Utilise le vectoriel original s’il est disponible. Le lettrage exact d’une marque peut demander une nouvelle saisie ou une correction manuelle ; le guide de vectorisation de logos explique ce choix. L’emblème de cet article est un SVG original écrit à la main, pas un résultat de conversion PerfectVector mesuré. PerfectVector prépare le dessin, tandis que fpdf2 contrôle son placement dans le PDF.
FAQ
fpdf2 peut-il insérer directement un SVG ? Oui. Transmets le fichier SVG à la méthode image et règle son placement et sa taille. La géométrie prise en charge peut devenir des tracés PDF, mais examine le fichier exporté et l’apparence de ton propre dessin.
fpdf2 prend-il en charge le texte SVG ? Notre test de texte basique a fonctionné avec fpdf2 2.8.8. Cela ne garantit pas toutes les polices, fonctionnalités de mise en page ou constructions de texte sur un tracé. Vérifie ta version installée et teste le lettrage réellement utilisé par ton document.
Pourquoi une image de 60 mm semble-t-elle plus étroite que 60 mm ? La taille demandée s’applique au canevas de placement. Les marges vides dans le SVG restent une partie de ce canevas ; la forme peinte peut donc être plus étroite.
Dois-je convertir mon logo PNG en SVG avant de l’ajouter ? Seulement si tu as besoin de tracés éditables et si le dessin se prête à la vectorisation. Garde les photographies comme images matricielles et utilise un logo vectoriel original lorsqu’il existe. Vérifie un candidat vectorisé avant de l’insérer.
Sources
- fpdf2 — SVG — Décrit l’insertion SVG directe, la prise en charge des fonctionnalités et les journaux d’avertissement.
- fpdf2 — Images — Explique le placement des images, les dimensions et l’ajustement du rapport hauteur/largeur.
- fpdf2 — Paquet PyPI — Identifie la distribution installable et sa convention d’import Python.
Tu n’as qu’un logo matriciel ? Prépare un SVG candidat avec PerfectVector, examine ses contours et ses ouvertures, puis place-le à la taille requise avec fpdf2 et vérifie le PDF enregistré.
Plus depuis le blog

SVG PDFKit : placer un logo vectoriel sans l’aplatir
Insère un logo SVG complet dans un document PDFKit, règle sa taille en points et examine le PDF enregistré : tracés, ouvertures, éléments manquants et images.

CairoSVG : exporte SVG en PDF et PNG à la bonne taille
Convertis un SVG avec CairoSVG, choisis largeur ou échelle, comprends DPI et dimensions parentes et vérifie pixels PNG et taille de page PDF avant livraison.