使用ObjectARX接口获取AcDbTextStyleTableIterator,循环这个迭代器,将字体文档的字体名称、大字体名称都加入一个vector<wstring>中,以便后面和Font文件夹中的字体名称进行比较。

注意要对字体名称做一些处理,以及重复性检查,详见源代码。

Acad::ErrorStatuses;AcApDocument*pDoc;AcDbDatabase*pDb;pDoc=acDocManager->curDocument();pDb=pDoc->database();AcDbTextStyleTable*pTextTbl;AcDbTextStyleTableIterator*pTextIterator;es=pDb->getTextStyleTable(pTextTbl,AcDb::kForRead);pTextTbl->newIterator(pTextIterator);//获取迭代器vector<wstring>fontList;for(pTextIterator->start(); !pTextIterator->done();pTextIterator->step()) {AcDbTextStyleTableRecord*pTextRecord;es=pTextIterator->getRecord(pTextRecord,AcDb::kForRead);TCHAR*pFontName=NULL;es=pTextRecord->fileName(pFontName);//获取字体名称if(es==Acad::eOk) {AddToFontList(pFontName,fontList);
        }es=pTextRecord->bigFontFileName(pFontName);//获取大字体名称if(es==Acad::eOk) {AddToFontList(pFontName,fontList);
        }
    }pTextTbl->close();
三、获取本地字体列表

获取本地AutoCAD安装目录下Font文件夹下已存在的字体列表。

vector<wstring>result;_tfinddata64_tc_file;intptr_thFile;wstringroot;root.append(path);//路径root.append(L"\\*");root.append(ext);//扩展名hFile=_tfindfirst64(root.c_str(), &c_file);if(hFile== -1)returnresult;do{if(_tcslen(c_file.name) == 1 &&c_file.name[0] ==_T('.')
            ||_tcslen(c_file.name) == 2 &&c_file.name[0] ==_T('.') &&c_file.name[1] ==_T('.'))continue;result.push_back(c_file.name);

    }while(_tfindnext64(hFile, &c_file) == 0);_findclose(hFile);
四、下载缺失字体