Пакетная конвертация SVG-файлов в Python

Quick Answer: Чтобы пакетно конвертировать SVG-файлы в Python, переберите входную папку, загрузите каждый .svg файл через SVGDocument, создайте параметры сохранения для целевого формата и вызовите Converter.convert_svg() для каждого выходного файла.

Сценарий пакетной конвертации

Пакетная конвертация полезна, когда приложению нужны миниатюры, веб-превью, экспортированная графика для отчетов или PDF-копии для папки SVG-файлов. Сценарий такой же, как при конвертации одного файла, но повторяется для каждого исходного файла:

  1. Выберите входную и выходную папки.
  2. Создайте параметры сохранения для целевого формата, например ImageSaveOptions или PdfSaveOptions.
  3. Переберите .svg файлы.
  4. Загрузите каждый SVG через SVGDocument.
  5. Конвертируйте документ через Converter.convert_svg() и запишите выходной файл.

Перед запуском примеров установите Aspose.SVG for Python via .NET в вашей Python-среде.

Пакетно конвертировать SVG в PNG

PNG – хороший формат по умолчанию для веб-превью и прозрачного растрового вывода. Следующий пример конвертирует каждый .svg файл из data/svg/ в .png файл в папке 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)

Пакетно конвертировать SVG в JPG

При конвертации в JPG задайте ImageFormat.JPEG и выберите цвет фона, потому что JPG не поддерживает прозрачность.

 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)

Пакетно конвертировать SVG в PDF

Используйте PdfSaveOptions, когда каждый SVG-файл должен стать отдельным PDF-файлом.

 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)

Создать переиспользуемый batch-конвертер

Предыдущие примеры повторяют один и тот же цикл по папке для PNG, JPG и PDF. В прикладном коде обычно удобнее вынести этот цикл в одну вспомогательную функцию и передавать только то, что меняется: выходную папку, расширение выходного файла и параметры сохранения.

Используйте этот подход, если проект поддерживает несколько форматов экспорта и вы не хотите сопровождать три отдельных цикла. Функция ниже по-прежнему создает один выходной файл для каждого SVG; она только убирает повторяющийся код.

 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)

Типичные ошибки и решения

ПроблемаВозможная причинаРешение
Файлы не конвертируютсяСкрипт смотрит не в ту входную папку или фильтрует не то расширениеВыведите input_folder и проверьте, что в ней есть .svg файлы
Выходные файлы перезаписывают друг другаРазные исходные файлы дают одинаковое базовое имя результатаСохраняйте структуру подпапок или добавляйте суффикс к генерируемым именам
Связанные изображения или CSS отсутствуютОтносительные ресурсы недоступны рядом с исходным SVGЗагружайте каждый SVG из исходного пути и храните ресурсы в ожидаемых относительных расположениях
JPG имеет неожиданный фонJPG не поддерживает прозрачностьЗадайте ImageSaveOptions.background_color
Один некорректный SVG останавливает всю пакетную обработкуИсключения не обрабатываются отдельно для каждого файлаОберните каждую конвертацию в try/except и логируйте имена файлов с ошибками

FAQ

Как пакетно конвертировать SVG-файлы в Python?

Переберите входную папку, загрузите каждый .svg файл через SVGDocument и вызовите Converter.convert_svg() с нужными параметрами сохранения.

Можно ли пакетно конвертировать SVG в JPG?

Да. Используйте ImageSaveOptions, задайте options.format = ImageFormat.JPEG, установите цвет фона и сохраняйте каждый выходной файл с расширением .jpg.

Можно ли пакетно конвертировать SVG в PDF?

Да. Используйте PdfSaveOptions и записывайте каждый конвертированный документ в выходной путь .pdf.

Можно ли конвертировать SVG-файлы во вложенных папках?

Да. Используйте рекурсивный обход папок в Python-коде и создавайте соответствующие выходные папки перед сохранением конвертированных файлов.

Можно ли создать один PDF из нескольких SVG-файлов?

Этот сценарий пакетной обработки создает один выходной файл для каждого SVG. Если нужен один объединенный многостраничный PDF, используйте класс SvgRenderer с выходным устройством PdfDevice; рендерер может отправить несколько SVG-документов в одно PDF-устройство.

Связанные статьи