Convertir archivos SVG por lotes en Python

Quick Answer: Para convertir SVG por lotes en Python, recorra una carpeta de entrada, cargue cada .svg con SVGDocument, cree opciones para el formato de destino y llame a Converter.convert_svg() para cada salida.

Flujo de conversión por lotes

La conversión por lotes es útil para miniaturas, vistas previas web, gráficos exportados de informes o copias PDF de una carpeta SVG. El flujo es igual que para un archivo, pero se repite para cada fuente:

  1. Elija carpeta de entrada y salida.
  2. Cree opciones para el formato de destino, como ImageSaveOptions o PdfSaveOptions.
  3. Recorra archivos .svg.
  4. Cargue cada SVG con SVGDocument.
  5. Convierta el documento con Converter.convert_svg() y escriba el archivo de salida.

Antes de ejecutar los ejemplos, instale Aspose.SVG for Python via .NET en su entorno Python.

Convertir SVG a PNG por lotes

PNG es una buena opción para vistas previas web y salida ráster transparente. El ejemplo convierte cada .svg en data/svg/ a .png en 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 a JPG por lotes

Al convertir a JPG, defina ImageFormat.JPEG y elija un color de fondo, porque JPG no admite transparencia.

 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 a PDF por lotes

Use PdfSaveOptions cuando cada SVG deba convertirse en un PDF separado.

 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)

Crear un conversor por lotes reutilizable

Los ejemplos anteriores repiten el mismo bucle de carpeta para PNG, JPG y PDF. En código de aplicación suele ser más limpio mantener ese bucle en una función auxiliar y pasar solo carpeta de salida, extensión y opciones.

 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)

Errores comunes y soluciones

ProblemaCausa probableSolución
No se convierten archivosEl script mira en la carpeta incorrecta o filtra otra extensiónImprima input_folder y compruebe que contiene .svg
Los archivos de salida se sobrescribenDistintos archivos producen el mismo nombre baseConserve subcarpetas o añada un sufijo
Faltan imágenes o CSS vinculadosRecursos relativos no están junto al SVG de origenCargue cada SVG desde su ruta original y mantenga recursos esperados
JPG tiene fondo inesperadoJPG no admite transparenciaDefina ImageSaveOptions.background_color
Un SVG incorrecto detiene todo el loteLas excepciones no se gestionan por archivoUse try/except en cada conversión y registre nombres fallidos

FAQ

¿Cómo convierto archivos SVG por lotes en Python?

Recorra una carpeta de entrada, cargue cada .svg con SVGDocument y llame a Converter.convert_svg() con las opciones necesarias.

¿Puedo convertir SVG a JPG por lotes?

Sí. Use ImageSaveOptions, defina options.format = ImageFormat.JPEG, configure un fondo y guarde cada salida con .jpg.

¿Puedo convertir SVG a PDF por lotes?

Sí. Use PdfSaveOptions y escriba cada documento convertido en una ruta .pdf.

¿Puedo convertir SVG en subcarpetas?

Sí. Use recorrido recursivo en Python y cree carpetas de salida correspondientes antes de guardar.

¿Puedo crear un PDF a partir de muchos SVG?

Este flujo crea un archivo de salida por SVG. Si necesita un PDF combinado multipágina, use la clase SvgRenderer con PdfDevice; el renderer puede enviar varios documentos SVG al mismo dispositivo PDF.

Artículos relacionados