PDFSharp专用字体为azure 1.50 [英] PDFSharp private fonts for azure 1.50
问题描述
我已经下载并安装了PDFSharp 1.5,并且在使用专用字体时遇到了麻烦。我创建了一个PDF格式的创作者,效果很好。当我将它加载到Azure中时,它会给我提供无法加载字体的错误。研究发现,他们没有任何加载的字体,所以我必须使用私人字体。我只能找到较旧的1.3版本的例子,方法更改为新的。有人可以给我看一个简单的例子,使用新版本的PDFSharp吗?
谢谢John
这是用于PdfSharp 1.5 beta3b的。这里是一个完整的和固定的例子,基于来自其他答案的链接和其他问题,但是对于Arial。
将你想要的字体添加到你的项目中 - 在我的例子中我把 Arial
放在 MyProject \fonts \arial\arial.ttf
等等中。将每个字体文件设置为嵌入式资源(属性 - >构建动作)。
使用静态调用应用字体解析器,如下所示:
MyFontResolver.Apply(); //确保它只应用一次
这里是字体解析器类:
class MyFontResolver:IFontResolver
{
public FontResolverInfo ResolveTypeface(string familyName,bool isBold,bool isItalic)
{
//忽略字体名称的大小写。
var name = familyName.ToLower()。TrimEnd('#');
//处理我们知道的字体。
switch(name)
{
casearial:
if(isBold)
{
if(isItalic)
返回新的FontResolverInfo ( Arial字体#BI);
返回新的FontResolverInfo(Arial#b);
if(isItalic)
return new FontResolverInfo(Arial#i);
返回新的FontResolverInfo(Arial#);
}
//我们将所有其他字体请求传递给默认处理程序。
//在没有足够权限的Web服务器上运行时,可以在此阶段返回默认字体。
返回PlatformFontResolver.ResolveTypeface(familyName,isBold,isItalic);
$ b public byte [] GetFont(string faceName)
{
switch(faceName)
{
caseArial#:
返回LoadFontData(MyProject.fonts.arial.arial.ttf);;
caseArial#b:
return LoadFontData(MyProject.fonts.arial.arialbd.ttf);;
caseArial#i:
return LoadFontData(MyProject.fonts.arial.ariali.ttf);
caseArial#bi:
return LoadFontData(MyProject.fonts.arial.arialbi.ttf);
}
返回null;
}
///< summary>
///从嵌入资源中返回指定的字体。
///< / summary>
private byte [] LoadFontData(string name)
{
var assembly = Assembly.GetExecutingAssembly();
//测试代码以查找嵌入式字体的名称 - 在ourResources
上放置一个监视器// var ourResources = assembly.GetManifestResourceNames();
使用(Stream stream = assembly.GetManifestResourceStream(name))
{
if(stream == null)
throw new ArgumentException(No resource with name + name);
int count =(int)stream.Length;
byte [] data = new byte [count];
stream.Read(data,0,count);
返回数据;
}
}
内部静态MyFontResolver OurGlobalFontResolver = null;
///< summary>
///确保字体解析器只应用一次(或引发异常)
///< / summary>
内部静态无效应用()
{
if(OurGlobalFontResolver == null || GlobalFontSettings.FontResolver == null)
{
if(OurGlobalFontResolver == null)
OurGlobalFontResolver = new MyFontResolver();
GlobalFontSettings.FontResolver = OurGlobalFontResolver;
}
}
}
I have downloaded and installed PDFSharp 1.5 and I am having trouble using private fonts. I have created in testing a pdf creator and it works great. When I load it into Azure it gives me the error can't load font. Did research and found out that they do not have any loaded fonts so I must use private font. I can only find examples of the older 1.3 version and the methods are changed to new ones. Can somebody show me a simple example using the new version of PDFSharp?
Thanks John
This is for PdfSharp 1.5 beta3b. Here is a complete and fixed example based on links from other answers, and other questions - but for Arial.
Add the fonts you want to your project - in my example below I put Arial
in MyProject\fonts\arial\arial.ttf
etc. Set each font file as an embedded resource (properties -> build action).
Apply the font resolver using the static call like this:
MyFontResolver.Apply(); // Ensures it's only applied once
Here's the font resolver class:
class MyFontResolver : IFontResolver
{
public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
{
// Ignore case of font names.
var name = familyName.ToLower().TrimEnd('#');
// Deal with the fonts we know.
switch (name)
{
case "arial":
if (isBold)
{
if (isItalic)
return new FontResolverInfo("Arial#bi");
return new FontResolverInfo("Arial#b");
}
if (isItalic)
return new FontResolverInfo("Arial#i");
return new FontResolverInfo("Arial#");
}
// We pass all other font requests to the default handler.
// When running on a web server without sufficient permission, you can return a default font at this stage.
return PlatformFontResolver.ResolveTypeface(familyName, isBold, isItalic);
}
public byte[] GetFont(string faceName)
{
switch (faceName)
{
case "Arial#":
return LoadFontData("MyProject.fonts.arial.arial.ttf");;
case "Arial#b":
return LoadFontData("MyProject.fonts.arial.arialbd.ttf");;
case "Arial#i":
return LoadFontData("MyProject.fonts.arial.ariali.ttf");
case "Arial#bi":
return LoadFontData("MyProject.fonts.arial.arialbi.ttf");
}
return null;
}
/// <summary>
/// Returns the specified font from an embedded resource.
/// </summary>
private byte[] LoadFontData(string name)
{
var assembly = Assembly.GetExecutingAssembly();
// Test code to find the names of embedded fonts - put a watch on "ourResources"
//var ourResources = assembly.GetManifestResourceNames();
using (Stream stream = assembly.GetManifestResourceStream(name))
{
if (stream == null)
throw new ArgumentException("No resource with name " + name);
int count = (int)stream.Length;
byte[] data = new byte[count];
stream.Read(data, 0, count);
return data;
}
}
internal static MyFontResolver OurGlobalFontResolver = null;
/// <summary>
/// Ensure the font resolver is only applied once (or an exception is thrown)
/// </summary>
internal static void Apply()
{
if (OurGlobalFontResolver == null || GlobalFontSettings.FontResolver == null)
{
if (OurGlobalFontResolver == null)
OurGlobalFontResolver = new MyFontResolver();
GlobalFontSettings.FontResolver = OurGlobalFontResolver;
}
}
}
这篇关于PDFSharp专用字体为azure 1.50的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!