如何在转换SVG时调整文档大小? – C#
在当今世界,大多数文档都是A4格式,但有时从SVG渲染的内容大小不同。这会导致页面上有很多空白,或者内容根本无法适应页面!在本文中,我们将考虑如何使用渲染选项将文档页面调整为内容的大小,反之亦然。
如何在使用Aspose.SVG渲染时调整文档大小
Aspose.Svg.Rendering命名空间提供了一套强大的工具,如低级选项类、接口和枚举,用于将SVG文档渲染为不同的输出格式,如PDF、XPS和图像。默认情况下,SVG被转换为A4大小的文档,可能包含一些空白空间以及图像。但有时,您可能需要裁剪文档以创建适合页面内容大小的较小页面。
PageSetup类提供了一组属性,用于管理SVG文档在渲染为不同文件格式时的页面设置。让我们看看一些更常用的属性:
- 设置页面设置。 AnyPage属性允许您为渲染为多页格式(如PDF、XPS、PNG、JPG等)的SVG文档的任何页面设置页面设置(大小、边距、方向等)。使用 Page、 Size和 Margin类来管理SVG文档在渲染为不同文件格式时的页面设置。
- 调整文档以适应内容大小。 您可以使用 Sizing属性和 SizingType枚举将页面大小适应内容,反之亦然。此属性是一组位标志,控制渲染器的行为。您可以裁剪文档或缩放文档以使其内容与页面大小匹配。
您可以轻松使用本文中的C#示例将SVG转换为图像、PDF和XPS,并使用自定义页面布局。唯一的区别在于指定:
- 适当的渲染选项 – ImageRenderingOption、PdfRenderingOption或XpsRenderingOption;
- 适当的输出设备 – ImageDevice、PdfDevice或XpsDevice。
使用默认渲染选项将SVG转换为PNG
要使用默认渲染选项将SVG转换为PNG,您应遵循几个步骤:
- 使用其中一个
SVGDocument()构造函数初始化
document
实例。在以下示例中,我们加载一个本地SVG文件。 - 如果您想将SVG转换为图像文件格式,请初始化
ImageRenderingOption类的实例。默认情况下,
ImageFormat
为PNG。 - 创建
ImageDevice类的新实例。使用接受
options
和输出文件路径savePath
作为参数的ImageDevice()构造函数。 - 使用
RenderTo(
device
)方法将SVG转换为PNG,该方法接受device
对象作为参数。
以下C#代码片段展示了如何在没有任何额外选项的情况下将SVG文档转换为图像,即使用默认渲染选项。转换的结果是获得了一个A4 PNG文档,里面有很多空白(见 转换结果插图(a))。
1using Aspose.Svg.Rendering;
2using Aspose.Svg.Rendering.Image;
3using System.IO;
4...
5
6 // 准备源SVG文件的路径
7 string documentPath = Path.Combine(DataDir, "rendering.svg");
8
9 // 准备保存转换文件的路径
10 string savePath = Path.Combine(OutputDir, "a4.png");
11
12 // 创建SVGDocument类的实例
13 using SVGDocument document = new SVGDocument(documentPath);
14
15 // 使用默认选项初始化ImageRenderingOptions对象
16 ImageRenderingOptions opt = new ImageRenderingOptions();
17
18 // 创建输出渲染设备并转换SVG
19 using ImageDevice device = new ImageDevice(opt, savePath);
20 document.RenderTo(device);
渲染选项
Aspose.Svg.Rendering命名空间中的 SizingType枚举指定标志,这些标志与其他 PageSetup选项一起定义在渲染SVG文档时调整页面大小或内容大小的不同策略。
名称 | 描述 |
---|---|
FitContent | 调整页面大小以适应内容而不进行缩放。这确保所有SVG内容在没有额外边距的情况下可见。适用于内容应决定页面大小的文档。 |
ScaleContent | 缩放内容以适应预定义的页面大小。内容的纵横比可以更改以适应指定的尺寸。当您需要内容适应固定页面布局时,此选项非常有用。 |
Contain | 调整内容以适应页面尺寸,同时保持纵横比。与ScaleContent 不同,此方法确保纵横比保持不变,这可能导致空白区域,如果内容的纵横比与页面不同。 |
Crop | 将内容适应页面并裁剪超出某些页面边界的部分。 |
在将SVG转换为JPG时将页面适应SVG内容
为了使输出图像的页面大小适应内容的宽度和高度,您需要使用FitContent
标志,该标志将调整页面大小以适应内容而不进行缩放。让我们看看您应遵循的步骤:
- 加载SVG文件。在示例中,
SVGDocument(
documentPath
)构造函数从本地文件系统加载SVG文档。 - 创建
ImageRenderingOption类的实例。在此示例中,我们将
SizingType
设置为FitContent
,这意味着输出文档的页面大小将适应内容的宽度和高度而不进行缩放。 - 创建
ImageDevice类的新实例,并将其传递给
RenderTo(
device
)方法以将SVG转换为JPG。
1using Aspose.Svg.Rendering;
2using Aspose.Svg.Rendering.Image;
3using System.IO;
4...
5 // 准备源SVG文件的路径
6 string documentPath = Path.Combine(DataDir, "rendering.svg");
7
8 // 准备保存转换文件的路径
9 string savePath = Path.Combine(OutputDir, "fitContent.jpg");
10
11 // 创建SVGDocument类的实例
12 using SVGDocument document = new SVGDocument(documentPath);
13
14 // 使用自定义选项初始化ImageRenderingOptions对象。使用FitContent标志
15 ImageRenderingOptions opt = new ImageRenderingOptions(ImageFormat.Jpeg);
16 opt.PageSetup.Sizing = SizingType.FitContent;
17
18 // 创建输出渲染设备并转换SVG
19 using ImageDevice device = new ImageDevice(opt, savePath);
20 document.RenderTo(device);
将SVG转换为JPG的结果是一个JPG文档,其页面大小适合SVG内容(见 转换结果插图(b))。
注意: 在将SVG转换为光栅格式(如JPG)时,由于分辨率(DPI)的差异,图像的像素大小可能会发生变化。SVG是分辨率无关的,这意味着它们的尺寸是在坐标系统中定义的,而不是以固定像素为单位。在转换时,默认分辨率设置为300 DPI,而标准屏幕分辨率为96 DPI。这导致输出图像更大,因为像素大小按比例缩放。例如,350 x 350单位的SVG将在300 DPI下转换为大约1094 x 1094像素。为了保持原始尺寸,在转换时指定所需的分辨率非常重要。
在本文中的所有示例中,我们使用源rendering.svg
文件 – 350 x 350 px。
在将SVG渲染为JPG时缩放内容
在以下示例中,
AnyPage属性将页面大小设置为1500x3000像素,这比所需的SVG文档内容要大。使用SizingType
与ScaleContent
标志缩放SVG内容以适应页面:
1using Aspose.Svg.Rendering;
2using Aspose.Svg.Rendering.Image;
3using Aspose.Svg.Drawing;
4using System.IO;
5...
6 // 准备源SVG文件的路径
7 string documentPath = Path.Combine(DataDir, "rendering.svg");
8
9 // 准备保存转换文件的路径
10 string savePath = Path.Combine(OutputDir, "scaleContent.png");
11
12 // 创建SVGDocument类的实例
13 using SVGDocument document = new SVGDocument(documentPath);
14
15 // 使用自定义选项初始化ImageRenderingOptions对象。使用ScaleContent标志
16 ImageRenderingOptions opt = new ImageRenderingOptions();
17 opt.PageSetup.AnyPage = new Page(new Drawing.Size(1500, 3000));
18 opt.PageSetup.Sizing = SizingType.ScaleContent;
19
20 // 创建输出渲染设备并转换SVG
21 using ImageDevice device = new ImageDevice(opt, savePath);
22 document.RenderTo(device);
SVG到PNG的转换结果是一个1500x3000的PNG图像,该图像在不保持纵横比的情况下被缩放(放大)(见 转换结果插图(c))。
使用Contain
标志缩放内容
Contain
标志控制内容的大小,并允许在保持纵横比的同时进行缩放。内容被缩放,直到适合页面的宽度或高度。以下示例展示了如何在设置页面大小为2000x2500像素的情况下使用Contain
标志。如果未设置页面大小,结果将在渲染时缩放并适应A4格式。
1using Aspose.Svg.Rendering;
2using Aspose.Svg.Rendering.Image;
3using System.IO;
4...
5 // 准备源SVG文件的路径
6 string documentPath = Path.Combine(DataDir, "rendering.svg");
7
8 // 准备保存转换文件的路径
9 string savePath = Path.Combine(OutputDir, "using-contain.png");
10
11 // 初始化SVGDocument
12 using SVGDocument document = new SVGDocument(documentPath);
13
14 // 使用自定义选项初始化PdfRenderingOptions对象。使用Contain标志
15 ImageRenderingOptions opt = new ImageRenderingOptions();
16 opt.PageSetup.AnyPage = new Page(new Drawing.Size(2000, 2500));
17 opt.PageSetup.Sizing = SizingType.Contain;
18
19 // 创建输出渲染设备并转换SVG
20 using ImageDevice device = new ImageDevice(opt, savePath);
21 document.RenderTo(device);
在示例中,PageSetup
的
AnyPage属性设置了一个新的
Page对象,大小为2000x2500像素。这将页面大小设置为2000x2500像素。
然后我们将PageSetup
对象的
Sizing属性设置为包含Contain
标志。这意味着输出文档的内容将被缩放以适应页面的宽度或高度,同时保持其比例。在此示例中,图像适合页面的宽度(见
转换结果插图(d))。
裁剪SVG到PNG渲染结果
要将输出页面大小裁剪到所需的宽度和高度,您需要先设置页面大小,然后在
Sizing属性中设置SizingType.Crop
标志。如果您不设置所需的页面尺寸,则默认选择A4大小。
1using Aspose.Svg.Rendering;
2using Aspose.Svg.Rendering.Image;
3using Aspose.Svg.Drawing;
4using System.IO;
5...
6 // 准备源SVG文件的路径
7 string documentPath = Path.Combine(DataDir, "rendering.svg");
8
9 // 准备保存转换文件的路径
10 string savePath = Path.Combine(OutputDir, "using-crop.jpg");
11
12 // 初始化SVGDocument
13 using SVGDocument document = new SVGDocument(documentPath);
14
15 // 使用自定义选项初始化ImageRenderingOptions对象。使用Crop标志
16 ImageRenderingOptions opt = new ImageRenderingOptions(ImageFormat.Jpeg);
17 opt.PageSetup.AnyPage = new Page(new Drawing.Size(500, 500));
18 opt.PageSetup.Sizing = SizingType.Crop;
19
20 // 创建输出渲染设备并转换SVG
21 using ImageDevice device = new ImageDevice(opt, savePath);
22 document.RenderTo(device);
转换结果的图示
该图显示了将rendering.svg
文件转换为PNG和JPG格式的结果,使用了RenderTo()
方法和各种控制输出文档页面大小的渲染选项。
注意: 源SVG图像为350x350像素。
a) 使用默认渲染选项将SVG转换为PNG的结果是一个A4页面大小的PNG文档,里面有很多空白。渲染的图像在A4页面上在高度和宽度上被拉伸了大约3倍,因为默认分辨率为300 dpi。
b) 将SVG转换为JPG的结果是一个JPG文档,其页面宽度和高度适合内容的宽度和高度。渲染的图像在高度和宽度上被拉伸了大约3倍,因为默认分辨率为300 dpi。
c) 使用缩放(放大)而不保持比例的情况下,将SVG转换为PNG的结果。
d) SVG到PNG的转换结果是一个PNG文档,其中SVG图像被缩放以适应输出页面的宽度,同时保持图像的纵横比。
另请参阅
- 如何转换SVG文件 – 您将学习如何将SVG转换为其他格式的C#代码示例,并尝试在线转换器SVG。
- 如何合并SVG文件 – 您将学习如何使用Render()方法将多个SVG合并为PDF、XPS或图像格式,并找到SVG合并的C#示例。
- 矢量化 – 基本概述 – 本节中的文章解释了如何使用Aspose.SVG for .NET API将光栅图像转换为矢量图形。