Convertir des fichiers SVG par lots en Python

Quick Answer: Pour convertir des fichiers SVG par lots en Python, parcourez un dossier d’entrée, chargez chaque fichier .svg avec SVGDocument, créez les options du format cible et appelez Converter.convert_svg() pour chaque fichier de sortie.

Flux de conversion par lots

La conversion par lots est utile quand une application doit produire des vignettes, des aperçus web, des images de rapport exportées ou des copies PDF pour un dossier de fichiers SVG. Le flux est le même que pour un seul fichier, mais il est répété pour chaque source :

  1. Choisir un dossier d’entrée et un dossier de sortie.
  2. Créer les options du format cible, par exemple ImageSaveOptions ou PdfSaveOptions.
  3. Parcourir les fichiers .svg.
  4. Charger chaque SVG avec SVGDocument.
  5. Convertir le document avec Converter.convert_svg() et écrire le fichier de sortie.

Avant d’exécuter les exemples, installez Aspose.SVG for Python via .NET dans votre environnement Python.

Convertir SVG en PNG par lots

PNG est un bon choix par défaut pour les aperçus web et les sorties raster transparentes. L’exemple suivant convertit chaque fichier .svg du dossier data/svg/ en fichier .png dans output/png/.

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.saving import ImageSaveOptions
 5
 6# Batch convert SVG files to PNG
 7input_folder = "data/svg/"
 8output_folder = "output/png/"
 9os.makedirs(output_folder, exist_ok=True)
10
11options = ImageSaveOptions()
12
13for file_name in os.listdir(input_folder):
14    if not file_name.lower().endswith(".svg"):
15        continue
16
17    input_path = os.path.join(input_folder, file_name)
18    output_name = os.path.splitext(file_name)[0] + ".png"
19    output_path = os.path.join(output_folder, output_name)
20
21    with SVGDocument(input_path) as document:
22        Converter.convert_svg(document, options, output_path)

Convertir SVG en JPG par lots

Lors de la conversion en JPG, définissez ImageFormat.JPEG et choisissez une couleur de fond, car JPG ne prend pas en charge la transparence.

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.rendering.image import ImageFormat
 5from aspose.svg.saving import ImageSaveOptions
 6from aspose.pydrawing import Color
 7
 8# Batch convert SVG files to JPG with a solid background
 9input_folder = "data/svg/"
10output_folder = "output/jpg/"
11os.makedirs(output_folder, exist_ok=True)
12
13options = ImageSaveOptions()
14options.format = ImageFormat.JPEG
15options.background_color = Color.from_argb(255, 255, 255)
16
17for file_name in os.listdir(input_folder):
18    if not file_name.lower().endswith(".svg"):
19        continue
20
21    input_path = os.path.join(input_folder, file_name)
22    output_name = os.path.splitext(file_name)[0] + ".jpg"
23    output_path = os.path.join(output_folder, output_name)
24
25    with SVGDocument(input_path) as document:
26        Converter.convert_svg(document, options, output_path)

Convertir SVG en PDF par lots

Utilisez PdfSaveOptions lorsque chaque fichier SVG doit devenir un fichier PDF séparé.

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.saving import PdfSaveOptions
 5
 6# Batch convert SVG files to separate PDF files
 7input_folder = "data/svg/"
 8output_folder = "output/pdf/"
 9os.makedirs(output_folder, exist_ok=True)
10
11options = PdfSaveOptions()
12
13for file_name in os.listdir(input_folder):
14    if not file_name.lower().endswith(".svg"):
15        continue
16
17    input_path = os.path.join(input_folder, file_name)
18    output_name = os.path.splitext(file_name)[0] + ".pdf"
19    output_path = os.path.join(output_folder, output_name)
20
21    with SVGDocument(input_path) as document:
22        Converter.convert_svg(document, options, output_path)

Créer un convertisseur par lots réutilisable

Les exemples précédents répètent la même boucle de dossiers pour PNG, JPG et PDF. Dans le code d’une application, il est généralement plus clair de garder cette boucle dans une fonction auxiliaire et de passer seulement les éléments qui changent : le dossier de sortie, l’extension de sortie et les options d’enregistrement.

Utilisez ce modèle lorsque votre projet prend en charge plusieurs formats d’export et que vous ne voulez pas maintenir trois boucles séparées. La fonction ci-dessous crée toujours un fichier de sortie par SVG ; elle supprime seulement le code répété.

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.rendering.image import ImageFormat
 5from aspose.svg.saving import ImageSaveOptions, PdfSaveOptions
 6from aspose.pydrawing import Color
 7
 8def batch_convert_svg(input_folder, output_folder, output_extension, options):
 9    os.makedirs(output_folder, exist_ok=True)
10
11    for file_name in os.listdir(input_folder):
12        if not file_name.lower().endswith(".svg"):
13            continue
14
15        input_path = os.path.join(input_folder, file_name)
16        output_name = os.path.splitext(file_name)[0] + output_extension
17        output_path = os.path.join(output_folder, output_name)
18
19        with SVGDocument(input_path) as document:
20            Converter.convert_svg(document, options, output_path)
21
22input_folder = "data/svg/"
23
24# Reuse the same helper for PNG output
25png_options = ImageSaveOptions()
26batch_convert_svg(input_folder, "output/png/", ".png", png_options)
27
28# Reuse the same helper for JPG output
29jpg_options = ImageSaveOptions()
30jpg_options.format = ImageFormat.JPEG
31jpg_options.background_color = Color.from_argb(255, 255, 255)
32batch_convert_svg(input_folder, "output/jpg/", ".jpg", jpg_options)
33
34# Reuse the same helper for PDF output
35pdf_options = PdfSaveOptions()
36batch_convert_svg(input_folder, "output/pdf/", ".pdf", pdf_options)

Erreurs courantes et solutions

ProblèmeCause probableSolution
Aucun fichier n’est convertiLe script utilise le mauvais dossier d’entrée ou filtre la mauvaise extensionAffichez input_folder et vérifiez qu’il contient des fichiers .svg
Les fichiers de sortie s’écrasentPlusieurs fichiers d’entrée produisent le même nom de baseConservez les sous-dossiers ou ajoutez un suffixe aux noms générés
Images liées ou CSS manquentLes ressources relatives ne sont pas disponibles à côté du SVG sourceChargez chaque SVG depuis son chemin d’origine et gardez les ressources aux emplacements relatifs attendus
Le JPG a un fond inattenduJPG ne prend pas en charge la transparenceDéfinissez ImageSaveOptions.background_color
Un SVG incorrect arrête tout le lotLes exceptions ne sont pas gérées fichier par fichierEncapsulez chaque conversion dans try/except et journalisez les fichiers en échec

FAQ

Comment convertir des fichiers SVG par lots en Python ?

Parcourez un dossier d’entrée, chargez chaque fichier .svg avec SVGDocument et appelez Converter.convert_svg() avec les options d’enregistrement nécessaires.

Puis-je convertir SVG en JPG par lots ?

Oui. Utilisez ImageSaveOptions, définissez options.format = ImageFormat.JPEG, choisissez une couleur de fond et enregistrez chaque fichier de sortie avec l’extension .jpg.

Puis-je convertir SVG en PDF par lots ?

Oui. Utilisez PdfSaveOptions et écrivez chaque document converti dans un chemin de sortie .pdf.

Puis-je convertir des fichiers SVG dans des sous-dossiers ?

Oui. Utilisez un parcours récursif des dossiers dans votre code Python et créez les dossiers de sortie correspondants avant l’enregistrement.

Puis-je créer un seul PDF à partir de plusieurs fichiers SVG ?

Ce flux par lots crée un fichier de sortie par SVG. Si vous avez besoin d’un PDF multi-page combiné, utilisez la classe SvgRenderer avec un périphérique de sortie PdfDevice ; le renderer peut envoyer plusieurs documents SVG vers le même périphérique PDF.

Articles associés