DWG转DXF指定字体后中文是乱码的

 val loadOptions = LoadOptions().also{
     it.specifiedEncoding=CodePages.SimpChineseOtherGb2312
 }
 val cadImage = (Image.load(dwgPath,loadOptions) as CadImage).apply {
     fileEncoding = CodePages.SimpChineseOtherGb2312
     styles.forEach { style ->
         val realStyle = style as CadStyleTableObject
         val font = realStyle.primaryFontName
         if ("txt".equals(font, ignoreCase = true)) {
             return@forEach
         }
         realStyle.primaryFontName = "simsun"
     }
 }
 return  dwgPath.replace(".dwg",".dxf").also {dxfPath->
     cadImage.save(dxfPath)
     cadImage.close()
 }

我对DWG文件进行转换并且设置了编码。在加载后使用了for循环对primaryFontName进行了指定为simsun 但是最后转换出来的dxf中的中文依然是乱码的 我想请问下这个是什么清空,是否是我转换错误了

@setruth,
你好。

请提供初始 DWG,以便我们可以看到问题。 能否请您指出截图中乱码具体在哪里?

丁家渠.7z (125.8 KB)

这是我的文件 后续我进行dxf的转换后发现直接打不开dxf文件了 报错文件有误 我使用的是官方的例子进行转换的,转换后里面的所有中文都乱码,并不是某几个地方

我使用的是com.aspose:aspose-cad:23.10 23.10的版本

@setruth,
请帮助我们更好地理解问题,以了解原因和后果 :slight_smile:

  1. 您的目标只是将 DWG 转换为 DXF 吗? 或者您的目标是通过字体替换进行转换?
  2. 您最初是想用 simsun 替换字体还是因为您注意到 DXF 存在一些问题而这样做?
  3. 能否给我们看一下中文乱码的截图? 你这是什么意思?
    4.能否请您看一下附件中的结果dxf,是否正常?
    result_recovered.zip (65.1 KB)

好的

  1. 首先我是希望将DWG转为DXF,我之前尝试过转换然后转换成功了,可以查看dxf文件,但是这时候的dxf文件内容的中文是乱码的,然后我在网上搜了下发现需要手动修改字体,修改完后我发现还是乱码的,我希望转为dxf并且字体是正确的

  2. 由于我转换为dxf后dxf内容的中文变成了乱码所以我才尝试使用simsun 字体来进行替换,

  3. 我现在无法提供截图 因为我后面同步了aspose例子中的代码
    DWGTODXF,并且版本设置为了最新的23.10后发现我转换出来的dxf文件直接打不开了,打开会报错说读取异常
    4。你们发送的这份附件中的文件也是读取异常 无法打开
    image.png (165.6 KB)

@setruth,
好的,我明白了,非常感谢!
这个附件怎么样?
result_recovered2.zip (55.3 KB)

很不幸这个文件也和之前的结果一样是无法打开的
cad的dwg图在什么情况下会变成这样呢,这是个很奇怪的情况,我之前尝试过dwg转svg 但是这个文件转出来的svg内容是空的 但是svg是有代码内容的不知道什么情况,别的文件又是可以正常转换的

@setruth,
我可以确认 DWG 到 DXF 转换后结果无法打开,我们应该解决这个问题。 ODA 查看器提供了恢复文件的选项,即 result_recovered.dxf,可以使用 ODA 和 AutoCAD 成功打开该文件。 我直接用AutoCAD又保存了一次,即result_recovered2.dxf,同样可以在ODA和AutoCAD中打开。

您能否提供您用于查看的软件的直接参考?

CAD快速看图官方网站 - 愿天下没有看不了的图纸 (glodon.com)
这是我使用的查图软件,使用ODA和AutoCAD可以打开吗?还是说使用ODA进行恢复才能打开呢?我发送到我的手机上我试了许多查看的软件都无法正常查看

如果cad图是受保护的那么是不是无法转换为dxf?但是按照正常逻辑来说如果是受保护的那么应该无法转换才对,但是我之前用20.1的版本的依赖可以转换为dxf 不过转换为dxf后转换为别的任何文件都会出现错误

@setruth,
我们经常将 AutoCAD 称为与 DWG/DXF 一起使用的“标准具”软件。 但对于 DXF,我们应该考虑到它并不是很严格 - 有些观众可能对他们不知道的某些事情很敏感,有些人可以跳过它。

我们创建了 CADJAVA-11519 来调查并修复至少在 AutoCAD/ODA 中无法打开的 DXF 问题,我们还将关注广联达。 我向您发送文件只是为了检查是否有关于字体的要求,但我们将首先关注开放问题。

因为我需要解析成dxf来读取dwg的文件内容,然后使用框架读取为svg或者解析为geojson 所以我认为转换到dxf是必然的,因为我需要在web端进行渲染dwg图

@setruth,
但是您会用眼睛处理 DXF 文件吗? 或者使用一些编程来读取它?

是的 我打算使用编程的手段处理我的dxf文件读取里面的数据,获取直接发送给web端使用web的开源框架渲染dxf文件

如果我可以直接把dwg转为json或者web端可读取的手段也不是不可以,但是目前我所知的方案里面就是转到dxf再转换

@setruth,
只是问一下,因为广联达可能无法直观地打开 DXF 文件,但您仍然可以使用编程软件处理该文件 :slight_smile: 无论如何,我们都会看看结果 DXF 的加载问题。

image.png (134.1 KB)

我们有bimface的平台账号 我尝试了下发现默认的model层确实是没数据的,但是dwg查看软件上面显示model层是有内容的,转换后就连广联达的平台都转不出来model的内容,所以aspose直接对dwg文件进行转换比如到svg上回出现结果为空应该就是因为默认是model层所以没内容,我想请问下aspose对多个图层的dwg文件是否有选择转换的支持呢,可以让开发者自行选择转换哪个图层

@setruth,
您可以设置一些选项,如下所示:

Image cadImage = Image.load(srcFile);

CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setLayouts(...);
rasterizationOptions.setlayers(...);

DxfOptions dxfOptions = new DxfOptions();
dxfOptions.setVectorRasterizationOptions(rasterizationOptions);

cadImage.save("结果.dxf", dxfOptions);

但在这种情况下获得的DXF是扁平化的,包含单层和实体作为线。

好的,aspose对dwg赚svg的转换是否有大小上限呢请问下,我发现赚png回出现堆溢出的清空,如果dwg文件大点的话。比如9M的dwg文件就会堆溢出了