Fonts azure 1.50的PDFSharp专用字体
我已经下载并安装了PDFSharp 1.5,使用私人字体时遇到问题。我已经在测试中创建了一个pdf创建者,它工作得很好。当我把它加载到Azure时,它会给我一个错误:无法加载字体。做了调查,发现他们没有任何加载的字体,所以我必须使用私人字体。我只能找到旧的1.3版本的示例,并且这些方法已更改为新的。有人能给我举一个使用新版本PDFSharp的简单例子吗Fonts azure 1.50的PDFSharp专用字体,fonts,private,pdfsharp,Fonts,Private,Pdfsharp,我已经下载并安装了PDFSharp 1.5,使用私人字体时遇到问题。我已经在测试中创建了一个pdf创建者,它工作得很好。当我把它加载到Azure时,它会给我一个错误:无法加载字体。做了调查,发现他们没有任何加载的字体,所以我必须使用私人字体。我只能找到旧的1.3版本的示例,并且这些方法已更改为新的。有人能给我举一个使用新版本PDFSharp的简单例子吗 感谢John在使用PDFsharp 1.50的WPF版本时,您可以在自己的类中实现IFONTESOLVER,并将该类的实例分配给GlobalFo
感谢John在使用PDFsharp 1.50的WPF版本时,您可以在自己的类中实现
IFONTESOLVER
,并将该类的实例分配给GlobalFontSettings.FontResolver
PDFsharp 1.50仍在建设中。当它是最终的,它应该包括FontResolver样本
示例代码可在PDFsharp论坛上找到:注意:XPrivateFontCollection应该与GDI和WPF构建一起使用。如果您使用文档预览并希望在那里看到您的字体,则必须使用XPrivateFontCollection。
对于没有用户界面的进程(例如,在web服务器上生成PDF),IFontResolver可能是最佳选择,但它不适用于GDI构建。这适用于PdfSharp 1.5 beta3b。这是一个完整的固定示例,基于其他答案和其他问题的链接-但对于Arial 将您想要的字体添加到项目中-在下面的示例中,我将
Arial
放在MyProject\font\Arial\Arial.ttf
等中。将每个字体文件设置为嵌入式资源(属性->构建操作)
使用静态调用应用字体解析器,如下所示:
MyFontResolver.Apply(); // Ensures it's only applied once
下面是字体解析程序类:
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;
}
}
}
MyFontResolver类:IFontResolver
{
public FontResolverInfo ResolveTypeface(字符串familyName、bool-isBold、bool-istalic)
{
//忽略字体名称的大小写。
var name=familyName.ToLower().TrimEnd('#');
//处理我们知道的字体。
交换机(名称)
{
“arial”一案:
如果(以粗体显示)
{
如果(伊斯兰语)
返回新的FontResolverInfo(“Arial#bi”);
返回新的FontResolverInfo(“Arial#b”);
}
如果(伊斯兰语)
返回新的FontResolverInfo(“Arial#i”);
返回新的FontResolverInfo(“Arial#”);
}
//我们将所有其他字体请求传递给默认处理程序。
//在没有足够权限的情况下在web服务器上运行时,可以在此阶段返回默认字体。
返回平台FontResolver.ResolveTypeface(familyName、isBold、isItalic);
}
公共字节[]GetFont(字符串faceName)
{
开关(faceName)
{
“Arial#”格:
返回LoadFontData(“MyProject.fonts.arial.arial.ttf”);;
判例“Arial#b”:
返回LoadFontData(“MyProject.fonts.arial.arialbd.ttf”);;
判例“Arial#i”:
返回LoadFontData(“MyProject.fonts.arial.ariali.ttf”);
案例“Arial#bi”:
返回LoadFontData(“MyProject.fonts.arial.arialbi.ttf”);
}
返回null;
}
///
///从嵌入式资源返回指定的字体。
///
专用字节[]LoadFontData(字符串名称)
{
var assembly=assembly.getExecutionGassembly();
//测试代码以查找嵌入字体的名称-关注“ourResources”
//var ourResources=assembly.GetManifestResourceNames();
使用(Stream=assembly.GetManifestResourceStream(名称))
{
if(流==null)
抛出新ArgumentException(“没有名为“+name”的资源);
int count=(int)stream.Length;
字节[]数据=新字节[计数];
读取(数据,0,计数);
返回数据;
}
}
内部静态MyFontResolver OurGlobalFontResolver=null;
///
///确保字体解析程序仅应用一次(或引发异常)
///
内部静态无效应用()
{
如果(我们的GlobalFontResolver==null | | GlobalFontSettings.FontResolver==null)
{
if(ourglobalfonthesolver==null)
OurGlobalFontResolver=新的MyFontResolver();
GlobalFontSettings.FontResolver=我们的GlobalFontResolver;
}
}
}
1.50版的更新示例尚未发布-应在1月份发布。1.50版目前处于测试阶段。您仍然可以获得PDFsharp版本1.32(源代码和NuGet软件包)。我已经下载了版本1.32和版本1.3,我仍然感到困惑。我的困惑是,我在所有示例中都看到他们使用xprivateFontCollection pfc=new xprivateFontCollection();pfc.Add(XXXXXX);我得到了pfc.AddFont(XXX)他们使用什么版本来得到pfc.Add,这样我就可以使用示例了?好的,我找到了为什么我没有看到.Add,因为我使用的是GDI而不是WPF。仍然不起作用,但我至少更接近了。PDFsharp包含一个使用私有字体的工作示例。你没有显示任何代码,因此我们无法帮助你。这基本上是其他答案中链接的论坛帖子中的代码(没有任何学分)。你救了我一天。