package org.springblade.common.utils; import com.aspose.cad.Image; import org.kabeja.dxf.DXFDocument; import org.kabeja.dxf.DXFEntity; import org.kabeja.dxf.DXFLayer; import org.kabeja.dxf.DXFText; import org.kabeja.parser.ParseException; import org.kabeja.parser.Parser; import org.kabeja.parser.ParserBuilder; import java.io.*; import java.util.Iterator; import java.util.List; public class CADParserUtil { /** * 读取DXF文件图层 * @param filePath * @return * @throws FileNotFoundException * @throws ParseException */ public static String parser(String filePath) throws FileNotFoundException, ParseException { Parser dxfParser = ParserBuilder.createDefaultParser(); dxfParser.parse(new FileInputStream(filePath), "UTF-8");//需要转换的dxf DXFDocument doc = dxfParser.getDocument(); StringBuffer sb = new StringBuffer(); //遍历图层 Iterator iter= doc.getDXFLayerIterator(); while (iter.hasNext()){ DXFLayer dxfLayer = (DXFLayer)iter.next(); String layerName=dxfLayer.getName(); System.out.println("读取图层"+layerName); readEntity(dxfLayer,sb); } System.out.println("最终数据 = " + sb); return sb.toString(); } /** * 读取图层下都有哪些类型的实体 * @param layer */ public static void readEntity(DXFLayer layer,StringBuffer sb){ Iterator iter= layer.getDXFEntityTypeIterator(); while (iter.hasNext()){ String s=(String) iter.next(); System.out.println("类型 = " + s); getEntity(layer,s,sb); } } /** * 读取图层下的TEXT实体 * @param layer * @param type */ public static void getEntity(DXFLayer layer, String type,StringBuffer sb) { if (type.equals("LWPOLYLINE")) { List entities = layer.getDXFEntities(type); for (int i = 0; i < entities.size(); i++) { if ((entities.get(i) instanceof DXFText)) { DXFText dxfText = (DXFText) entities.get(i); String text = dxfText.getText(); sb.append(text).append("\n"); } } } } public static void main(String[] args) { try { // 指定输入和输出文件的路径。 String inputDWG = "F:\\test4jdata\\cad\\tdsyqk.dwg"; String outputDXF = "F:\\test4jdata\\cad\\tdsyqk.dxf"; // 加载输入 DWG 文件 Image cadImage = Image.load(inputDWG); // 保存输出 DXF 文件 cadImage.save(outputDXF); String text = parser(outputDXF); System.out.println(text); } catch (IOException | ParseException e) { e.printStackTrace(); } } }