Ros*_*oss 5 wpf resources fonts xps
创建XPS文件时,它会将原始文档的字体作为ODTTF字体文件进行子集和模糊处理,并将它们捆绑在XPS文件中(这只是一个zip文件,因此可以轻松提取它们.)
我已经提取了其中一个ODTTF文件,并将其作为资源包含在我的WPF应用程序中.
我现在正在尝试将它用作TextBlock的FontFamily.我尝试了各种URI字符串来引用我的XAML中的ODTTF字体,但我根本无法使用它.(我可以获得常规的TTF文件,而不是ODTTF)
有没有办法做到这一点?我在一些谷歌搜索中找到了证据,人们正在设法做到这一点!
ODTTF文件被混淆.要将它们用作TTF,您必须对它们进行反混淆处理.您可以使用此代码:
void DeobfuscateFont(XpsFont font, string outname)
{
using (Stream stm = font.GetStream())
{
using (FileStream fs = new FileStream(outname, FileMode.Create))
{
byte[] dta = new byte[stm.Length];
stm.Read(dta, 0, dta.Length);
if (font.IsObfuscated)
{
string guid = new Guid(font.Uri.GetFileName().Split('.')[0]).ToString("N");
byte[] guidBytes = new byte[16];
for (int i = 0; i < guidBytes.Length; i++)
guidBytes[i] = Convert.ToByte(guid.Substring(i * 2, 2), 16);
for (int i = 0; i < 32; i++)
{
int gi = guidBytes.Length - (i % guidBytes.Length) - 1;
dta[i] ^= guidBytes[gi];
}
}
fs.Write(dta, 0, dta.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud)
一旦以这种方式写入.TTF文件,您就可以使用该字体.请注意,XPS文件中的字体是子集,仅包含XPS文件中实际使用的字符,因此它们在MS-Word中用作字体时没有用处.
归档时间: |
|
查看次数: |
2274 次 |
最近记录: |