之前有过一个需求,需要将CAD的DWG文件转成SVG,再对图形做处理,简单写了dwg转成svg的解析,后续补充对解析后对的svg图形处理(如:图形位置调整、图形绝对坐标计算等),处理svg文件的计算需要对SVG的相关知识作了解,比如svg代码里的一些属性:

附上w3 school svg教程地址:SVG 教程

一、依赖包引入

        <dependency><groupId>com.aspose</groupId><artifactId>aspose-cad</artifactId><version>21.8</version></dependency>

注意:如果下载不了aspose-cad包,需要加上这段

    <!--解决下载不了aspose-cad包的问题--><repositories><repository><id>aspose-maven-repository</id><url>https://repository.aspose.com/repo</url><snapshots><enabled>false</enabled></snapshots></repository></repositories>

二、cad文件解析到svg文件

    public static void main(String[] args) {String cadFilePath = "/Users/Desktop/cad.dwg";try{File file = new File(cadFilePath);InputStream inputStream = new FileInputStream(file);String pdfFilePath = "/Users/Desktop/cad.svg";CadImage cadImage = (CadImage) CadImage.load(inputStream);SvgOptions svgOptions = new SvgOptions();CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();rasterizationOptions.setAutomaticLayoutsScaling(true);rasterizationOptions.setContentAsBitmap(true);rasterizationOptions.setLayouts(new String[]{"Model"});rasterizationOptions.setDrawType(1);// SVG 全局背景色//      rasterizationOptions.setBackgroundColor(Color.getRed());//      rasterizationOptions.setDrawColor(Color.fromName("Lime"));rasterizationOptions.setExportAllLayoutContent(false);svgOptions.setVectorRasterizationOptions(rasterizationOptions);// 设置一个值,该值指示是否必须将文本转换为形状svgOptions.setTextAsShapes(true);//      svgOptions.setMinimumLinewidth((float) 0.3);//      svgOptions.setMinimumLinewidth(0.1f);// 是否应重新调整子像素线宽 。 false 不调整. 设svgOptions.setRescaleSubpixelLinewidths(false);//      svgOptions.setUseAbsoluteRescaling(true);System.out.println("开始转换为SVG");cadImage.save(pdfFilePath, svgOptions);System.out.println("转换完成");}catch (Exception e){e.printStackTrace();}}

 注释了一些用不到的属性,具体属性的说明aspose官网:CadImage – Aspose.CAD for Java – API Reference

 三、默认是以解析的图形尺寸进行转换,如果需要设置解析后的SVG尺寸

        CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();rasterizationOptions.setPageWidth(800);rasterizationOptions.setPageHeight(800);

留个问题:这段代码更新到服务器上后,每次服务器重启时,第一次解析总会失败,后续则会正常,这个问题始终没找到,望大佬指教!!!!

附上异常:com.aspose.cad.cadexceptions.ImageSaveException: Image export failed. Exception in SVG Exporter