在 Python 中将 SVG 转换为 PDF

Quick Answer: 使用 SVGDocument 加载 SVG 文件,创建 PdfSaveOptions,然后调用 Converter.convert_svg(document, options, output_path) 将 SVG 保存为 PDF。当默认输出不够时,可用 PdfSaveOptions 设置页面尺寸、背景颜色、分辨率、JPEG 质量、元数据或加密。

以编程方式将 SVG 转换为 PDF

当 SVG 图形需要打印、归档、附加到文档,或以跨查看器保持版式的格式共享时,PDF 是常用输出格式。Aspose.SVG for Python via .NET 既支持高级转换 API,也支持在需要明确控制渲染流程时使用渲染设备。

大多数文件转换任务使用 Converter.convert_svg()。当工作流已经使用渲染设备,或需要基于设备的渲染模式时,可使用 SVGDocument.render_to()PdfDevice

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

使用 Converter.convert_svg() 将 SVG 转换为 PDF

最简单的方式是用 SVGDocument 加载 SVG 文档,创建 PdfSaveOptions,然后调用 Converter.convert_svg()

1from aspose.svg import SVGDocument
2from aspose.svg.converters import Converter
3from aspose.svg.saving import PdfSaveOptions
4
5# Convert an SVG file to PDF using the default save options
6options = PdfSaveOptions()
7
8with SVGDocument("document.svg") as document:
9    Converter.convert_svg(document, options, "document.pdf")

使用自定义保存选项将 SVG 转换为 PDF

需要控制 PDF 输出时使用 PdfSaveOptions。下面的示例设置透明背景,使页面适合 SVG 内容,修改栅格图像分辨率,并调整 JPEG 质量。

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.converters import Converter
 4from aspose.svg.drawing import Resolution
 5from aspose.svg.rendering import SizingType
 6from aspose.svg.saving import PdfSaveOptions
 7from aspose.pydrawing import Color
 8
 9# Convert SVG to PDF and customize page sizing and image quality
10input_folder = "data/"
11output_folder = "output/"
12input_path = os.path.join(input_folder, "document.svg")
13output_path = os.path.join(output_folder, "document.pdf")
14os.makedirs(output_folder, exist_ok=True)
15
16options = PdfSaveOptions()
17options.background_color = Color.from_argb(0, 255, 255, 255)
18options.page_setup.sizing = SizingType.FIT_CONTENT
19options.horizontal_resolution = Resolution.from_dots_per_inch(96.0)
20options.vertical_resolution = Resolution.from_dots_per_inch(96.0)
21options.jpeg_quality = 80
22
23with SVGDocument(input_path) as document:
24    Converter.convert_svg(document, options, output_path)

常用 PdfSaveOptions 属性

属性控制内容
background_colorSVG 有透明区域时的页面背景色
page_setup输出页面大小、边距和尺寸模式
horizontal_resolutionPDF 内栅格化资源的水平分辨率
vertical_resolutionPDF 内栅格化资源的垂直分辨率
jpeg_quality嵌入式栅格图像的 JPEG 压缩质量
document_info标题、作者、主题和关键字等 PDF 元数据
encryptionPDF 加密和权限设置

PdfSaveOptionsPdfRenderingOptions 继承 PDF 渲染设置,因此转换器工作流和设备工作流共享许多输出属性。

使用 render_to() 将 SVG 转换为 PDF

render_to() 方法将已加载的 SVG 文档发送到渲染设备。当应用已经使用 Aspose.SVG 渲染设备,或需要明确选择目标设备时,此模式很有用。

 1import os
 2from aspose.svg import SVGDocument
 3from aspose.svg.rendering import SizingType
 4from aspose.svg.rendering.pdf import PdfDevice, PdfRenderingOptions
 5
 6# Render SVG to PDF through a PdfDevice
 7input_folder = "data/"
 8output_folder = "output/"
 9input_path = os.path.join(input_folder, "document.svg")
10output_path = os.path.join(output_folder, "document.pdf")
11os.makedirs(output_folder, exist_ok=True)
12
13options = PdfRenderingOptions()
14options.jpeg_quality = 80
15options.page_setup.sizing = SizingType.FIT_CONTENT
16
17with SVGDocument(input_path) as document:
18    with PdfDevice(options, output_path) as device:
19        document.render_to(device)

Converter.convert_svg() 与 render_to()

方法适合场景
Converter.convert_svg()使用简洁代码和保存选项直接进行 SVG 到 PDF 转换
SVGDocument.render_to()使用 PdfDevice 等输出设备的渲染工作流

普通 SVG 到 PDF 转换建议从 Converter.convert_svg() 开始。它更简短,也更符合文件转换任务。需要渲染设备模式时再使用 render_to()

常见错误和修复

问题可能原因修复方法
PDF 页面大小不符合预期默认页面设置与 SVG viewport 或内容边界不匹配设置 options.page_setup.sizing,并显式配置页面大小或边距
透明 SVG 区域出现不需要的背景PDF 查看器或输出工作流应用了自己的背景转换前将 options.background_color 设为所需颜色
嵌入图像模糊或过大分辨率和 JPEG 质量设置不匹配输出目标调整 horizontal_resolutionvertical_resolutionjpeg_quality
没有创建输出 PDF目标文件夹不存在,或脚本保存到了其他工作目录使用 os.makedirs() 创建输出文件夹,并用 os.path.join() 构建路径
文本或外部资源缺失SVG 引用的字体、图像或 CSS 文件无法解析使用正确文件路径,并保持外部资源相对于 SVG 文档可用

在线 SVG 转 PDF 转换器

可使用免费的在线 SVG to PDF Converter 测试 SVG 到 PDF 转换。上传 SVG 文件,运行转换,并在 Python 中实现相同工作流前比较结果。

                
            

在线 SVG 转 PDF 转换器

FAQ

如何在 Python 中将 SVG 转换为 PDF?

使用 SVGDocument 加载 SVG,创建 PdfSaveOptions,然后调用 Converter.convert_svg(document, options, output_path)

可以在 SVG 转换期间设置 PDF 页面大小吗?

可以。使用 PdfSaveOptionsPdfRenderingOptionspage_setup 属性配置页面大小、边距和尺寸模式。

可以不使用 Converter 类将 SVG 转换为 PDF 吗?

可以。创建 PdfRenderingOptions,打开 PdfDevice,然后调用 document.render_to(device)

SVG 转 PDF 会保留透明度吗?

透明 SVG 内容可以保留,但可见结果取决于 PDF 查看器和工作流。如果需要可预测的页面背景,请设置 background_color

如何减小生成的 PDF 大小?

降低 jpeg_quality,减少嵌入式栅格图像分辨率,并在转换前简化大型或复杂 SVG 内容。

相关文章