2016-03-28 10 views
0

XPS Yazdırma işlemini kolaylaştırmak için birkaç API ile birlikte evlenmeye çalışıyorum. True Type Yazı Tipleri bazen nasıl kullanıldıkları konusunda kısıtlı olduğundan, bir yazı tipi ile ilişkili lisans için işletim sistemini (Windows) sorgulamanız önerilir. Bunu yapmak için buldum yasaklanmış yöntem aşağıdaki gibidir: TTGetEmbeddingType başarılı ve privstatus {EMBED_PREVIEWPRINT, EMBED_EDITABLE, EMBED_INSTALLABLE, EMBED_NOEMBEDDING} biri olmalıdır Bu noktadaC++ LogFont XPS'e Katıştır

HDC hDC = CreateDC(L"DISPLAY", NULL, NULL, NULL); 
// logfont is a valid instance of LOGFONTW 
HGDIOBJ hfont = ::CreateFontIndirect(&logfont); 
if (!SelectObject(hDC, hfont)) 
    return; 
ULONG privstatus = 0; 
LONG ttStatus; 
ttStatus = TTGetEmbeddingType(hDC, &privstatus); 

ttStatus E_NONE olmalıdır. Cuma günü bu örnekte çalışıyordum. Bugün çalıştırılabilir TTGetEmbeddingType çalıştırdığımda, E_NONE yerine 0x0A (E_NOTATRUETYPEFONT) döndürür. Wat? İşletim sisteminin bir yazı tipinin gömülü olup olmadığını belirleme yeteneği hakkında temel bir şey eksik miyim?

+1

Devam eden başka bir şey var. Bu, uygulamanızla veya çevrenizle ciddi bir şekilde ilgilenilen bir şey olduğunu belirten oldukça temel bir hatadır. Ve yine de hataların doğru olmasına güvenmem. İşlevlerin ailesinin geri dönebileceği hatalardan biri olarak bile listelenmiyor. –

cevap

3

Eğer alıntı hata iletisi metni 10 (0x0A) bir sayısal değere sahiptir ERROR_BAD_ENVIRONMENT sistem hata kodu aittir ("çevre yanlış"). Ancak, TTGetEmbeddingType() bir sistem hata kodu döndürmez. TTGetEmbeddingType() documentation durumlar:

Başarılı olursa, E_NONE değerini döndürür.

Bu işlev yazı tipinde saklanan katıştırma ayrıcalıklarını okur ve ayrıcalıkları pulPrivStatus'a aktarır.

Aksi takdirde, Embedding-Function Error Messages'da açıklanan bir hata kodunu döndürür. Eğer T2embapi.h gerçek tanımları bakarsak

, 0x000A bir geri dönüş değeri belirtilen yazı bir TrueType yazı tipi değil E_NOTATRUETYPEFONT

olduğunu.

+0

Kullanılan yazı tipleri, Courier New, Arial ve OCR-A/B'nin türevleridir. TTGetEmbeddingType öğesinin dönüş değerini göz ardı edersem ve normal olarak yazı tiplerini kullanırsam XPS belgesine şikayette bulunmazlar. –

+0

@ g.d.d.c: Açıkça 'TTGetEmbeddingType() 'yazı tipinin bir TrueType yazı tipi olduğuna inanmıyor. Belki de 'CreateFontIndirect() ', olduğunu düşündüğünüz yazı tipini döndürmüyor (örneğiniz sonucu onaylamıyor). –

+0

Burada karışıklığım (ve dolayısıyla sorunun) nereden geliyor. Tam anlamıyla 48 saatten daha kısa bir süre önce test ettiğim örnekler çalışıyordu, ancak bugün yanlış bir geri dönüş değeri gibi görünen şeyleri görmezden gelerek program başarıyla oluşturuluyor. Kaynak değişikliklerini inceledim (ilgili olmayanlar var), hiçbir güncellemenin gerçekleşmediğini iki kez kontrol ettim, vb. XPS Belgesindeki _work_ fontları. –