c # - Sådan bestemmes O/S filnavn for en installeret skrifttype?

Indlæg af Hanne Mølgaard Plasc

Problem



Vi bruger et PDF-generatorbibliotek fra tredjepart, som kræver, at du angiver TrueType- eller Type1-filnavnet, når du bruger en anden skrifttype end de 14 eller deromkring, som er en del af standard PDF-standarden.


Så hvis jeg vil bruge Bitstream Arrus Bold, skal jeg vide for at referere arrusb.ttf.


Kort fortalt at opregne alle filerne i fontmappen og oprette en privat PrivateFontCollection for at uddrage relationerne, er der en måde at få det underliggende skrifttypenavn fra skrifttypeoplysninger, dvs. givet Courier New, Bold, Italic derive CourBI.ttf?


Jeg har allerede kigget på InstalledFontCollection og der er ingenting.

Bedste reference


Hvis du ikke har noget imod at stikke rundt i registreringsdatabasen, skal du kigge på


HKLMSoftwareMicrosoftWindows NTCurrentVersionFonts


Det har par som


Name = "Arial (TrueType)"
Data = "arial.ttf"


Du kan gøre det med de nødvendige spørgsmål som dette:


static RegistryKey fontsKey =
    Registry.LocalMachine.OpenSubKey(
        @"SoftwareMicrosoftWindows NTCurrentVersionFonts");

static public string GetFontFile(string fontName)
{
    return fontsKey.GetValue(fontName, string.Empty) as string;
}


Et opkald til GetFontFile("Arial (TrueType)") returnerer "arial.ttf"


Du kan selvfølgelig ændre koden for at tilføje (TrueType) -delen til fontName eller se igennem alt, der returneres af fontsKey.GetValueNames() for at finde det bedste match.