cad文件转pdf,设置pageSize无效

新建文件夹.zip (3.2 MB)

这里面是我的cad文件和代码

@humanhuman,
你好。
您需要根据绘图单位和所需物理尺寸(以毫米或英寸为单位)设置尺寸(A3 为 297 毫米 x 420 毫米,或 11.7 英寸 x 16.5 英寸)

    boolean isMetric = false;
    double coefficient = 1.0;

    switch (cadImage.getUnitType())
    {
        // you should probably extend this with more types that may appear in drawings

        case UnitType.Meter:
            isMetric = true;
            coefficient = 1.0;
            break;
        case UnitType.Millimeter:
            isMetric = true;
            coefficient = 0.001;
            break;
        case UnitType.Inch:
            coefficient = 1.0;
            break;
    }

    SizeF size;
    if (isMetric)
    {
        double metersCoeff = 1 / 1000.0;
        double scaleFactor = metersCoeff / coefficient;
        size = new SizeF((float)(297 * scaleFactor), (float)(420 * scaleFactor));
        cadRasterizationOptions.setUnitType(UnitType.Millimeter);
    }
    else
    {
        size = new SizeF((float)(11.7f / coefficient), (float)(16.5f / coefficient));
        cadRasterizationOptions.setUnitType(UnitType.Inch);
    }

    //设置纸张方向,默认纵向,
    cadRasterizationOptions.setPageSize(size);

cad文件较大时,转换为A4格式的pdf后,内容会变得不清晰,是否有办法提升清晰度

@humanhuman,
如果将大图导出为小尺寸,这很复杂,有时甚至无法使它看起来更好。 您可以尝试不导出到 A4,而是导出到一些更大的合理页面尺寸,如 1600x1600。 您可以将选项中的大小留空,绘图将自动缩放。 您可以尝试导出布局而不是模型。 您也可以向我们展示初始文件和结果,我们将考虑其他设置/改进/修复以使其看起来更好。

我该如何根据cad的图像尺寸选择最优的转换出来的pdf尺寸,因为我如果不设置尺寸,会导致转换出来的pdf很大,我需要在文件大小尽量小和图像尽量清晰中,选择最好的尺寸,这个尺寸最好能根据cad文件来判断

@humanhuman,
您可以使用 cadImage 对象的高度和宽度属性来了解什么尺寸最适合您。 但通常没有总是好的解决方案,一切都取决于您的图纸和尺寸/质量要求的多样性。

我们这样来判断尺寸不知道是否合理:
int unitType = cadImage.getUnitType();
switch (unitType) {
// you should probably extend this with more types that may appear in drawings

        case UnitType.Meter:
            isMetric = true;
            coefficient = 1.0;
            break;
        case UnitType.Millimeter:
            isMetric = true;
            coefficient = 0.001;
            break;
        case UnitType.Inch:
            coefficient = 1.0;
            break;
        case UnitType.Centimenter:
            isMetric = true;
            coefficient = 0.01;
            break;
        case UnitType.Micrometer:
            isMetric = true;
            coefficient = 1000;
            break;
        case UnitType.Decimeter:
            isMetric = true;
            coefficient = 0.1;
            break;
        case UnitType.Decameter:
            isMetric = true;
            coefficient = 10;
            break; 
        case  UnitType.Hectometer:
            isMetric = true;
            coefficient = 100;
            break;
    }
    SizeF size;
    if (isMetric) {
        double metersCoeff = 1 / 1000.0;
        double scaleFactor = metersCoeff / coefficient;
        if(cadImage.getWidth() > cadImage.getHeight()){
            size = new SizeF((float)(297 * scaleFactor), (float)(210 * scaleFactor));//宽在前  高在后   
        }else {
            size = new SizeF((float)(210 * scaleFactor), (float)(297 * scaleFactor));//宽在前  高在后     
        }
        cadRasterizationOptions.setUnitType(UnitType.Millimeter);
    } else {
        if(cadImage.getWidth() > cadImage.getHeight()){
            size = new SizeF((float)(11.69f / coefficient), (float)(8.27f / coefficient));   
        }else {
            size = new SizeF((float)(8.27f / coefficient), (float)(11.69f / coefficient));     
        }
        cadRasterizationOptions.setUnitType(UnitType.Inch);
    }

或者可以多提供一些dwg(UnitType为厘米)的文件供我们测试吗

@humanhuman,
恐怕我不能分享我们的测试文件。 我刚刚测试了以 cm 为单位的随机绘图,转换为 A4 看起来不错。 如果您发现特定文件有问题,请将其附在此处,我们会查看。 顺便说一句,我在你的最后一个例子中没有看到你应用了尺寸:cadRasterizationOptions.setPageSize(size); 但我想这只是错字。