![]() |
【转帖】get short font name
get short font name
get short font name hi, is there a function to get the short ttf-name from a given ttf-filename? example: i have the filename "arial.ttf" and i'd like to have the short font name "arial", not the long name "arial (truetype)". the reason for this is a dwg file i just received. the file contains an mtext with a segment, for which oddbmtextfragment::fontname is the name of the ttf-file instead of the short fontname. note: when opening this file in dd 2.2.0, oddbmtextfragment::fontname is the short fontname. with dd 2.4.2, the result is as described above. torsten hello torsten, there is such behavior in case mtext has switch like {\farial.ttf}. you may get face name (short name) in desc::typeface() by use next code (for windows platform). code: void getttfontnamebyfilename(odttfdescriptor* descr) { osversioninfo os; int result,n; hkey fontkey; // int len; int value_len=255; int data_len=255; odchar value[256]; odchar data[256]; dword type; odchar *s; os.dwosversioninfosize=sizeof(osversioninfo); getversionex(&os); if (os.dwplatformid & ver_platform_win32_nt) { result = regopenkeyex(hkey_local_machine, dd_t("software\\microsoft\\windows nt\\currentversion\\fonts"), 0, key_read, &fontkey); } else { result=regopenkeyex(hkey_local_machine, dd_t("software\\microsoft\\windows\\currentversion\\fonts"), 0, key_read, &fontkey); } odchar fontfilename[max_path]; odchar ext[max_path]; odstring sourcefontfilename = descr->filename(); _wsplitpath(sourcefontfilename, null, null, fontfilename, ext); odstring fontfilename = fontfilename; if ( ::odstrlen(ext) > 0 ) { fontfilename += ext; } else { fontfilename += dd_t(".ttf"); } for(n = 0; ; n++) { value_len = data_len = 255; result = regenumvalue(fontkey, n, // index of value to query value, // address of buffer for value string (unsigned long *)&value_len, // address for size of value buffer 0, // reserved &type, // address of buffer for type code (lpbyte)data, // address of buffer for value data (unsigned long *)&data_len); // address for size of data buffer); if (result != error_success) { break; } // len = odstrlen(pttf->m_filename); if( fontfilename.icompare((odchar*)data) == 0 || sourcefontfilename.icompare((odchar*)data) == 0 ) { if ((s = wcsstr(value,dd_t(" (truetype)"))) != null) { *s=0; } odstring val = value; int n = val.replace(dd_t(" bold"), dd_t("")); descr->setbold( n > 0 ? true : false ); n = val.replace(dd_t(" italic"), dd_t("")); descr->setitalic(n > 0 ? true : false ); descr->settypeface(val); break; } } if (fontkey) { regclosekey(fontkey); } } best regards, sergey z. |
所有的时间均为北京时间。 现在的时间是 10:02 AM. |