之前有过一个需求,需要将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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐