Aracılığıyla paylaş


Özel Yazı Tipi Kümeleri

Bu konu başlığında, uygulamanızda özel yazı tiplerini kullanabileceğiniz çeşitli yollar açıklanmaktadır.

Giriş

Çoğu zaman, uygulamalar sistemde yerel olarak yüklenen yazı tiplerini kullanır. DirectWrite, IDWriteFactory3::GetSystemFontSetveya IDWriteFactory::GetSystemFontCollection yöntemlerini kullanarak bu yazı tiplerine erişim sağlar. Bazı durumlarda, uygulamalar Windows 10'un parçası olarak dahil edilen ancak geçerli sistemde şu anda yüklü olmayan yazı tiplerini de kullanmak isteyebilir. Bu tür yazı tiplerine, GetSystemFontSet yöntemi kullanılarak veya includeDownloadableFonts true olarak ayarlanmış idwriteFactory3::GetSystemFontCollectionçağrılarak Windows yazı tipi hizmetinden erişilebilir. 

Ancak bazı uygulama senaryolarında uygulamaların sistemde yüklü olmayan ve Windows Yazı Tipi Hizmeti tarafından sağlanmayan yazı tiplerini kullanması gerekir. Bu tür senaryolara örnekler aşağıda verilmiştir:

  • Yazı tipleri bir uygulama ikili dosyası içinde kaynak olarak eklenir.
  • Yazı tipi dosyaları bir uygulama paketi içinde paketlenir ve uygulamanın yükleme klasörünün altındaki diskte depolanır.
  • Uygulama, kullanıcı tarafından belirtilen yazı tipi dosyalarını yüklemesi gereken bir yazı tipi geliştirme aracıdır. 
  • Yazı tipleri, uygulamada görüntülenebilen veya düzenlenebilen belge dosyalarına eklenir. 
  • Uygulama, genel web yazı tipi hizmetinden alınan yazı tiplerini kullanır. 
  • Uygulama, özel bir ağ protokolü aracılığıyla akışa alınan yazı tipi verilerini kullanır. 

DirectWrite, bu ve diğer benzer senaryolarda özel yazı tipleriyle çalışmak için API'ler sağlar. Özel yazı tipi verileri yerel dosya sistemindeki dosyalardan gelebilir; HTTP kullanılarak erişilen uzak, bulut tabanlı kaynaklardan; veya bir bellek arabelleğine yüklendikten sonra rastgele kaynaklardan. 

Not

DirectWrite, Windows 7'den bu yana özel yazı tipleriyle çalışmak için API'ler sağlasa da, windows 10 Creators Update'e (önizleme derlemesi 15021 veya üzeri) daha yeni API'ler eklendi ve bu da bahsedilen senaryoların birkaçını uygulamayı kolaylaştırdı. Bu konu, Windows 10'da kullanılabilen API'lere odaklanır. Önceki Windows sürümlerinde çalışması gereken uygulamalar için bkz. Özel Yazı Tipi Koleksiyonları (Windows 7/8)

 

API'lerin özeti

Bu konu, aşağıdaki API'ler tarafından sağlanan işlevlere odaklanır:

 

Temel kavramlar

Özel yazı tipleriyle çalışmaya yönelik DirectWrite API'lerini anlamak için bu API'lerin altındaki kavramsal modeli anlamak yararlı olabilir. Temel kavramlar burada açıklanacaktır. 

DirectWrite gerçek metin düzeni veya işlemesi yaparken, gerçek yazı tipi verilerine erişmesi gerekir. Yazı tipi yüz nesnesi, yerel sistemde mevcut olması gereken gerçek yazı tipi verilerini barındırıyor. Ancak belirli bir yazı tipinin kullanılabilirliğini denetleme veya kullanıcıya yazı tipi seçimleri sunma gibi diğer işlemler için tek gereken, gerçek yazı tipi verilerinin kendisine değil belirli bir yazı tipine başvurudur. DirectWrite'te, yazı tipi yüz başvurusu nesnesi yalnızca yazı tipini bulmak ve örneği oluşturmak için gereken bilgileri tutar. Yazı tipi yüz başvurusu gerçek verileri tutmadığından, DirectWrite gerçek verilerin uzak bir ağ konumunda olduğu ve gerçek verilerin yerel olduğu yazı tipi yüz başvurularıyla ilgilenebilir.

Yazı tipi kümesi, yazı tipine başvurmak veya bunu aile adı veya yazı tipi kalınlığı değeri gibi diğer yazı tipleriyle karşılaştırmak için kullanılabilecek bazı temel, bilgi özellikleriyle birlikte bir yazı tipi yüz başvuruları kümesidir. Çeşitli yazı tiplerinin gerçek verileri yerel veya tümü uzak veya bir karışım olabilir.

Bir yazı tipi kümesi, karşılık gelen yazı tipi koleksiyonu nesnesini almak için kullanılabilir. Diğer ayrıntılar için aşağıdaki Yazı tipi kümeleri ve yazı tipi koleksiyonları bölümüne bakın. 

IDWriteFontSet arabirimi, aile adı veya yazı tipi kalınlığı gibi özellik değerlerini veya belirli özellik değerleriyle eşleşen yazı tipi yüzü başvurularını sorgulamaya olanak sağlayan yöntemler sağlar. Belirli bir seçime göre filtre uygulandıktan sonra, IDWriteFontFaceReference arabiriminin bir örneği, düzen ve işleme için kullanılabilecek ilgili IDWriteFontFace3 nesnesini almak için indirme yöntemleriyle (gerçek yazı tipi verileri şu anda uzaksa) elde edilebilir. 

IDWriteFontFile arabirimi, her yazı tipi yüzü veya yazı tipi yüzü başvurusunun altını çizer. Bu, bir yazı tipi dosyasının konumunu temsil eder ve iki bileşeni vardır: yazı tipi dosyası yükleyicisi ve yazı tipi dosyası anahtarı. Yazı tipi dosya yükleyicisi (IDWriteFontFileLoader), gerekirse bir dosyayı açmak için kullanılır ve veri içeren bir akış döndürür (IDWriteFontFileStream). Yükleyiciye bağlı olarak, veriler yerel bir dosya yolunda, uzak URL'de veya bellek arabelleğinde bulunabilir. Anahtar, yükleyici bağlamında dosyayı benzersiz olarak tanımlayan, yükleyicinin verileri bulmasına ve bunun için bir akış oluşturmasına olanak sağlayan yükleyici tanımlı bir değerdir. 

Özel yazı tipleri, özel yazı tipi kümesine kolayca eklenebilir ve bu da yazı tipi seçici kullanıcı arabirimi oluşturma gibi amaçlarla yazı tipi bilgilerini filtrelemek veya düzenlemek için kullanılabilir. Yazı tipi kümesi, IDWriteTextFormat ve IDWriteTextLayoutgibi üst düzey API'lerde kullanılmak üzere bir yazı tipi koleksiyonu oluşturmak için de kullanılabilir. IDWriteFontSetBuilder arabirimi, birkaç özel yazı tipi içeren özel bir yazı tipi kümesi oluşturmak için kullanılabilir. Ayrıca, özel yazı tiplerini ve sistem tarafından sağlanan yazı tiplerini karıştıran özel bir yazı tipi kümesi oluşturmak için de kullanılabilir; veya gerçek veriler için yazı tiplerini farklı kaynaklarla (yerel depolama, uzak URL'ler ve bellek) karıştırır. 

Belirtildiği gibi, yazı tipi yüz başvurusu uzak bir kaynaktaki yazı tipi verilerine başvurabilir, ancak düzen ve işleme için kullanılabilecek bir yazı tipi yüz nesnesi elde etmek için verilerin yerel olması gerekir. Uzak verilerin indirilmesi bir yazı tipi indirme kuyruğu tarafından işlenir. Uygulamalar IDWriteFontDownloadQueue arabirimini kullanarak indirme işlemini başlatmak üzere uzak yazı tiplerini indirme isteklerini sıralayabilir ve indirme işlemi tamamlandığında eyleme geçmek üzere idwriteFontDownloadListenerbirnesnesi kaydedebilir. 

Burada açıklanan arabirimlerin çoğu için DirectWrite sistem uygulamaları sağlar. Bir özel durum, bir uygulamanın uzak yazı tipleri yerel olarak indirildiğinde uygulamaya özgü eylemler gerçekleştirmek için uyguladığı IDWriteFontDownloadListenerarabirimi. Uygulamalar belirli diğer arabirimler için kendi özel uygulamalarını sağlamak için nedenlere sahip olabilir, ancak bu yalnızca belirli, daha gelişmiş senaryolarda gerekli olacaktır. Örneğin, bir uygulamanın WOFF2 kapsayıcı biçimini kullanan yerel depolamadaki yazı tipi dosyalarını işlemek için IDWriteFontFileLoader arabiriminin özel bir uygulamasını sağlaması gerekir. Ek ayrıntılar aşağıda sağlanacaktır. 

Yazı tipleri ve yazı tipi dosyası biçimleri

Anlamanıza yardımcı olan bir diğer önemli kavram, tek tek yazı tipi yüzleri ile bunları içeren yazı tipi dosyaları arasındaki ilişkidir. Tek bir yazı tipi içeren OpenType yazı tipi dosyası (.ttf veya .otf) fikri tanıdık geliyor. Ancak OpenType yazı tipi biçimi, birden çok yazı tipi içeren tek bir dosya olan OpenType Yazı Tipi Koleksiyonu'na (.ttc veya .otc) de olanak tanır. OpenType Collection dosyaları genellikle yakından ilişkili olan ve belirli yazı tipi verileri için aynı değerlere sahip büyük yazı tipleri için kullanılır: Yazı tipleri tek bir dosyada birleştirilerek ortak veriler çoğaltılabilir. Bu nedenle, bir yazı tipi yüzü veya yazı tipi yüz başvurusunun yalnızca bir yazı tipi dosyasına (veya eşdeğer veri kaynağına) başvurması değil, aynı zamanda dosyanın koleksiyon dosyası olabileceği genel durum için bu dosya içinde bir yazı tipi dizini de belirtmesi gerekir. 

Web'de kullanılan yazı tipleri için, yazı tipi verileri genellikle yazı tipi verilerinin sıkıştırmasını ve korsanlığa ve yazı tipi lisanslarının ihlaline karşı bir koruma düzeyi sağlayan WOFF veya WOFF2 gibi belirli kapsayıcı biçimlerinde paketlenir. İşlevsel olarak, WOFF veya WOFF2 dosyası OpenType yazı tipi veya Yazı Tipi Koleksiyonu dosyasıyla eşdeğerdir, ancak veriler kullanılmadan önce paketin açılmasını gerektiren farklı bir biçimde kodlanmıştır. 

Bazı DirectWrite API'leri tek tek yazı tipi yüzleriyle ilgilenirken, diğer API'ler birden çok yüz içeren OpenType Koleksiyonu dosyalarını içerebilecek dosyaları işleyebilir. Benzer şekilde, bazı API'ler yalnızca ham, OpenType biçimindeki verilerle ilgilenirken, diğer API'ler paketlenmiş WOFF ve WOFF2 kapsayıcı biçimlerini işleyebilir. Bu ayrıntılar aşağıdaki tartışmada verilmiştir. 

Yazı tipi kümeleri ve yazı tipi koleksiyonları

Bazı uygulamalar, IDWriteFontCollection arabirimi kullanılarak yazı tipleriyle çalışmak için uygulanabilir. Yazı tipi koleksiyonu ile yazı tipi kümesi arasında doğrudan bir yazışma vardır. Her birinde aynı yazı tipleri bulunabilir, ancak bunları farklı bir kuruluşla sunarlar. Herhangi bir yazı tipi koleksiyonundan, karşılık gelen bir yazı tipi kümesi elde edilebilir ve tam tersi de yapılabilir.

Bir dizi özel yazı tipiyle çalışırken, özel yazı tipi kümesi oluşturmak için yazı tipi kümesi oluşturucu arabirimini kullanmak ve yazı tipi kümesi oluşturulduktan sonra bir yazı tipi koleksiyonu elde etmek en kolayıdır. Özel yazı tipi kümesi oluşturma işlemi aşağıda ayrıntılı olarak açıklanacaktır. Bir yazı tipi kümesinden IDWriteFontCollection1 arabirimi almak için IDWriteFactory3::CreateFontCollectionFromFontSetyöntemikullanılır.

Uygulamanın bir koleksiyon nesnesi varsa ve buna karşılık gelen bir yazı tipi kümesi alması gerekiyorsa, bu IDWriteFontCollection1::GetFontSet yöntemi kullanılarak yapılabilir. 

Yaygın senaryolar

Bu bölümde, özel yazı tipi kümelerini içeren en yaygın senaryolardan bazıları açıklanmaktadır:

  • Yerel dosya sistemindeki yollarda rastgele yazı tipleri kullanarak özel yazı tipi kümesi oluşturma.
  • Yerel dosya sisteminde depolanan bilinen yazı tiplerini (uygulamayla birlikte paketlenmiş olabilir) kullanarak özel bir yazı tipi kümesi oluşturma.
  • Web'de bilinen uzak yazı tiplerini kullanarak özel yazı tipi kümesi oluşturma.
  • Belleğe yüklenen yazı tipi verilerini kullanarak özel yazı tipi kümesi oluşturma.

Bu senaryolar için eksiksiz uygulamalar DirectWrite Özel Yazı Tipi Kümeleri örneğisağlanır. Bu örnek ayrıca WOFF veya WOFF2 kapsayıcı biçimlerinde paketlenmiş yazı tipi verilerini işlemeye yönelik bir gelişmiş senaryo daha gösterir. Bu senaryo aşağıda açıklanacaktır. 

Yerel dosya sisteminde rastgele yazı tipleri kullanarak yazı tipi kümesi oluşturma

Yerel depolamada rastgele bir yazı tipi dosyası kümesiyle ilgilenirken, IDWriteFontSetBuilder1::AddFontFileyöntemikullanışlıdır çünkü tek bir çağrıda OpenType Yazı Tipi Koleksiyonu dosyasındaki tüm yazı tipi yüzlerinin yanı sıra OpenType değişken yazı tipinin tüm örneklerini işleyebilir. Bu, Windows 10 Creators Update'te (önizleme derlemesi 15021 veya üzeri) kullanılabilir ve kullanılabilir olduğunda önerilir. 

Bu yöntemi kullanmak için aşağıdaki işlemi kullanın.

1. IDWriteFactory5 arabirimini oluşturarak başlayın:
IDWriteFactory5* pDWriteFactory; 
HRESULT hr = DWriteCreateFactory( 
  DWRITE_FACTORY_TYPE_SHARED, 
  __uuidof(IDWriteFactory5), 
  reinterpret_cast<IUnknown**>(&pDWriteFactory) 
); 

 
2. IDWriteFontSetBuilder1 arabirimini edinmek için fabrikayı kullanın:

IDWriteFontSetBuilder1* pFontSetBuilder; 
if (SUCCEEDED(hr)) 
{ 
  hr = pDWriteFactory->CreateFontSetBuilder(&pFontSetBuilder); 
}  
                
  1. Yerel dosya sistemindeki her yazı tipi dosyası için, buna başvuran bir IDWriteFontFile oluşturun:
IDWriteFontFile* pFontFile; 
if (SUCCEEDED(hr)) 
{ 
  hr = pDWriteFactory->CreateFontFileReference(pFilePath, /* lastWriteTime*/ nullptr, &pFontFile); 
} 

 
4. AddFontFile yöntemini kullanarak IDWriteFontFile nesnesini yazı tipi kümesi oluşturucusunun içine ekleyin:

hr = pFontSetBuilder->AddFontFile(pFontFile); 

CreateFontFileReference çağrısında belirtilen dosya yolu desteklenen bir OpenType dosyası dışında bir şeye başvuruyorsa, AddFontFileçağrısı DWRITE_E_FILEFORMAT bir hata döndürür.

  1. Yazı tipi kümesi oluşturucusunun tüm dosyaları eklendikten sonra özel yazı tipi kümesi oluşturulabilir:
IDWriteFontSet* pFontSet; 
hr = pFontSetBuilder->CreateFontSet(&pFontSet); 

 

Uygulamanın Windows 10 Creators Update'ten önceki Windows 10 sürümlerinde çalışması gerekiyorsa AddFontFile yöntemi kullanılamaz. Kullanılabilirlik, bir IDWriteFactory3 arabirimi oluşturulup queryinterface kullanılarak IDWriteFactory5 arabirimi elde etmeye çalışılarak algılanabilir: Bu başarılı olursa , IDWriteFontSetBuilder1 arabirimi ve AddFontFile yöntemi de kullanılabilir.

AddFontFile yöntemi kullanılamıyorsa, tek tek yazı tipi yüzleri eklemek için IDWriteFontSetBuilder::AddFontFaceReferenceyöntemi kullanılmalıdır. Birden çok yüz içeren OpenType Yazı Tipi Koleksiyonu dosyalarına izin vermek için, IDWriteFontFile::Analyze yöntemi, dosyanın içindeki yüz sayısını belirlemek için kullanılabilir. İşlem aşağıdaki gibidir.

1. IDWriteFactory3 arabirimini oluşturarak başlayın:
IDWriteFactory3* pDWriteFactory; 
HRESULT hr = DWriteCreateFactory( 
DWRITE_FACTORY_TYPE_SHARED, 
  __uuidof(IDWriteFactory5), 
  reinterpret_cast<IUnknown**>(&pDWriteFactory) 
); 
  1. IDWriteFontSetBuilder arabirimini almak için fabrikayı kullanın:
IDWriteFontSetBuilder* pFontSetBuilder; 
if (SUCCEEDED(hr)) 
{ 
  hr = pDWriteFactory->CreateFontSetBuilder(&pFontSetBuilder); 
} 
  1. Her yazı tipi dosyası için, yukarıdaki gibi IDWriteFontFileoluşturun:
IDWriteFontFile* pFontFile; 
if (SUCCEEDED(hr)) 
{ 
  hr = pDWriteFactory->CreateFontFileReference(pFilePath, /* lastWriteTime*/ nullptr, &pFontFile); 
} 

Dosyayı doğrudan yazı tipi kümesi oluşturucusunun içine eklemek yerine yüz sayısını belirlememiz ve IDWriteFontFaceReferencenesneleri tek tekoluşturmamız gerekir. 
4. Dosyadaki yüz sayısını almak için Analyze yöntemini kullanın. 

BOOL isSupported; 
DWRITE_FONT_FILE_TYPE fileType; 
UINT32 numberOfFonts; 
hr = pFontFile->Analyze(&isSupported, &fileType, /* face type */ nullptr, &numberOfFonts); 

Çözümle yöntemi de isSupported ve fileType parametreleri için değerler ayarlar. Dosya desteklenen bir biçim değilse, isSupported YANLIŞ olur ve dosyayı yoksayma gibi uygun eylemler gerçekleştirilebilir. 
5. numberOfFonts parametresinde ayarlanan yazı tipi sayısını döngüye alın. Döngü içinde, her dosya/dizin çifti için bir IDWriteFontFaceReference oluşturun ve bunu yazı tipi kümesi oluşturucusunun içine ekleyin. 

for (uint32_t fontIndex = 0; fontIndex < numberOfFonts; fontIndex++) 
{ 
  IDWriteFontFaceReference* pFontFaceReference;
  hr = pDWriteFactory->CreateFontFaceReference(pFontFile, fontIndex, DWRITE_FONT_SIMULATIONS_NONE, &pFontFaceReference);

  if (SUCCEEDED(hr))
  {
    hr = pFontSetBuilder->AddFontFaceReference(pFontFaceReference);
  }
} 
  1. Yazı tipi kümesi oluşturucusunun tüm yüzleri eklendikten sonra, yukarıda gösterildiği gibi özel yazı tipi kümesini oluşturun.

Bir uygulama, Windows 10 Creators Update'te çalışırken tercih edilen AddFontFile yöntemini kullanacak şekilde tasarlanabilir, ancak önceki Windows 10 sürümlerinde çalışırken AddFontFaceReferenceyöntemini kullanmaya geri döner. Yukarıda açıklandığı gibi IDWriteFactory5 arabiriminin kullanılabilirliğini test edin ve ardından buna göre dallayın. Bu yaklaşım, DirectWrite Özel Yazı Tipi Kümeleri örnekgösterilmiştir. 

Yerel dosya sisteminde bilinen yazı tiplerini kullanarak yazı tipi kümesi oluşturma

Yukarıda belirtildiği gibi, bir yazı tipi kümesindeki her yazı tipi yüzü başvurusu, aile adı ve yazı tipi kalınlığı gibi belirli bilgi özellikleriyle ilişkilendirilir. Yukarıda listelenen API çağrıları kullanılarak bir yazı tipi kümesi oluşturucusna özel yazı tipleri eklendiğinde, bu bilgi özellikleri doğrudan yazı tipi eklendikçe okunan gerçek yazı tipi verilerinden elde edilir. Ancak bazı durumlarda, bir uygulama yazı tipi hakkında başka bir bilgi kaynağına sahipse, bu özellikler için kendi özel değerlerini sağlamak isteyebilir. 

Bunun nasıl yararlı olabileceğini gösteren bir örnek olarak, bir uygulamanın uygulama içinde belirli kullanıcı arabirimi öğelerini sunmak için kullanılan bazı yazı tiplerini paketlediğini varsayalım. Bazen, örneğin yeni bir uygulama sürümünde, uygulamanın bu öğeler için kullandığı belirli yazı tiplerinin değiştirilmesi gerekebilir. Uygulama belirli yazı tiplerine başvuruları kodladıysa, bir yazı tipinin başka bir yazı tipiyle değiştirilmesi için bu başvuruların her birinin değiştirilmesi gerekir. Bunun yerine, uygulama işlenen öğenin veya metnin türüne göre işlevsel diğer adlar atamak için özel özellikler kullanıyorsa, her diğer adı tek bir yerde belirli bir yazı tipine eşler ve ardından yazı tiplerinin oluşturulduğu ve işlendiği tüm bağlamlardaki diğer adları kullanır, ardından bir yazı tipini başka bir yazı tipiyle değiştirmek için yalnızca diğer adın belirli bir yazı tipiyle eşlendiği bir yerin değiştirilmesi gerekir. 

IDWriteFontSetBuilder::AddFontFaceReference yöntemi çağrıldığında bilgilendirici özellikler için özel değerler atanabilir. Bunu yapmak için yöntemi aşağıdaki gibidir; bu, herhangi bir Windows 10 sürümünde kullanılabilir. 

Yukarıda gösterildiği gibi, IDWriteFactory3edinerek başlayın ve IDWriteFontSetarabirimlerini. Eklenecek her özel yazı tipi yüzü için, yukarıda gösterildiği gibi IDWriteFontFaceReferenceoluşturun. Bununla birlikte, bu yazı tipi kümesi oluşturucusunun eklenmesinden önce (yukarıda gösterilen 5. adımdaki döngüde), uygulama kullanılacak özel özellik değerlerini tanımlar. 

Özel özellik değerleri kümesi, DWRITE_FONT_PROPERTY yapıları dizisi kullanılarak tanımlanır. Bunların her biri, DWRITE_FONT_PROPERTY_ID numaralandırmasından belirli bir özelliği ve kullanılacak ilgili özellik değerini tanımlar.  

Tüm özellik değerlerinin dize olarak atandığını unutmayın. Bunlar daha sonra kullanıcılara gösterilebilirse, farklı diller için belirli bir özelliğin alternatif değerleri ayarlanabilir, ancak bu gerekli değildir. Ayrıca, uygulama tarafından herhangi bir özel özellik değeri ayarlanırsa, Yazı Tipi kümesinde yalnızca belirtilen değerlerin kullanılacağını unutmayın; DirectWrite, bir yazı tipi kümesinde kullanılan bilgi özellikleri için doğrudan yazı tipinden herhangi bir değer türetmeyecektir. 

Aşağıdaki örnek, üç bilgi özelliği için özel değerleri tanımlar: aile adı, tam ad ve yazı tipi ağırlığı. 

DWRITE_FONT_PROPERTY props[] = 
{ 
  { DWRITE_FONT_PROPERTY_ID_FAMILY_NAME, L"My Icon Font", L"en-US" }, 
  { DWRITE_FONT_PROPERTY_ID_FULL_NAME, L"My Icon Font", L"en-US" }, 
  { DWRITE_FONT_PROPERTY_ID_WEIGHT, L"400", nullptr } 
}; 
               
            

Bir yazı tipi için istenen özellik değerleri dizisini tanımladıktan sonra AddFontFaceRefence'a çağrı yapın ve hem özellik dizisini hem de yazı tipi yüz başvuruyu geçirin. 

hr = pFontSetBuilder->AddFontFaceReference(pFontFaceReference, props, ARRAYSIZE(props)); 

 

Tüm özel yazı tipi yüzleri, özel özellikleriyle birlikte yazı tipi kümesi oluşturucusna eklendikten sonra, yukarıda gösterildiği gibi özel yazı tipi kümesini oluşturun. 

Web'de bilinen uzak yazı tiplerini kullanarak özel yazı tipi kümesi oluşturma

Özel özellikler uzak yazı tipleriyle çalışma açısından önemlidir. Her yazı tipi yüz başvurusu, yazı tipini niteleyip diğer yazı tiplerinden ayırt etmek için bazı bilgi özelliklerine sahip olmalıdır. Uzak yazı tipleri için yazı tipi verileri yerel olmadığından, DirectWrite özellikleri doğrudan yazı tipi verilerinden türetemez. Bu nedenle, yazı tipi kümesi oluşturucusunun uzak yazı tipi eklenirken özelliklerin açıkça sağlanması gerekir.

Bir yazı tipi kümesine uzak yazı tipleri eklemeye yönelik API çağrılarının sırası, önceki senaryo için açıklanan diziye benzer. Ancak yazı tipi verileri uzak olduğundan, gerçek yazı tipi verilerini okumak için yapılan işlemler, yerel depolamadaki dosyalarla çalışırken gerçekleştirilecek işlemlerden farklı olacaktır. Bu durum için, IdWriteRemoteFontFileLoaderyeni bir alt düzey arabirim, Windows 10 Creators Update'e eklenmiştir. 

Uzak yazı tipi dosya yükleyicisini kullanmak için önce bir DirectWrite fabrikasına kaydedilmesi gerekir. Yükleyiciyle ilişkilendirilmiş yazı tipleri kullanıldığı sürece yükleyicinin uygulama tarafından tutulması gerekir. Yazı tipleri artık kullanımda olmadığında ve fabrika yok edilmeden önce bir noktada yükleyicinin kaydı kaldırılmalıdır. Bu, yükleyici nesnesinin sahibi olan sınıfın yıkıcısında yapılabilir. Bu adımlar aşağıda gösterilir. 

Uzak yazı tiplerini kullanarak özel yazı tipi kümesi oluşturma yöntemi aşağıdaki gibidir; Bunun için Windows 10 Creators Update gerekir.  

1. Yukarıda gösterildiği gibi bir IDWriteFactory5 arabirimi oluşturun.  2. Yukarıda gösterildiği gibi bir IDWriteFontSetBuilder arabirimi oluşturun.  3. IDWriteRemoteFontFileLoaderalmak için fabrikayı kullanın. 
IDWriteRemoteFontFileLoader* pRemoteFontFileLoader; 
if (SUCCEEDED(hr)) 
{ 
    hr = pDWriteFactory->CreateHttpFontFileLoader( 
        /* referrerURL */ nullptr, 
        /* extraHeaders */ nullptr, 
        &pRemoteFontFileLoader 
    ); 
} 

Bu, uygulama adına yazı tipi verilerini indirmek için HTTP etkileşimlerini işleyebilen uzak yazı tipi dosya yükleyici arabiriminin sistem tarafından sağlanan uygulamasını döndürür. Yazı tipi hizmeti veya yazı tiplerinin kaynağı olan hizmetler için gerekirse başvuran URL'si veya ek üst bilgiler belirtilebilir.  

Önemli

Güvenlik notu: Uzak bir yazı tipini getirme girişiminde bulunulduğunda, bir saldırganın çağrılacak istenen sunucuyu sahtekarlık etme olasılığı vardır. Bu durumda, hedef ve başvuran URL'leri ve üst bilgi ayrıntıları saldırgana açıklanır. Bu riski azaltmak uygulama geliştiricilerin sorumluluğundadır. HTTP yerine HTTPS protokolünün kullanılması önerilir. 

 

Tek bir uzak yazı tipi dosya yükleyicisi birden çok yazı tipi için kullanılabilir, ancak yazı tipleri başvuran URL'si veya ek üst bilgiler için farklı gereksinimlere sahip birden çok hizmetten alınıyorsa farklı yükleyiciler kullanılabilir. 
4. Uzak yazı tipi dosya yükleyicisini fabrikaya kaydedin. 

 if (SUCCEEDED(hr)) 
 { 
     hr = pDWriteFactory->RegisterFontFileLoader(pRemoteFontFileLoader); 
 } 

Bu noktadan itibaren, özel yazı tipi kümesi oluşturma adımları, bilinen yerel yazı tipi dosyaları için açıklananlara benzer ve iki önemli özel durum vardır. İlk olarak, IDWriteFontFile nesnesi fabrikayı kullanmak yerine uzak yazı tipi dosya yükleyici arabirimi kullanılarak oluşturulur. İkinci olarak, yazı tipi verileri yerel olmadığından Analyze yöntemi kullanılamaz. Bunun yerine uygulama, uzak yazı tipi dosyasının OpenType Yazı Tipi Koleksiyonu dosyası olup olmadığını bilmeli ve öyleyse koleksiyondaki hangi yazı tiplerini kullanacağını ve her biri için dizini bilmesi gerekir. Bu nedenle, kalan adımlar aşağıdaki gibidir. 
5. Her uzak yazı tipi dosyası için, bir IDWriteFontFileoluşturmak için, yazı tipi dosyasına erişmek için gereken URL'yi belirterek uzak yazı tipi dosyası yükleyici arabirimini kullanın. 

 IDWriteFontFile* pFontFile; 
 hr = pRemoteFontFileLoader->CreateFontFileReferenceFromUrl( 
     pDWriteFactory, 
     /* baseUrl */ L"https://github.com/", 
     /* fontFileUrl */ L"winjs/winjs/blob/master/src/fonts/Symbols.ttf?raw=true", 
     &pFontFile 
 ); 

Tam URL'nin fontFileUrl parametresinde belirtilebileceğini veya temel ve göreli bölümlere ayrılabileceğini unutmayın. Bir temel URL belirtilirse baseUrl ve fontFileUrl değerlerinin birleştirmesi tam URL'yi sağlamalıdır; DirectWrite ek sınırlayıcı sağlamaz.

Önemli

Güvenlik / performans notu: Uzak yazı tipini getirme girişiminde bulunulduğunda, Windows'un sunucudan yanıt alacağı garanti değildir. Bazı durumlarda, bir sunucu geçersiz göreli URL için dosya bulunamadı hatasıyla yanıt verebilir, ancak birden çok geçersiz istek alırsa yanıt vermeyi durdurabilir. Sunucu yanıt vermezse Windows zaman aşımına uğradı ancak birden çok getirme işlemi başlatılırsa bu işlem birkaç dakika sürebilir. Çağrı yapıldığında URL'lerin geçerli olmasını sağlamak için yapabileceklerini yapmalısınız. 

 

Ayrıca URL'nin ham bir OpenType yazı tipi dosyasına (.ttf, .otf, .ttc, .otc) işaret ettiğini, ancak WOFF veya WOFF2 kapsayıcı dosyasındaki yazı tiplerini de işaretebileceğini unutmayın. WOFF veya WOFF2 dosyasına başvurulursa, uzak yazı tipi dosya yükleyicisinin DirectWrite uygulaması, yazı tipi verilerini kapsayıcı dosyasından otomatik olarak açar. 
6. Kullanılacak uzak yazı tipi dosyasındaki her yazı tipi yüz dizini için idwriteFontFaceReferenceoluşturun. 

 IDWriteFontFaceReference* pFontFaceReference; 
 hr = pDWriteFactory->CreateFontFaceReference(pFontFile, /* faceIndex */ 0, DWRITE_FONT_SIMULATIONS_NONE, &pFontFaceReference);
  1. Yukarıda gösterildiği gibi yazı tipi yüzü için özel özellikler tanımlayın. 
  2. Yukarıda gösterildiği gibi özel özelliklerle birlikte yazı tipi yüz başvurusunu yazı tipi kümesi oluşturucusna ekleyin. 
  3. Yazı tipi kümesi oluşturucusunun tüm yazı tipleri eklendikten sonra, yukarıda gösterildiği gibi yazı tipi kümesini oluşturun. 
  4. Uzak yazı tiplerinin artık kullanılmayacağı bir noktada, uzak yazı tipi dosya yükleyicisinin kaydını kaldırın. 
hr = pDWriteFactory->UnregisterFontFileLoader(pRemoteFontFileLoader); 

Özel uzak yazı tipleri içeren bir özel yazı tipi kümesi oluşturulduktan sonra, yazı tipi kümesi uzak yazı tipleri için başvurular ve bilgilendiren özellikler içerir, ancak gerçek veriler hala uzaktır. Uzak yazı tipleri için DirectWrite desteği, yazı tipi kümesinde yazı tipi yüz başvurusunun korunmasına ve bir yazı tipinin düzen ve işlemede kullanılmak üzere seçilmesine olanak tanır, ancak metin düzeninin ne zaman gerçekleştirileceği gibi gerçek bir kullanım gereksinimi olana kadar gerçek verilerin indirilmemesini sağlar.  

Bir uygulama, DirectWrite'in yazı tipi verilerini indirmesini isteyerek ve yazı tipiyle herhangi bir işlem başlamadan önce başarılı bir indirmenin onaylanmasını bekleyerek ön yaklaşım benimseyebilir. Ancak ağ indirmesi, öngörülemeyen sürenin gecikme süresi anlamına gelir ve başarı da belirsizdir. Bu nedenle, düzenin ve işlemenin başlangıçta zaten yerel olan alternatif veya geri dönüş yazı tipleri kullanılarak, istenen uzak yazı tipinin paralel olarak indirilmesini ve ardından istenen yazı tipi indirildikten sonra sonuçların güncelleştirilmesini isteyerek farklı bir yaklaşım benimsemek genellikle daha iyi olacaktır. 

Yazı tipinin tamamının kullanılmadan önce indirilmesi isteğinde bulunmak için IDWriteFontFaceReference::EnqueueFontDownloadRequestyöntemikullanılabilir. Yazı tipi çok büyükse, belirli dizeleri işlemek için verilerin yalnızca bir bölümü gerekebilir. DirectWrite, enqueueCharacterDownloadRequestve EnqueueGlyphDownloadRequestbelirli içerik için gereken yazı tipi verilerinin bölümlerini istemek için kullanılabilecek ek yöntemler sağlar.  

Uygulamada gerçekleştirilecek yaklaşımın, işlemenin başlangıçta yerel, alternatif veya geri dönüş yazı tipleri kullanılarak yapılmasına izin vermek olduğunu varsayalım. IDWriteFontFallback::MapCharacters yöntemi yerel geri dönüş yazı tiplerini tanımlamak için kullanılabilir ve ayrıca tercih edilen yazı tipini indirme isteğini otomatik olarak sıralar. Ayrıca IDWriteTextLayout kullanılırsa ve düzendeki metnin bir kısmı veya tamamı uzak yazı tipi başvurusu kullanılarak biçimlendirilirse, DirectWrite otomatik olarak MapCharacters yöntemini kullanarak yerel geri dönüş yazı tiplerini alır ve uzak yazı tipi verilerini indirme isteğini sıraya alır. 

DirectWrite her fabrika için bir yazı tipi indirme kuyruğu tutar ve yukarıda belirtilen yöntemler kullanılarak yapılan istekler bu kuyruğa eklenir. Yazı tipi indirme kuyruğu, IDWriteFactory3::GetFontDownloadQueue yöntemi kullanılarak alınabilir. 

bir indirme isteğinde bulunulsa ancak yazı tipi verileri zaten yerelse, bu bir no-opsonuçlanır: İndirme kuyruğuna hiçbir şey eklenmez. Uygulama, IDWriteFontDownloadQueue::IsEmpty yöntemini çağırarak kuyruğun boş olup olmadığını veya bekleyen indirme istekleri olup olmadığını denetleyebilir. 

Kuyruğa uzak yazı tipi istekleri eklendikten sonra indirme işleminin başlatılması gerekir. IDWriteTextLayoutuzak yazı tipleri kullanıldığında, uygulama GetLineMetrics veya Draw yöntemleri gibi düzen veya işleme işlemlerini zorlayan IDWriteTextLayout yöntemleri çağırdığında indirme otomatik olarak başlatılır. Diğer senaryolarda, uygulamanın IDWriteFontDownloadQueue::BeginDownloadçağrısı yaparak indirmeyi doğrudan başlatması gerekir.  

İndirme tamamlandığında, bekleyen işlemlere devam etmek veya başlangıçta geri dönüş yazı tipleriyle yapılan işlemleri yinelemek için uygun eylemleri gerçekleştirmek uygulamaya bağlıdır. (DirectWrite'in metin düzeni kullanılıyorsa, geri dönüş yazı tipleri kullanılarak hesaplanan geçici sonuçları temizlemek için IDWriteTextLayout3::InvalidateLayoutkullanılabilir.) İndirme işlemi tamamlandığında uygulamanın bildirim alması ve uygun eylemleri gerçekleştirmesi için uygulamanın IDWriteFontDownloadListenerarabirimininuygulamasını sağlaması ve bunu BeginDownload çağrısına geçirmesi gerekir. 

Önemli

Güvenlik / performans notu: Uzak yazı tipini getirme girişiminde bulunulduğunda, Windows'un sunucudan yanıt alacağı garanti değildir. Sunucu yanıt vermezse Windows zaman aşımına uğradı ancak birden çok uzak yazı tipi getiriliyor ancak başarısız oluyorsa bu işlem birkaç dakika sürebilir. BeginDownload çağrısı hemen döndürülecek. Uygulamalar IDWriteFontDownloadListener::D ownloadCompleted çağrılmayı beklerken kullanıcı arabirimini engellememelidir. 

 

DirectWrite'in yazı tipi indirme kuyruğu ve IDWriteFontDownloadListener arabirimiyle bu etkileşimlerin örnek uygulamaları DirectWrite Özel Yazı Tipi Kümeleri örneğive ayrıca DirectWrite İndirilebilir Yazı Tipleri örneğiiçinde görülebilir. 

Belleğe yüklenen yazı tipi verilerini kullanarak özel yazı tipi kümesi oluşturma

Bir yazı tipi dosyasından veri okumak için alt düzey işlemlerin yerel disk üzerindeki dosyalar için Web'de uzak dosyalara göre farklı olması gibi, bellek arabelleğine yüklenen yazı tipi verileri için de aynı durum geçerlidir. Windows 10 Creators Update'e IDWriteInMemoryFontFileLoaderbellek içi yazı tipi verilerini işlemek için yeni bir alt düzey arabirim eklendi. 

Uzak yazı tipi dosya yükleyicisinde olduğu gibi, bellek içi yazı tipi dosya yükleyicisinin önce directWrite fabrikasına kaydedilmesi gerekir. Yükleyiciyle ilişkilendirilmiş yazı tipleri kullanıldığı sürece yükleyicinin uygulama tarafından tutulması gerekir. Yazı tipleri artık kullanımda olmadığında ve fabrika yok edilmeden önce bir noktada yükleyicinin kaydı kaldırılmalıdır. Bu, yükleyici nesnesinin sahibi olan sınıfın yıkıcısında yapılabilir. Bu adımlar aşağıda gösterilir. 

Uygulama, verilerle temsil edilen yazı tipi yüzleri hakkında ayrı bilgilere sahipse, özel özellikleri belirtilen bir yazı tipi kümesi oluşturucusunun yazı tipi yüz başvurularını tek tek ekleyebilir. Ancak yazı tipi verileri yerel bellekte olduğundan bu gerekli değildir; DirectWrite, özellik değerlerini türetmek için verileri doğrudan okuyabilir. 

DirectWrite, yazı tipi verilerinin bir OpenType dosyasına (.ttf, .otf, .ttc, .otc) eşdeğer, ancak disk yerine bellekte ham, OpenType biçiminde olduğunu varsayar. Veriler WOFF veya WOFF2 kapsayıcı biçiminde olamaz. Veriler bir OpenType Yazı Tipi Koleksiyonunu temsil edebilir. Özel özellikler kullanılmıyorsa, IDWriteFontSetBuilder1::AddFontFile yöntemi, tek bir çağrıda verilerdeki tüm yazı tipi yüzlerini eklemek için kullanılabilir. 

Bellek içi senaryo için dikkat edilmesi gereken önemli noktalardan biri verilerin ömrüdür. DirectWrite'e sahip olduğuna dair net bir gösterge olmadan arabelleğe yönelik bir işaretçi sağlanırsa, DirectWrite verilerin bir kopyasını sahip olacağı yeni bir bellek arabelleğine oluşturur. Verilerin ve ek bellek ayırmanın kopyalanmasını önlemek için uygulama, IUnknown uygulayan ve yazı tipi verilerini içeren bellek arabelleğine sahip olan bir veri sahibi nesnesi geçirebilir. DirectWrite, bu arabirimi uygulayarak nesnenin başvuru sayısına ekleyebilir ve böylece sahip olunan verilerin ömrünü güvence altına alabilir. 

Bellek içi yazı tipi verilerini kullanarak özel yazı tipi kümesi oluşturma yöntemi aşağıdaki gibidir; Bunun için Windows 10 Creators Update gerekir. Bu, IUnknown uygulayan ve ayrıca bellek arabelleğine ve arabellek boyutuna işaretçi döndüren yöntemlere sahip olan, uygulama tarafından uygulanan bir veri sahibi nesnesi olduğunu varsayar. 

1. Yukarıda gösterildiği gibi bir IDWriteFactory5 arabirimi oluşturun. 2. Yukarıda gösterildiği gibi [**IDWriteFontSetBuilder1**](/windows/win32/api/dwrite_3/nn-dwrite_3-idwritefontsetbuilder1) arabirimi oluşturun. 3. IdWriteInMemoryFontFileLoader almak için fabrikayı kullanın. 
 IDWriteInMemoryFontFileLoader* pInMemoryFontFileLoader; 
if (SUCCEEDED(hr)) 
{ 
    hr = pDWriteFactory->CreateInMemoryFontFileLoader(&pInMemoryFontFileLoader); 
}

Bu, bellek içi yazı tipi dosya yükleyici arabiriminin sistem tarafından sağlanan uygulamasını döndürür. 
4. Bellek içi yazı tipi dosya yükleyicisini fabrikaya kaydedin. 

if (SUCCEEDED(hr)) 
{ 
    hr = pDWriteFactory->RegisterFontFileLoader(pInMemoryFontFileLoader); 
}

 
5. Her bellek içi yazı tipi dosyası için, IDWriteFontFileoluşturmak için bellek içi yazı tipi dosya yükleyicisini kullanın. 

IDWriteFontFile* pFontFile; 
hr = pInMemoryFontFileLoader->CreateInMemoryFontFileReference( 
    pDWriteFactory, 
    pFontDataOwner->fontData /* returns void* */, 
    pFontDataOwner->fontDataSize /* returns UINT32 */, 
    pFontDataOwner /* ownerObject, owns the memory with font data and implements IUnknown */, 
    &pFontFile 
); 

 
6. Yukarıda gösterildiği gibi, AddFontFile yöntemini kullanarak IDWriteFontFile nesnesini yazı tipi kümesi oluşturucusunun üzerine ekleyin.  Bir gereksinim varsa, uygulama bunun yerine IDWriteFontFaceReferenceIDWriteFontFiletemelinde tek teknesneler oluşturabilir, isteğe bağlı olarak her yazı tipi yüz başvurusu için özel özellikler tanımlayabilir ve ardından yukarıda gösterildiği gibi AddFontFaceReferenceyöntemini kullanarak özel özelliklere sahip yazı tipi yüz başvurularını yazı tipi kümesine ekleyebilir. 
7. Yazı tipi kümesi oluşturucusunun tüm yazı tipleri eklendikten sonra, yukarıda gösterildiği gibi özel yazı tipi kümesini oluşturun. 
8. Bellek içi yazı tiplerinin artık kullanılmayacağı bir noktada bellek içi yazı tipi dosya yükleyicisinin kaydını kaldırın. 

hr = pDWriteFactory->UnregisterFontFileLoader(pInMemoryFontFileLoader);

 

Gelişmiş senaryolar

Bazı uygulamaların yukarıda açıklanandan daha gelişmiş işleme gerektiren özel gereksinimleri olabilir. 

Yazı tipi kümelerini birleştirme

Bazı uygulamaların, diğer yazı tipi kümelerindeki öğelerin bir bileşimini oluşturan bir yazı tipi kümesi oluşturması gerekebilir. Örneğin, bir uygulama sistemde yüklü tüm yazı tiplerini bir dizi özel yazı tipiyle birleştiren veya belirli ölçütlerle eşleşen yüklü yazı tiplerini diğer yazı tipleriyle birleştiren bir yazı tipi kümesi oluşturmak isteyebilir. DirectWrite,yazı tipi kümelerinin işlemesini ve birleştirilmesini destekleyen API'lere sahiptir. 

İki veya daha fazla yazı tipi kümesini birleştirmek için IDWriteFontSetBuilder::AddFontSet yöntemi, tek bir çağrıda bir yazı tipi kümesi oluşturucusunun eklenmesi için verilen yazı tipi kümesindeki tüm yazı tiplerini ekler. Yeni yazı tipi kümesinde yalnızca mevcut yazı tipi kümesinden belirli yazı tipleri isteniyorsa, idwriteFontSet::GetMatchingFontsyöntemi, yalnızca belirtilen özelliklerle eşleşen yazı tiplerini içerecek şekilde filtrelenmiş yeni bir yazı tipi kümesi nesnesi türetmek için kullanılabilir. Bu yöntemler, iki veya daha fazla mevcut yazı tipi kümesindeki yazı tiplerini birleştiren özel bir yazı tipi kümesi oluşturmanın kolay bir yolunu sağlar

Yerel WOFF veya WOFF2 yazı tipi verilerini kullanma

Bir uygulamanın yerel dosya sisteminde veya bellek arabelleğinde yazı tipi dosyaları varsa, ancak WOFF veya WOFF2 kapsayıcı biçimlerini kullanıyorsa, DirectWrite (Windows 10 Creator Update veya üzeri), idwriteFactory5::UnpackFontFilekapsayıcı biçimini açmak için bir idwriteFontFileStreamdöndüren bir yöntem sağlar. 

Ancak, uygulamanın IDWriteFontFileStream bir yazı tipi dosya yükleyici nesnesine almak için bir yol gerekir. Bunun bir yolu, akışı sarmalayan özel bir IDWriteFontFileLoader uygulaması oluşturmaktır. Diğer yazı tipi dosya yükleyicilerde olduğu gibi, bu da kullanımdan önce kaydedilmeli ve fabrika kapsamı dışına çıkmadan önce kaydı kaldırılmalıdır.  

Özel yükleyici ham (paketlenmemiş) yazı tipi dosyalarıyla da kullanılacaksa, uygulamanın bu dosyaları işlemek için IDWriteFontFileStream arabiriminin özel bir uygulamasını da sağlaması gerekir. Ancak, ham yazı tipi dosyalarını işlemek için yukarıda açıklanan API'leri kullanmanın daha kolay yolları vardır. Özel akış uygulaması gereksinimi, paketlenmiş yazı tipi dosyaları ve ham yazı tipi dosyaları için ayrı kod yolları kullanılarak önlenebilir. 

Özel bir yazı tipi dosyası yükleyici nesnesi oluşturulduktan sonra, paketlenmiş yazı tipi dosyası verileri uygulamaya özgü yollarla yükleyiciye eklenir. Yükleyici, her biri DirectWrite'e uygun olmayan bir uygulama tanımlı anahtar kullanılarak tanımlanan birden çok yazı tipi dosyasını işleyebilir. Yükleyiciye paketlenmiş bir yazı tipi dosyası eklendikten sonra IDWriteFactory::CreateCustomFontFileReference yöntemi, belirli bir anahtar tarafından tanımlanan yazı tipi verileri için söz konusu yükleyiciye dayalı bir IDWriteFontFileelde etmek için kullanılır.  

Yazı tipi verilerinin gerçek paketi, yazı tipleri yükleyiciye eklendikçe yapılabilir, ancak directWrite 'nin yazı tipi verilerini ilk okuması gerektiğinde çağıracağı IDWriteFontFileLoader::CreateStreamFromKey yönteminde de işlenebilir. 

IDWriteFontFile nesnesi oluşturulduktan sonra, yazı tiplerini özel yazı tipi kümesine eklemeye yönelik kalan adımlar yukarıda açıklandığı gibi olacaktır. 

Bu yaklaşımı kullanan bir uygulama, DirectWrite Özel Yazı Tipi Kümeleri örneğinde gösterilmiştir. 

Özel alt düzey ağ uygulamasıyla DirectWrite uzak yazı tipi mekanizmalarını kullanma

Uzak yazı tiplerini işlemeye yönelik DirectWrite mekanizmaları, uzak yazı tipleri için yazı tipi yüz başvuruları içeren yazı tipi kümelerine sahip olmak, yazı tipi verilerinin yerelliğini denetlemek ve yazı tipi indirme istekleri için kuyruğu yönetmek gibi daha üst düzey mekanizmalara ve gerçek indirmeyi işleyen alt düzey mekanizmalara ayrılabilir. Bazı uygulamalar daha üst düzey uzak yazı tipi mekanizmalarını kullanmak isteyebilir, ancak http dışındaki protokolleri kullanarak sunucularla iletişim kurma gibi özel ağ etkileşimleri de gerektirir. 

Bu durumda, bir uygulamanın diğer alt düzey arabirimlerle gerekli yollarla etkileşim kuran IDWriteRemoteFontFileLoader arabiriminin özel bir uygulamasını oluşturması gerekir. Uygulamanın bu alt düzey arabirimlerin özel uygulamalarını da sağlaması gerekir: IDWriteRemoteFontFileStreamve IDWriteAsyncResult. Bu üç arabirim, DirectWrite'in indirme işlemleri sırasında çağıracağı geri çağırma yöntemlerine sahiptir. 

IDWriteFontDownloadQueue::BeginDownloadçağrıldığında, DirectWrite verilerin yerelliği hakkında uzak yazı tipi dosya yükleyicisine sorgular yapar ve uzak akışı istetir. Veriler yerel değilse akışın BeginDownload yöntemini çağırır. Akış uygulaması bu çağrıda engellememelidir, ancak directWrite'nin zaman uyumsuz indirme işlemini beklemek için kullanacağı bekleme tutamacını sağlayan IDWriteAsyncResult nesnesini geri geçirerek hemen döndürülmelidir. Özel akış uygulaması, uzaktan iletişimi işlemekle sorumludur. Tamamlanma olayı gerçekleştiğinde DirectWrite, işlemin sonucunu belirlemek için IDWriteAsyncResult::GetResultçağırır. Sonuç başarılı olursa, indirilen aralıklar için akışa yapılan sonraki ReadFragment çağrılarının başarılı olması beklenir. 

Önemli

Güvenlik/performans notu: Uzak yazı tipini getirme girişiminde bulunulduğunda, bir saldırganın çağrılan istenen sunucuyu yanıltması veya sunucunun yanıt vermemesi genel olarak olasıdır. Özel ağ etkileşimleri uyguluyorsanız, azaltmalar üzerinde üçüncü taraf sunucularla ilgilenmekten daha fazla denetiminiz olabilir. Ancak, bilgilerin açıklanmasını veya hizmet reddini önlemek için uygun risk azaltmaları göz önünde bulundurmak size bağlı. HTTPS gibi güvenli protokoller önerilir. Ayrıca, DirectWrite'e döndürülen olay tanıtıcısının sonunda ayarlanması için biraz zaman aşımı oluşturmalısınız. 

 

Önceki Windows sürümlerinde destekleyici senaryolar

Açıklanan senaryolar Windows'un önceki sürümlerinde DirectWrite'te desteklenebilir, ancak Windows 10'den önce kullanılabilir olan daha sınırlı API'leri kullanarak uygulamanın bir bölümünde çok daha fazla özel uygulama gerektirir. Daha fazla bilgi için bkz. Özel Yazı Tipi Koleksiyonları (Windows 7/8).