使用产品: Aspose.CAD for Java 22.1版本
使用cad包将1.zip里的1.dwg转换为pdf,转换后的pdf是空白的
1.zip (9.2 KB)
你好,这个bug修复了没?
直接用 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 再次导出。
好的,谢谢了,我一会试试。