Aspose.CAD.Java大尺寸的DWG转换成SVG显示不全

一、代码如下:

 try {
            init();
            // 加载CAD文件
            String inputPath = "D:\\IdeaProjects\\cplinkerp\\NT-DP06X.DWG";
            LoadOptions opts = new LoadOptions();
            opts.setSpecifiedEncoding(CodePages.SimpChinese);
            CadImage cadImage = (CadImage) Image.load(inputPath, opts);
            RasterizationQuality rasterizationQuality = new RasterizationQuality();
            rasterizationQuality.setArc(RasterizationQualityValue.High);
            rasterizationQuality.setHatch(RasterizationQualityValue.High);
            rasterizationQuality.setText(RasterizationQualityValue.High);
            rasterizationQuality.setOle(RasterizationQualityValue.High);
            rasterizationQuality.setObjectsPrecision(RasterizationQualityValue.High);
            rasterizationQuality.setTextThicknessNormalization(true);
            CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
            cadRasterizationOptions.setBackgroundColor(Color.getBlack());
            cadRasterizationOptions.setUnitType(cadImage.getUnitType());
            // 设置布局
            cadRasterizationOptions.setLayouts(new String[]{"Model"});
            cadRasterizationOptions.setAutomaticLayoutsScaling(false); // 禁用自动缩放
            cadRasterizationOptions.setScaleMethod(ScaleType.None); // 不进行缩放

            // 获取实际图形范围并设置
            Rectangle bounds = cadImage.getBounds();
            double width = bounds.getWidth();
            double height = bounds.getHeight();
            System.out.println("图形宽度:" + width + ", 高度:" + height);

            // 计算合适的尺寸
            int targetWidth = 1000; // 设置一个目标宽度
            double scale = targetWidth / width;
            int targetHeight = (int)(height * scale);

            // 设置页面尺寸
            cadRasterizationOptions.setPageWidth(targetWidth);
            cadRasterizationOptions.setPageHeight(targetHeight);
            cadRasterizationOptions.setQuality(rasterizationQuality);
            cadRasterizationOptions.setDrawType(CadDrawTypeMode.UseObjectColor);
            cadRasterizationOptions.setExportAllLayoutContent(true);
            cadRasterizationOptions.setVisibilityMode(VisibilityMode.AsScreen);
            final SvgOptions SvgOptions = new SvgOptions();
            SvgOptions.setVectorRasterizationOptions(cadRasterizationOptions);

/*            final PdfOptions pdfOptions = new PdfOptions();
            pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);
            final TiffOptions TiffOptions = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
            TiffOptions.setVectorRasterizationOptions(cadRasterizationOptions);*/

//            svgOptions.setTextAsShapes(false);
//            svgOptions.setVectorRasterizationOptions(cadRasterizationOptions);


// 保存为SVG文件
            String outFile = "D:\\IdeaProjects\\cplinkerp\\output4.svg";

            cadImage.save(outFile, SvgOptions);


        } catch (Exception ex) {
            System.out.println("Error occurred: " + ex.getMessage());
            ex.printStackTrace();
        }


    }

DWG测试文件
image.png (46.5 KB)
上面代码进行DWG文件转换成SVG时缺失部分内容。

当把代码改成这样之后,转换的图像完整,但是空白的部分很多

 try {
            init();
            // 加载CAD文件
            String inputPath = "D:\\IdeaProjects\\cplinkerp\\NT-DP06X.DWG";
            LoadOptions opts = new LoadOptions();
            opts.setSpecifiedEncoding(CodePages.SimpChinese);
            CadImage cadImage = (CadImage) Image.load(inputPath, opts);
            RasterizationQuality rasterizationQuality = new RasterizationQuality();
            rasterizationQuality.setArc(RasterizationQualityValue.High);
            rasterizationQuality.setHatch(RasterizationQualityValue.High);
            rasterizationQuality.setText(RasterizationQualityValue.High);
            rasterizationQuality.setOle(RasterizationQualityValue.High);
            rasterizationQuality.setObjectsPrecision(RasterizationQualityValue.High);
            rasterizationQuality.setTextThicknessNormalization(true);
            CadRasterizationOptions cadRasterizationOptions = new CadRasterizationOptions();
            cadRasterizationOptions.setBackgroundColor(Color.getBlack());
            cadRasterizationOptions.setUnitType(cadImage.getUnitType());
            cadRasterizationOptions.setAutomaticLayoutsScaling(true); // 禁用自动缩放
            // 获取实际图形范围并设置
            Rectangle bounds = cadImage.getBounds();
            double width = bounds.getWidth();
            double height = bounds.getHeight();
            System.out.println("图形宽度:" + width + ", 高度:" + height);


            cadRasterizationOptions.setQuality(rasterizationQuality);
            cadRasterizationOptions.setDrawType(CadDrawTypeMode.UseObjectColor);
            cadRasterizationOptions.setExportAllLayoutContent(true);
            cadRasterizationOptions.setVisibilityMode(VisibilityMode.AsScreen);
            final SvgOptions SvgOptions = new SvgOptions();
            SvgOptions.setVectorRasterizationOptions(cadRasterizationOptions);

/*            final PdfOptions pdfOptions = new PdfOptions();
            pdfOptions.setVectorRasterizationOptions(cadRasterizationOptions);

 */
            final TiffOptions TiffOptions = new TiffOptions(TiffExpectedFormat.TiffJpegRgb);
            TiffOptions.setVectorRasterizationOptions(cadRasterizationOptions);

//            svgOptions.setTextAsShapes(false);
//            svgOptions.setVectorRasterizationOptions(cadRasterizationOptions);


// 保存为SVG文件
            String outFile = "D:\\IdeaProjects\\cplinkerp\\output4.svg";

            cadImage.save(outFile, SvgOptions);


        } catch (Exception ex) {
            System.out.println("Error occurred: " + ex.getMessage());
            ex.printStackTrace();
        }

@atlal,
你好。
遗憾的是,这张图片出现了一些问题。

第一个很难预测:绘图应该包含正确的绘图尺寸(EXTMIN、EXTMAX 标头值),但有时我们发现它们不正确。除了始终调用 cadImage.UpdateSize()(这可能很耗时)之外,没有其他方法可以提前知道这一点。以下是目前存储在文件中的值:EXTMIN = -7921.7407、-8859.6053、0.0000(只读)、EXTMAX = 4722.6175、-7031.7679、0.0000(只读),它们使绘图比实际大得多。

加载图纸后调用 cadImage.UpdateSize() 可解决此问题。

如果您使用 ScaleType.None,您将只能看到当前可见的绘图部分,如果您需要整个绘图,请忽略此选项。

最后,我们在此绘图中的颜色形成方面遇到了一些内部问题。我们创建了 CADJAVA-11847 来调查并修复该问题。