Aspose cad for java svg转成dxf中中文都被转成了“–”横杠字符,使用的是仿宋字体,请问应该如何正确转换
解决方案概述
在 Aspose.CAD for Java 将 SVG → DXF 时出现中文字符被替换为 “–” 的情况,一般是因为:
- DXF 版本不支持 Unicode(如 R12、R13、R14)。
- 字体未被正确加载,导致 Aspose 找不到对应的中文字体,使用了默认的占位字符。
下面提供一个完整的 示例代码,帮助您在转换过程中正确保留中文文字。
1. 准备工作
| 步骤 | 内容 |
|---|---|
| ① 下载中文字体 | 确保系统中已经有 仿宋(FangSong)的 .ttf 文件,例如 SimFang.ttf。 |
| ② 将字体文件放置在固定目录 | 例如 C:\AsposeFonts\(后文将在此目录注册)。 |
| ③ 确认 SVG 中的字体名称 | <text font-family="FangSong">中文文字</text>(名称要与 .ttf 中的 FontFamily 匹配)。 |
2. 代码示例
import com.aspose.cad.Image;
import com.aspose.cad.FontSettings;
import com.aspose.cad.imageoptions.DxfOptions;
import com.aspose.cad.imageoptions.DxfVersion;
public class SvgToDxfConverter {
public static void main(String[] args) throws Exception {
// ① 加载 SVG 文件
Image svgImage = Image.load("C:/InputFiles/sample.svg");
// ② 注册中文字体所在文件夹(递归搜索子文件夹)
// 这里的路径请改成您实际放置字体的路径
FontSettings.getInstance().setFontsFolder("C:/AsposeFonts", true);
// ③ 配置 DXF 保存选项
DxfOptions dxfOptions = new DxfOptions();
// 使用支持 Unicode 的 DXF 版本(AutoCAD 2007 及以后均支持)
dxfOptions.setVersion(DxfVersion.AutoCAD2007);
// 推荐:将文字保存为 MText,这样可以完整保留 Unicode 文本
dxfOptions.setExportTextAsMText(true);
// ④ 执行转换
svgImage.save("C:/OutputFiles/result.dxf", dxfOptions);
System.out.println("转换完成!");
}
}
关键点解释
| 配置 | 作用 | 为什么必须这样 |
|---|---|---|
FontSettings.getInstance().setFontsFolder(..., true) |
把自定义字体文件夹加入 Aspose 的字体搜索路径。 | 若字体未被找到,Aspose 会使用默认字体(通常是 Arial),导致中文显示为横杠。 |
dxfOptions.setVersion(DxfVersion.AutoCAD2007)(或更高) |
采用支持 Unicode 的 DXF 版本。 | 早期 DXF 版本(R12~R14)只能保存 ASCII,中文会被替换。 |
dxfOptions.setExportTextAsMText(true) |
把文字保存为 MText 实体,完整保留 Unicode 文本。 | 对于复杂文字(多行、样式),MText 能避免字符丢失。 |
3. 常见错误排查
| 症状 | 可能原因 | 检查/解决方法 |
|---|---|---|
| 中文仍显示为 “–” | 使用的 DXF 版本是 R12、R13、R14。 | 确认 dxfOptions.setVersion(...) 已设置为 AutoCAD2007 及以上。 |
| 中文变成方框或乱码 | 字体路径未正确注册或字体名称不匹配。 | - 打开 FontSettings.getInstance().getFontsFolder() 检查路径是否正确。- 确认 SVG 中 font-family 与 .ttf 的 FontFamily 完全相同(大小写敏感)。 |
| 转换后文件体积异常大 | 使用了默认的文字转几何(文字轮廓化),导致大量多段线。 | 保持 setExportTextAsMText(true),或在不需要文字保留的场景下改为 setExportTextAsMText(false)。 |
4. 参考文档
-
Aspose.CAD for Java – DXF Export Options
https://docs.aspose.com/cad/java/dxf-export-options/ -
使用自定义字体(FontSettings)
https://docs.aspose.com/cad/java/fontsettings/ -
SVG → DXF 转换示例
https://docs.aspose.com/cad/java/convert-svg-to-dxf/
5. 小结
- 使用支持 Unicode 的 DXF 版本(AutoCAD2007 或更高)。
- 注册并使用正确的中文字体(仿宋 .ttf)。
- 将文字导出为 MText,确保文本以 Unicode 形式保存在 DXF 中。
按照上述步骤配置后,中文字符将能够在生成的 DXF 文件中完整显示,而不会被替换为横杠。若仍有问题,欢迎提供转换前的 SVG 示例或日志信息,我们将进一步协助排查。祝您使用顺利!
try {
// 1. 加载SVG文件
Image image = DxfImage.load(srcFile);
try {
// 2. 创建DXF导出选项
DxfOptions exportOptions = new DxfOptions(); // 关键:使用 DxfOptions
// 3. (可选) 配置光栅化选项
CadRasterizationOptions rasterizationOptions = new CadRasterizationOptions();
rasterizationOptions.setPageWidth(1200); // 设置输出页面宽度
rasterizationOptions.setPageHeight(800); // 设置输出页面高度
exportOptions.setVectorRasterizationOptions(rasterizationOptions);
exportOptions.setTextAsLines(false);
// 4. 执行转换并保存为DXF
image.save(destFile, exportOptions);
System.out.println("SVG 转换为 DXF 成功!文件已保存至: " + destFile);
} finally {
// 5. 释放资源
if (image != null) {
image.dispose();
}
}
} catch (Exception e) {
System.err.println("转换过程中发生错误: " + e.getMessage());
e.printStackTrace();
}
前面是转换的代码,请帮忙验证
请问你们有复现到同样的问题吗?是否是由于字体的原因
bb3ba033-48e2-4536-bd1f-cad96fcf664d.png (16.2 KB)
你好,我们发现组件转换只会生成R12版本的dxf,这个不支持中文,请问可以支持输出更高版本的DXF文件吗