如何在Windows 7上获取type1字体的后期脚本名称

时间:2012-05-31 11:19:54

标签: windows-7 fonts postscript

如何在64位Windows7上获取后期脚本名称,类型1字体的完整路径?这些API由Adobe ATM库提供,用于32位获胜操作系统,如ATMGetPostScriptName,ATMGetFontPaths等。

根据我的知识,OS现在支持1种字体。我可以通过GetFontData,RegQueryMultipleValues等获取TTF和OTF字体的所有这些字体信息,但这些API对于type1字体(.pfm,.pfb字体)失败。

我第一次使用这个论坛并希望有人可以帮我快点。

先谢谢, Vijendra

1 个答案:

答案 0 :(得分:0)

我有类似的问题,我想要postscript名称并将字体转换为postscript。该解决方案位于名为ttf2pt1的小型库中,位于http://ttf2pt1.sourceforge.net/README.html

您需要的例程如下。该例程使用OutlineTextMetrics挖掘出该字体的所有各种内部名称。 nameFace值是您想要的值。

short i;
short val;
long offset;
OUTLINETEXTMETRIC *otm;
UINT nSize;
UINT retVal;
char *sptr;
char *nameFamily;
char *nameFace;
char *nameStyle;
char *nameFull;
int fontType;
char otmBuffer[4096];

SelectObject(hdc, theFont);
nSize = GetOutlineTextMetrics(hdc, 0, NULL);
if(nSize){
    otm = (OUTLINETEXTMETRIC *) otmBuffer;
    retVal = GetOutlineTextMetrics(hdc, nSize, otm);

    val = otm->otmTextMetrics.tmPitchAndFamily;

    offset = (long) otm->otmpFamilyName;
    sptr = &otmBuffer[offset];
    nameFamily = sptr;
    offset = (long) otm->otmpFaceName;
    sptr = &otmBuffer[offset];
    nameFace = sptr;
    offset = (long) otm->otmpStyleName;
    sptr = &otmBuffer[offset];
    nameStyle = sptr;
    offset = (long) otm->otmpFullName;
    sptr = &otmBuffer[offset];
    nameFull = sptr;

    if(val & TMPF_TRUETYPE){
        fontType = kFontTypeTrueType;
    }
    else{
        if(val & TMPF_VECTOR){
            fontType = kFontTypePostscript;
        }
    }
}
else{
    fontType = kFontTypeUnknown;
}