读取DWG文件中的文本信息(CAD2004)
还是那句话,工作需要,不然是不会研究这个的.也许有的人会遇到跟我一样的问题,有兴趣看看,可以节约点时间.运行时要引用CAD2004的COM,这种读取文本的方式并不好,需要机器上装有AUTOCAD2004,而且针对不同的版本,程序可能要进行修改,如果有朋友能有比较好的解决方法,或者第三方控件,欢迎联系.下面将代码贴上:
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace AutoCADFilter
7{
8 public class Filter
9 {
10 public Filter()
11 {
12
13 }
14 /// <summary>
15 /// 读取dwg文件中的文本信息
16 /// </summary>
17 /// <remarks>读取dwg文件中的文本信息</remarks>
18 /// <returns>文本内容</returns>
19 private string ReadDwg(string path)
20 {
21
22 string content = "";
23 string filename = "";
24 FileInfo finfo = new FileInfo(path);
25 filename = finfo.Name;
26 AutoCAD.AcadApplication ap = new AutoCAD.AcadApplication();
27 lock (ap)
28 {
29 try
30 {
31 AutoCAD.AcadDocument ad = ap.Documents.Open(path,true, null);
32 for (int i = 0; i < ad.ModelSpace.Count; i++)
33 {
34 if (ad.ModelSpace.Item(i).ObjectName.ToLower().Equals("acdbmtext"))
35 {
36 AutoCAD.IAcadMText im = (AutoCAD.IAcadMText)ad.ModelSpace.Item(i);
37 content += im.TextString;
38 }
39 else if (ad.ModelSpace.Item(i).ObjectName.ToLower().Equals("acdbtext"))
40 {
41 AutoCAD.IAcadText im = (AutoCAD.IAcadText)ad.ModelSpace.Item(i);
42 content += im.TextString;
43 }
44 }
45 ad.Close(false, filename);
46 }
47 finally
48 {
49
50 ap.Quit();
51 }
52 }
53 return content;
54 }
55
56 public string Parse(string path)
57 {
58 return ReadDwg(path);
59
60 }
61 }
62}
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6namespace AutoCADFilter
7{
8 public class Filter
9 {
10 public Filter()
11 {
12
13 }
14 /// <summary>
15 /// 读取dwg文件中的文本信息
16 /// </summary>
17 /// <remarks>读取dwg文件中的文本信息</remarks>
18 /// <returns>文本内容</returns>
19 private string ReadDwg(string path)
20 {
21
22 string content = "";
23 string filename = "";
24 FileInfo finfo = new FileInfo(path);
25 filename = finfo.Name;
26 AutoCAD.AcadApplication ap = new AutoCAD.AcadApplication();
27 lock (ap)
28 {
29 try
30 {
31 AutoCAD.AcadDocument ad = ap.Documents.Open(path,true, null);
32 for (int i = 0; i < ad.ModelSpace.Count; i++)
33 {
34 if (ad.ModelSpace.Item(i).ObjectName.ToLower().Equals("acdbmtext"))
35 {
36 AutoCAD.IAcadMText im = (AutoCAD.IAcadMText)ad.ModelSpace.Item(i);
37 content += im.TextString;
38 }
39 else if (ad.ModelSpace.Item(i).ObjectName.ToLower().Equals("acdbtext"))
40 {
41 AutoCAD.IAcadText im = (AutoCAD.IAcadText)ad.ModelSpace.Item(i);
42 content += im.TextString;
43 }
44 }
45 ad.Close(false, filename);
46 }
47 finally
48 {
49
50 ap.Quit();
51 }
52 }
53 return content;
54 }
55
56 public string Parse(string path)
57 {
58 return ReadDwg(path);
59
60 }
61 }
62}