在 Python 中批量转换 SVG 文件

Quick Answer: 要在 Python 中批量转换 SVG 文件,请遍历输入文件夹,用 SVGDocument 加载每个 .svg 文件,为目标格式创建保存选项,并为每个输出文件调用 Converter.convert_svg()

批量转换工作流

当应用需要为一组 SVG 文件生成缩略图、Web 预览、导出的报表图形或 PDF 副本时,批量转换很有用。工作流与单文件转换相同,只是对每个源文件重复执行:

  1. 选择输入文件夹和输出文件夹。
  2. 为目标格式创建保存选项,例如 ImageSaveOptionsPdfSaveOptions
  3. 遍历 .svg 文件。
  4. 使用 SVGDocument 加载每个 SVG。
  5. 使用 Converter.convert_svg() 转换文档并写入输出文件。

运行示例前,请在 Python 环境中 安装 Aspose.SVG for Python via .NET

批量将 SVG 转换为 PNG

PNG 是 Web 预览和透明栅格输出的良好默认选择。下面的示例将 data/svg/ 中的每个 .svg 文件转换为 output/png/ 中的 .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

当每个 SVG 文件都应生成一个单独的 PDF 文件时,使用 PdfSaveOptions

 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)

创建可复用的批量转换函数

前面的示例为 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

如何在 Python 中批量转换 SVG 文件?

遍历输入文件夹,用 SVGDocument 加载每个 .svg 文件,并使用所需保存选项调用 Converter.convert_svg()

可以批量将 SVG 转换为 JPG 吗?

可以。使用 ImageSaveOptions,设置 options.format = ImageFormat.JPEG,设置背景颜色,并用 .jpg 扩展名保存每个输出文件。

可以批量将 SVG 转换为 PDF 吗?

可以。使用 PdfSaveOptions,并将每个转换后的文档写入 .pdf 输出路径。

可以转换子文件夹中的 SVG 文件吗?

可以。在 Python 代码中使用递归文件夹遍历,并在保存转换文件前创建匹配的输出文件夹。

可以从多个 SVG 文件创建一个 PDF 吗?

此批量工作流为每个 SVG 创建一个输出文件。如果需要一个合并的多页 PDF,请使用 SvgRenderer 类和 PdfDevice 输出设备;该渲染器可以将多个 SVG 文档发送到同一个 PDF 设备。

相关文章