Dwg To Svg

请问下,我想将转出来的图像,放在svg图像的左上角,而且svg的图像大小与图像内容保持一样的大小,可以实现吗?
另外请问,在中国有代理商吗,

@prozkb,
你好。
我想这是可能的,但是 DWG 和 SVG 的大小不同。你可以从这个例子开始:

using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(fileName))
{
     CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
     cadRasterizationOptions.DrawType = CadDrawTypeMode.UseObjectColor;
  
     SvgOptions svgOptions = new SvgOptions();
     svgOptions.VectorRasterizationOptions = cadRasterizationOptions;

     cadImage.Save(outPath, svgOptions);
}

我们没有本地中国支持人员。
如果你指的是中国的经销商,请在 Aspose.Purchase 类别中发帖,销售团队会帮助你。

非常感谢您的回复;
我想请问下,有没有控制生成图像大小的属性;
我现在有一个稍微复杂的dwg的图像,按照您的代码生成的svg图像,
在浏览器中观看的时候就特别大,浏览器的滑动滚轮就特别小;

我想只让生成的图像限制在比如width和height为1000内;
还有就是希望生成的图片是透明的;
有没有转svg的开发文档;
我只看到相关的只有
Convert DWG to SVG File Programmatically using C# (aspose.com)
并没有相关的属性介绍;

@prozkb,
如果有帮助,请尝试一下:

...
cadRasterizationOptions.PageHeight = 1000;
cadRasterizationOptions.PageWidth = 1000;
...

感谢,请问是否可以自适应呢,比如我的图像内容只有宽230,高280,然后不需要设置PageHeight /PageWidth 就可以自适应大小;

@prozkb,
当然可以。这些值通常来自各种尺寸和图纸,您可以随意在其中输入任何方便的值或公式。

感谢,有没有针对转svg的net 开发文档

@prozkb,
恐怕我们没有专门针对 SVG 的部分,您可以查看 docsAPI 参考。当然,也可以在这里随意提问 :slight_smile:

好的,谢谢 grinning:

1 Like

@prozkb,
我们很乐意提供帮助 :slight_smile:

请问,
1.aspose可以支持用C#,将两个svg的文件拼接在一起吗?
2.aspose支持离线操作吗?

@prozkb,
你好。

  1. 我想这是 Aspose.Imaging 团队的问题,我邀请他们在这里回答.
  2. 如果你指的是无需互联网即可工作,是的,Aspose 可以离线工作。

您好,@prozkb ,
Aspose.Imaging 是一个独立的图形 API。它允许处理和编辑 SVG。以下是一些有用参考资料的链接:

这是一个代码示例,它加载一个 SVG 图像并在第一个图像上绘制另一个具有指定大小的 SVG 图像。

var backgroundSvgPath = @"svg-1.svg";
var overlaySvgPath = @"svg-2.svg";
var outputSvgPath = backgroundSvgPath + "-Output.svg";

using (var inputSvg = Image.Load(backgroundSvgPath) as SvgImage)
{
    RasterImage rasterOverlay;
    using (var overlay = Image.Load(overlaySvgPath) as VectorImage)
    {
        rasterOverlay = ToPng(overlay, new SvgRasterizationOptions
        {
            PageSize = new SizeF(30, 30),
        });
    }

    var svgGraphics = new SvgGraphics2D(inputSvg);

    using (rasterOverlay)
    {
        svgGraphics.DrawImage(rasterOverlay, new Point(0, 0));
    }

    using (var outputSvg = svgGraphics.EndRecording())
    {
        outputSvg.Save(outputSvgPath);
    }
}

希望这能有所帮助。我们在这里回答您的问题!

柜子.7z (25.3 KB)

你好,我用下面的代码转了一个dxf的文件,但是转出来的太大了,没有控制输出图像大小的属性;
而且我想让转换后的svg图像被放置在左上角;
还有一个需求是,我想自定义视图的粗细怎么设置呢

 static void Main(string[] args)
 {
     string inputFile = @"D:\CADPictures\Dxf\TV1003.dxf";
     string outFile = @"D:\CADPictures\dxfConver\TV1003.svg";                       
    
     try
     {
         // Load DXF file
         using (Image image = Image.Load(inputFile))
         {
             // Create SVG options
             var options = new Aspose.CAD.ImageOptions.SvgOptions();
            

             // Save DXF as SVG
             image.Save(outFile, options);
         }
     }
     catch (Exception ex)
     {

         String Message = ex.StackTrace;
     }
 }

@prozkb,
请尝试通过以下选项设置尺寸:

...
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.PageWidth = 1000;
rasterizationOptions.PageHeight = 1000;

// this option could be used to decrease text width
rasterizationOptions.Quality.TextThicknessNormalization = true;

SvgOptions svgOptions = new Aspose.CAD.ImageOptions.SvgOptions();

svgOptions.VectorRasterizationOptions = rasterizationOptions;
...

线条的宽度取决于 DXF 及其设置方式(请同时附上 DXF 文件)。以下是如何使所有线条变细的示例:

using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(fileName))
{
	foreach (var entity in cadImage.Entities)
	{
		entity.LineWeight = 0;
	}

	foreach (Aspose.CAD.FileFormats.Cad.CadTables.CadLayerTable layer in cadImage.Layers)
	{
		layer.LineWeight = 0;
	}
}

你好,我这样试下来好像不起作用;
线条并没有加粗,我还有一点就是希望转出来的svg的图像可以保留dxf图像里原有的颜色;
控制粗细的应该是strokeWidth,但是我不知道怎么用的

 try
 {

     CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
     rasterizationOptions.PageWidth = 1000;
     rasterizationOptions.PageHeight = 1000;

     // this option could be used to decrease text width
     rasterizationOptions.Quality.TextThicknessNormalization = true;
     SvgOptions svgOptions = new Aspose.CAD.ImageOptions.SvgOptions();

     svgOptions.VectorRasterizationOptions = rasterizationOptions;

     // Load DXF file
     using (Image image = Image.Load(dxfFilePath))
     {

         using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(dxfFilePath))
         {
             foreach (var entity in cadImage.Entities)
             {
                 entity.LineWeight = 50;
             }

             foreach (Aspose.CAD.FileFormats.Cad.CadTables.CadLayerTable layer in cadImage.Layers)
             {
                 layer.LineWeight = 50;
             }
         }

         // Save DXF as SVG
         image.Save(outFile, svgOptions);
     }
 }
 catch (Exception ex)
 {
     String Message = ex.StackTrace;
 }

@prozkb,
请分享原始 DXF/DWG 文件。

视图.zip (151.8 KB)

已上传dxf的文件;
1.希望转成svg的图像
2.svg的图像保留原有的颜色
3.希望svg的图像默认被放置在左上角
4.希望可以更改svg图像的线条粗细

@prozkb,
请测试以下示例:

short newWidth = 50;

// Load DXF file
using (CadImage cadImage = (CadImage)Aspose.CAD.Image.Load(fileName))
{
    foreach (var entity in cadImage.Entities)
    {
        entity.LineWeight = newWidth;

        if (entity.TypeName == CadEntityTypeName.INSERT)
        {
            CadInsertObject cadInsert = (CadInsertObject)entity;
            SetLineWeight(cadImage, cadInsert, newWidth);
        }
    }

    foreach (Aspose.CAD.FileFormats.Cad.CadTables.CadLayerTable layer in cadImage.Layers)
    {
        layer.LineWeight = newWidth;
    }


    CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
    rasterizationOptions.PageHeight = 1000;
    rasterizationOptions.PageWidth = (int)(rasterizationOptions.PageHeight * cadImage.Width / cadImage.Height);

    rasterizationOptions.DrawType = CadDrawTypeMode.UseObjectColor;

    // this option could be used to decrease text width
    rasterizationOptions.Quality.TextThicknessNormalization = true;

    SvgOptions svgOptions = new Aspose.CAD.ImageOptions.SvgOptions();
    svgOptions.VectorRasterizationOptions = rasterizationOptions;


    // Save DXF as SVG
    cadImage.Save("result.svg", svgOptions);
}

private static void SetLineWeight(CadImage cadImage, CadInsertObject cadInsert, short newWeight)
{
	CadBlockEntity block = cadImage.BlockEntities[cadInsert.Name];

	foreach (CadEntityBase blockEntity in block.Entities)
	{
		blockEntity.LineWeight = newWeight;

		if (blockEntity.TypeName == CadEntityTypeName.INSERT)
		{
			SetLineWeight(cadImage, (CadInsertObject)blockEntity, newWeight);
		}
	}
}

一些附加说明:需要保留原始绘图的高度与宽度比以避免空白,并注意已应用保留颜色的选项。此外,我们需要在导出之前迭代 DXF 中的所有实体并更改它们的线宽(包括块内的实体和块内的块)。

感谢
image.png (24.7 KB)

我想咨询下,这个license的数量是什么意思;
一个license是只能用于一台电脑吗?