如何在Assets文件夹中获取字体路径

时间:2019-01-02 16:16:58

标签: fonts xamarin.android itext android-assets

我使用itextsharp创建一个PDF文档,我需要连接Assets文件夹中的字体。 目前,当我将字体放入智能手机的内存中时,一切正常。

System.String ttf = Android.OS.Environment.ExternalStorageDirectory + 
"/arial.ttf";
var baseFont = BaseFont.CreateFont(tttt, BaseFont.IDENTITY_H, 
BaseFont.NOT_EMBEDDED);
var font = new Font(baseFont, Font.DEFAULTSIZE, Font.NORMAL);

doc.Add(new Paragraph(inf1, font));

但是可能没有人在智能手机的内存中包含这些字体:)

我尝试使用以下代码获取Assets文件夹的路径:

public static AssetManager Assets { get; private set; }

string ttf;
using (var asset = Assets.Open("arial.ttf"))
{
    var fontStream = new MemoryStream();
    asset.CopyTo(fontStream);
}

或其他选择:

string content;
using (StreamReader sr = new StreamReader(Assets.Open("arial.ttf")))
{
    content = sr.ReadToEnd();
}

,但在这些情况下存在问题: 你调用的对象是空的... 在线

using (var asset = Assets.Open("arial.ttf")) 

using (StreamReader sr = new StreamReader(Assets.Open("arial.ttf")))

也许文件夹路径有些类似,类似于Windows中Font的路径?

Environment.GetFolderPath(Environment.SpecialFolder.Fonts);

或者也许我可以以某种方式使用生成的TypeFace

Android.Graphics.Typeface tf = Android.Graphics.Typeface.CreateFromAsset(Application.Context.Assets, "arial.ttf"); 

请告诉我,如何在PDF文档中设置必要的字体,或者如何找到将插入到BaseFont行中的ttf字体的路径:)

2 个答案:

答案 0 :(得分:0)

根据我的理解,您的上述代码存在问题,当您说它给您带来object reference not set to an instance of an object.错误时,这意味着您没有为它分配一个值,而为它的null则需要做些简单的事情来克服它;

声明属性后

 public AssetManager AppAssets { get; private set; }

在您的类构造函数中为其分配一个值:

AppAssets= this.ApplicationContext.Assets; // In an activity
AppAssets= this.Activity.ApplicationContext.Assets; // In a fragment

执行此操作后,对象引用错误就会消失,

在查询的情况下恢复好运。

答案 1 :(得分:0)

我想问题是 BaseFont.CreateFont() 想要获取字体文件的路径而不是流。

我也面临这个问题。它适用于sdcard,但我不知道如何从资产文件夹中读取它。解决方法是将其复制到documents文件夹。