使用cad包将dwg转换为pdf,转换后的pdf是空白的

使用产品: Aspose.CAD for Java 22.1版本
使用cad包将1.zip里的1.dwg转换为pdf,转换后的pdf是空白的
1.zip (9.2 KB)

@aaaConvert,
您好,我可以确认问题并创建 CADJAVA-10628 以更好地调查它。

你好,这个bug修复了没?

@aaaConvert,
你好,很遗憾,还没有完成,计划22.8版本。

@aaaConvert,
您好,请问 cadImage.UpdateSize() 能否解决问题?

直接用 cadImage.UpdateSize()可以;不过目前是cadImage.getUnitType()为UnitType.Unitless 才使用cadImage.UpdateSize()。1.zip里的dwg文件cadImage.getUnitType()为3,3为UnitType.Millimeter。目前代码如下:
int unitType = cadImage.getUnitType();
boolean isMetric = false;
double coefficient = 1.0;
switch (unitType) {
case UnitType.Parsec:
coefficient = 3.0857 * 10000000000000000.0;
isMetric = true;
break;
case UnitType.LightYear:
coefficient = 9.4607 * 1000000000000000.0;
isMetric = true;
break;
case UnitType.AstronomicalUnit:
coefficient = 1.4960 * 100000000000.0;
isMetric = true;
break;
case UnitType.Gigameter:
coefficient = 1000000000.0;
isMetric = true;
break;
case UnitType.Kilometer:
coefficient = 1000.0;
isMetric = true;
break;
case UnitType.Decameter:
isMetric = true;
coefficient = 10.0;
break;
case UnitType.Hectometer:
isMetric = true;
coefficient = 100.0;
break;
case UnitType.Meter:
isMetric = true;
coefficient = 1.0;
break;
case UnitType.Centimenter:
isMetric = true;
coefficient = 0.01;
break;
case UnitType.Decimeter:
isMetric = true;
coefficient = 0.1;
break;
case UnitType.Millimeter:
isMetric = true;
coefficient = 0.001;
break;
case UnitType.Micrometer:
isMetric = true;
coefficient = 0.000001;
break;
case UnitType.Nanometer:
isMetric = true;
coefficient = 0.000000001;
break;
case UnitType.Angstrom:
isMetric = true;
coefficient = 0.0000000001;
break;
case UnitType.Inch:
coefficient = 1.0;
break;
case UnitType.MicroInch:
coefficient = 0.000001;
break;
case UnitType.Mil:
coefficient = 0.001;
break;
case UnitType.Foot:
coefficient = 12.0;
break;
case UnitType.Yard:
coefficient = 36.0;
break;
case UnitType.Mile:
coefficient = 63360.0;
break;
case UnitType.Unitless:
// 无制图单位时更新文件大小
cadImage.updateSize();
break;
}

		if (isMetric) {
			double metersCoeff = 1 / 1000.0;
			double scaleFactor = metersCoeff / coefficient;
			if (cadImage.getWidth() <= cadImage.getHeight()) {
				rasterizationOptions.setPageWidth((float) (210 * scaleFactor));
				rasterizationOptions.setPageHeight((float) (297 * scaleFactor));
			} else {
				rasterizationOptions.setPageWidth((float) (297 * scaleFactor));
				rasterizationOptions.setPageHeight((float) (210 * scaleFactor));
			}
			rasterizationOptions.setUnitType(UnitType.Millimeter);
		} else {
			if (cadImage.getWidth() <= cadImage.getHeight()) {
				rasterizationOptions.setPageWidth((float) (8.27f / coefficient));
				rasterizationOptions.setPageHeight((float) (11.69f / coefficient));
			} else {
				rasterizationOptions.setPageWidth((float) (11.69f / coefficient));
				rasterizationOptions.setPageHeight((float) (8.27f / coefficient));
			}
			rasterizationOptions.setUnitType(UnitType.Inch);
		}	

请问什么时候使用 cadImage.UpdateSize() ?

@aaaConvert,
当我们从文件中获取图形的大小时,我们依赖于标题中的范围值。 在极少数情况下,这些值在 DWG 中不正确。 我们不知道原因,不幸的是,除了直观地看到结果出现问题外,没有标准可以检测到这一点。 CadImage.UpdateSize() 迭代所有实体并更新绘图的大小。 我想,在 99% 的情况下调用它是无用的,并且需要一些时间,但在你的情况下它会有所帮助。

你好,我们碰到少部分dwg转换有这个问题,大部分dwg转换是正常的。请问什么条件下用cadImage.UpdateSize()?怎么判断?

请问,有什么方法能在cadImage.save(toPath, pdfOptions);前判断出转换后pdf是空白的?如果在cadImage.save(toPath, pdfOptions);前可以判断出转换后pdf是空白的,就可以再调用下转换方法 ,转换方法中会使用cadImage.UpdateSize()。

@aaaConvert.
不幸的是,没有办法做出这个决定。 在导出之前我们需要大小值。 有时尺寸不正确。 我的建议:如果生成的 pdf 很小(例如 < 1 KB),您可以使用 UpdateSize 再次导出。

好的,谢谢了,我一会试试。

1 Like