मुझे एक ओटीएफ या टीटीएफ फ़ाइल से फ़ॉन्ट नाम कैसे मिलेगा?


83

मैंने अपने पिछले ऐप में कस्टम फ़ॉन्ट का उपयोग किया है।

फ़ाइल का नाम "ProximaNova-Regular.otf" था और मेरे द्वारा उपयोग किए गए फ़ॉन्ट को लोड करने के लिए ...

[UIFont fontWithName:@"ProximaNova-Regular" size:20];

यह पूरी तरह से काम किया।

अब इस नए ऐप में मेरे पास तीन फॉन्ट फाइल्स हैं ...

Dude_Willie.otf
Impact
handsean.ttf

लेकिन मुझे यकीन नहीं है कि ये कैसे लोड होंगे।

मैं प्रयास कर चुका हूं

[UIFont fontWithName:<the file name> size:20];

लेकिन यह सिर्फ हेल्वेटिका का उपयोग करने के लिए वापस आता है।

मुझे कैसे पता चलेगा कि किस नाम का उपयोग करना है?




@ फ्योडोरवोलचोक आह। टिप्पणियों को देखें। मैंने पहले ही उस प्रश्न की अवहेलना कर दी। मेरे पास जो समस्या थी वह यह थी कि मैंने प्रोजेक्ट में फोंट ठीक से स्थापित नहीं किया था, इसलिए familyNamesवास्तव में मेरे द्वारा खोजे जा रहे फोंट को सूचीबद्ध नहीं किया गया था।
फोगमिस्टर

unix.stackexchange.com/q/26053/26227 - fc-scan --format "%{foundry}: %{family}\n" filename.ttfया filename.otf
डेव जार्विस

जवाबों:


88

अपने iOS ऐप में एक नया फ़ॉन्ट जोड़ने और उपयोग करने के लिए इन चार आसान चरणों का पालन करें:

  • अपने Xcode प्रोजेक्ट में अपने_ new_font.ttf या your_new_font.otf जोड़ें
  • अपनी परियोजना के info.plist में, अपने_new_font.ttf या your_new_font.otfUIAppFonts सरणी के लिए एक नई प्रविष्टि जोड़ें (इस के लिए सादा पाठ 'एप्लिकेशन द्वारा प्रदान किया गया फॉन्ट है ')
  • इस बिंदु पर, मैं डिबग कोड का यह अस्थायी हिस्सा जोड़ने की सलाह देता हूं जो आपके ऐप द्वारा उपलब्ध सभी फोंट को डंप करने के लिए है, जिसमें आपके नए जोड़े गए आपके_न्यू_फोंट शामिल हैं:

// स्विफ्ट

    for family: String in UIFont.familyNames {
        print("\(family)")
        for names: String in UIFont.fontNames(forFamilyName: family) {
            print("== \(names)")
        }
    }

//उद्देश्य सी

for(NSString *fontfamilyname in [UIFont familyNames]) {
    NSLog(@"family:'%@'",fontfamilyname);
    for(NSString *fontName in [UIFont fontNamesForFamilyName:fontfamilyname]) {
        NSLog(@"\tfont:'%@'",fontName);
    }
    NSLog(@"-------------");
}
  • डिबग आउटपुट में, अपने नए फ़ॉन्ट के 'परिवार' और 'फ़ॉन्ट' नाम को देखें। आपके नए फ़ॉन्ट परिवार के अनुरूप 'फ़ॉन्ट' नाम के रूप में जो कुछ भी प्रदर्शित किया गया है उसे पास करें (आपके नए फ़ॉन्ट 'परिवार' से जुड़े एक से अधिक 'फ़ॉन्ट' हो सकते हैं) UIFont *myNewFont = [UIFont fontWithName:@"font_name_from_debug_output" size:20]और आपको व्यवसाय में होना चाहिए!

124

TTF पर राइट क्लिक करें -> जानकारी प्राप्त करें

"पूरा नाम" वह है जिसे आप ढूंढ रहे हैं।

टीटीएफ के साथ मेरे लिए यही काम है।

संपादित करें:

मैंने बस एक ऐसे फॉन्ट का इस्तेमाल किया, जिसका Get Info में "Full Name" से अलग नाम था।

इस उत्तर के संकलन के लिए, यदि ऊपर दिया गया त्वरित कार्य कारगर नहीं होता है, तो इस कोड को अपनी परियोजना में चलाएँ:

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

और जिस फ़ॉन्ट का आप उपयोग करना चाहते हैं उसका सही नाम खोजें।

स्विफ्ट 3.0 कोड:

for fontFamilyName in UIFont.familyNames{
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyName){
        print("Family: \(fontFamilyName)     Font: \(fontName)")
    }
}

यह वास्तव में फ़ॉन्ट के निर्माता पर निर्भर करता है। हमारे पास कुछ डरावने फोंट थे जो हमें एक क्लाइंट से प्राप्त हुए थे, और आईओएस द्वारा उपभोग किए जाने पर फ़ॉन्ट के नाम गंभीर रूप से मनमाने हैं। मैंने इस पद्धति को अपने एक फोंट के साथ आज़माया और यह विफल रहा।
borrrden

@borrrden ने अब तक यह तरीका हर बार मेरे लिए काम किया। मैंने कभी भी अपना स्वयं का फ़ॉन्ट नहीं बनाया ताकि आप सही हो सकें, मुझे नहीं पता।
सेगेव

यह सबसे अच्छी तरह से निर्मित फोंट के लिए काम करेगा। हमें जो फोंट मिला है, वह लगभग 2 दशक पहले बनाया गया था (यह खराब था ...)। हालाँकि, सुनिश्चित करने का एकमात्र तरीका सिस्टम से पूछना है।
borrrden

3
धन्यवाद, इस काम के बाद मैं ठीक से info.plist फ़ाइल में फोंट स्थापित किया था।
फोगमिस्टर

6
यह सभी फोंट के लिए काम नहीं करता है। उदाहरण के लिए, "पूर्ण नाम" मान "प्रॉक्सिमा नोवा रेगुलर" के रूप में दिखाया गया है जब कोड में परिवार "प्रॉक्सिमा नोवा-रेगुलर" है
rrbrambley

59
  • फ़ॉन्ट स्थापित करें
  • अपने मैक पर फ़ॉन्ट बुक ऐप खोलें
  • फ़ॉन्ट का चयन करें और 'जानकारी' बटन पर क्लिक करें
  • आप जिस नाम की तलाश कर रहे हैं वह पोस्टस्क्रिप्ट नाम है
    • MacOS: दृश्य -> ​​फ़ॉन्ट जानकारी दिखाएं

उदाहरण


5
सबसे आसान तरीका लगता है
ईयाल अलशेइच

8
fwiw, मुझे विवरण देखने के लिए व्यू> शो फ़ॉन्ट जानकारी पर जाने की आवश्यकता है। सुनिश्चित नहीं हैं कि यह मेरी मशीन पर डिफ़ॉल्ट रूप से बंद क्यों था।
मार्क रॉबसन

41

आईओएस में फोंट का उपयोग करने के लिए, आपको फॉन्ट के पूर्ण नाम (पोस्टस्क्रिप्ट नाम) के आधार पर फ़ॉन्ट को लोड करना होगा , जो कि कभी-कभी (और आमतौर पर) फ़ॉन्ट के वास्तविक फ़ाइल नाम से अलग होता है ।

अपने आप को फ़ॉन्ट फ़ाइल "एरियल-रेगुलर.ttf" का नाम बदलकर "foo.ttf" होने की कल्पना करें। आपके द्वारा बदला गया फ़ॉन्ट फ़ाइल के अंदर मौजूद फ़ॉन्ट अभी भी "एरियल-रेगुलर" है।

इस थ्रेड पर पहले से ही फ़ॉन्ट नाम प्राप्त करने के लिए कुछ अच्छे प्रोग्रामेटिक तरीके हैं, लेकिन कमांड लाइन का उपयोग करके मेरा एक अलग तरीका है।

आप पर एक मैक या Linux कर रहे हैं, बस निर्देशिका है जहाँ आप अपने कस्टम फोंट है में कमांड लाइन से इस स्क्रिप्ट को चलाने (का उपयोग करता है fc-scanसे उपयोगिता fontconfig जो शायद पहले से स्थापित है, लेकिन यदि नहीं आप homebrew के माध्यम से इसे स्थापित कर सकते हैं: brew install fontconfig):

for file in "$arg"*.{ttf,otf}; do fc-scan --format "%{postscriptname}\n" $file; done

यहाँ मेरी ~/Library/Fontsनिर्देशिका पर चल रहे उपरोक्त कमांड का एक स्क्रीनशॉट है :

यहां छवि विवरण दर्ज करें

उपरोक्त स्क्रिप्ट वर्तमान निर्देशिका में सभी फ़ाइलों .ttfऔर .otfफ़ाइलों के माध्यम से चलेगी , फिर प्रत्येक फ़ॉन्ट के लिए पोस्टस्क्रिप्ट नाम प्रिंट करें जिसे आप एक्सकोड या अन्य जगहों पर फ़ॉन्ट फ़ाइल को संदर्भित करने के लिए उपयोग कर सकते हैं।

यदि आप कुछ अतिरिक्त जानकारी (PostScriptName, Filename) और कुछ रंग कोडिंग के साथ फैंसी प्राप्त करना चाहते हैं, तो आप अपना वैकल्पिक सिग्नल चला सकते हैं:

for file in "$arg"*.{ttf,otf}; do 
    postscriptname=$(fc-scan --format "%{postscriptname}\n" $file);
    printf "\033[36m PostScript Name:\033[0m %s \e[90m(%s)\033[0m\n" "$postscriptname" "$file";
done

यहां छवि विवरण दर्ज करें

यह आपके AppDelegate.m फ़ाइल के अंदर कॉपी-पेस्टिंग कोड की तुलना में थोड़ा तेज़ है। हर बार जब आप एक नया फ़ॉन्ट फ़ाइल जोड़ना चाहते हैं, जो कि लोकप्रिय तरीका है, तो नामों को प्रिंट करने के लिए, और यह फॉन्टबुक में फ़ॉन्ट खोलने से भी तेज़ है पोस्टस्क्रिप्ट नाम का निरीक्षण करें।

USEFUL TIP: यदि आप अपने टर्मिनल में उपरोक्त स्क्रिप्ट को उर्फ ​​करते हैं, तो आपको बस इतना करना है कि वर्तमान निर्देशिका में सभी फाइलों के लिए सभी पोस्टस्क्रिप्ट फ़ॉन्ट नामों को प्राप्त करने के लिए एक ही कमांड टाइप करें (मेरा कार्य कहा जाता है, fontnamesइसलिए मुझे केवल इतना करना है में fontnamesफोंट के साथ निर्देशिका के अंदर टर्मिनल पर टाइप किया गया है, और पोस्टस्क्रिप्ट नाम स्वचालित रूप से मुद्रित किए जाएंगे, फिर आप अपने विकास वर्कफ़्लो में समय बचाएंगे और ज़रूरत पड़ने पर इस आसान स्क्रिप्ट का उपयोग करने के लिए तैयार होंगे।

उम्मीद है की यह मदद करेगा!


मैं मैक का उपयोग कर रहा हूं। मैंने दिए गए लिंक u से fontConfig डाउनलोड किया। लेकिन इसमें बहुत सारी फाइलें हैं। मैं इसका उपयोग कैसे करूं या अपने मैक में फॉन्ट कॉनफिग स्थापित करूं।
सुजय यूएन

यदि आप एक मैक पर हैं, तो आप पहले से ही fc-scanउपयोगिता स्थापित कर सकते हैं। fc-scan -Vटर्मिनल पर चलने पर क्या होता है ?
रेडियोविजुअल

3
तुम भी के माध्यम से Fontconfig स्थापित कर सकते हैं homebrew : brew install fontconfig
रेडियोविजुअल

मुझे यह तब मिला जब मैंने urd cmd -bash: fc-scan: कमांड नहीं पाया
सुजय यूएन

ठीक है, मैं सुझाव देता हूं कि यदि आप इसे अपने मशीन पर स्थापित नहीं करते हैं तो आप Homebrew के माध्यम से इंस्टॉल करते हैं। Homebrew का लिंक देखें और ऊपर मेरी टिप्पणी में कमांड स्थापित करें।
रेडियोविजुअल

6

आप जानना चाहते हैं कि इसके लिए नाम कैसे जाना चाहिए: -

  NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];

  for (NSInteger indFamily=0; indFamily<[familyNames count]; ++indFamily) 
  {
        NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);

        NSArray *fontNames = [[NSArray alloc] initWithArray:
              [UIFont fontNamesForFamilyName:[familyNames objectAtIndex:indFamily]]];

        for (NSInteger indFont=0; indFont<[fontNames count]; ++indFont) 
        {
              NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
        }
  }

आशा है कि यह आपकी मदद करता है ...


6

यदि आप किसी दिए गए फ़ॉन्ट फ़ाइल के लिए क्रमिक रूप से फ़ॉन्ट नाम खोजना चाहते हैं:

import Foundation

func loadFontName(for file: URL) throws -> String {
    let data = try Data(contentsOf: file)

    guard let provider = CGDataProvider(data: data as CFData) else {
        throw Error("Could not create data provider")
    }

    guard let font = CGFont(provider) else {
        throw Error("Could not load font")
    }

    guard let name = font.postScriptName else {
        throw Error("Could not get font name from font file")
    }

    return name as String
}

Errorआवश्यकतानुसार अपनी फेंकने योग्य वस्तुओं के साथ बदलें ।


5

स्विफ्ट 3.0

for familyName in UIFont.familyNames {
        for fontName in UIFont.fontNames(forFamilyName: familyName ) {
            print("\(familyName) : \(fontName)")
        }
    }

5

स्विफ्ट 4.0+ समाधान

    for fontFamilyName in UIFont.familyNames {
        print("family: \(fontFamilyName)\n")

        for fontName in UIFont.fontNames(forFamilyName: fontFamilyName) {
            print("font: \(fontName)")
        }
    }

उत्पादन होगा:

परिवार: Apple SD गोथिक नियो

फ़ॉन्ट: AppleSDGothicNeo-Thin

फ़ॉन्ट: AppleSDGothicNeo-Light


4

अपने फोंट को अपने प्रोजेक्ट / ऐप में शामिल करने के बाद, अपने ऐप के लिए सभी उपलब्ध फोंट का प्रिंट आउट लेने के लिए इस कोड को (शायद सिर्फ ऐप डेलीगेट डिफिनिट लंचिंग विधि में जोड़ें) जोड़ें। उस सूची में से आप उस फ़ॉन्ट को पहचानने में सक्षम होना चाहिए जिसके बाद आप हैं। बाद अनावश्यक कोड को हटाने के लिए मत भूलना।

for (NSString *fontFamilyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:fontFamilyName]) {
        NSLog(@"Family: %@    Font: %@", fontFamilyName, fontName);
    }
}

4

कमांड लाइन से नाम पाने के लिए आप otfinfo --info arial.ttf का भी उपयोग कर सकते हैं। पोस्टस्क्रिप्ट नाम वह है जिसे आपको UIFont निर्माता को पास करना होगा।


3

स्विफ्ट 1.2:

    for familyName in UIFont.familyNames() {
        for fontName in UIFont.fontNamesForFamilyName(familyName as! String) {
            println("\(familyName) : \(fontName)")
        }
    }

2

एक और "त्वरित, व्यावहारिक" हैक जिसमें सभी डिफ़ॉल्ट फोंट के माध्यम से स्कैनिंग शामिल नहीं है जो एमुलेटर या डिवाइस पर मौजूद है, अपने में कुछ के लिए फ़ॉन्ट का उपयोग करना है storyboard। तब यदि आप स्टोरीबोर्ड को एक टेक्स्ट एडिटर (जैसा कि खोलें source code) के साथ संपादित करते हैं, तो आप "कस्टमफोंट" टैग के लिए खोज करने वाले "आंतरिक" नामों के साथ उपयोग किए जाने वाले फोंट देख सकते हैं:

<customFonts key="customFonts">
    <array key="Linotype - AvenirNextLTPro-Bold.otf">
        <string>AvenirNextLTPro-Bold</string>
    </array>
    <array key="Linotype - AvenirNextLTPro-Regular.otf">
        <string>AvenirNextLTPro-Regular</string>
    </array>
    <array key="TradeGothicLTPro-BdCn20.otf">
        <string>TradeGothicLTPro-BdCn20</string>
    </array>
</customFonts>

1

फ़ॉन्ट फ़ाइल के पारिवारिक नाम लॉग करें और फिर फ़ॉन्ट का उपयोग करें:

// You can log all font family names suing **fontNamesForFamilyName**

NSLog(@" font name %@", [UIFont fontNamesForFamilyName:@"the file name"]);

आशा है कि यह आपकी मदद करता है।


हमारे लिए काम करने के लिए प्रतीत नहीं होता है - यदि फ़ाइल नाम फ़ॉन्ट परिवार के नाम से भिन्न होता है तो यह विफल रहता है
ब्लिट्ज

आपको जानकारी प्राप्त करने के लिए फ़ॉन्ट नाम प्राप्त करना चाहिए।
निशांत त्यागी

0

स्विफ्ट 4.1 के साथ macOS के लिए फ़ॉन्ट नाम और परिवार सूचीबद्ध करें :

NSFontManager.shared.availableFonts.map { print($0) }
NSFontManager.shared.availableFontFamilies.map { print($0) }

-2

स्विफ्ट 4.0 समर्थित

यह सभी फ़ॉन्ट परिवार को प्रिंट करने के लिए केवल एक लाइन कोड है और यह फ़ॉन्ट के नाम हैं

override func viewDidLoad() {
    super.viewDidLoad()
    //Main line of code
    UIFont.familyNames.sorted().forEach({ print($0); UIFont.fontNames(forFamilyName: $0 as String).forEach({print($0)})})
}

प्रश्न पढ़ें।
फोगमिस्टर

@Fogmeister आपका स्वीकृत उत्तर इस प्रकार है कि मैं इस कोड को छोटे तरीके से
लिखता हूं

यह पंक्ति ttf या otf फ़ाइल पढ़ती है और फिर फ़ॉन्ट परिवार देती है और यह सभी फोंट का नाम है .. @Fogmeister
NiravS

यदि स्वीकृत उत्तर आपके जैसा ही है ... तो आप इसे क्यों लिख रहे हैं? बस जो पहले से मौजूद है, उसे संपादित करें (यही संपादन बटन है)। छोटे, तुच्छ परिवर्तनों के लिए अपने उत्तरों को कॉपी करके अन्य लोगों के प्रतिनिधि को चोरी करने का प्रयास न करें। मैंने अब स्वीकृत प्रश्न को और हाल ही में बदल दिया है जो दिखाता है कि फोंट को ठीक से कैसे स्थापित किया जाए। धन्यवाद
Fogmeister

इसके अलावा, आपका उत्तर "कोड की केवल एक पंक्ति" है, लेकिन यह बहुत अधिक अपठनीय है। मैं एक जवाब पसंद करूंगा जिसमें कई लाइनें हैं जिन्हें आसानी से स्कैन किया जा सकता है कि यह क्या कर रहा है।
फोगमिस्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.