我使用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字体的路径:)
答案 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文件夹。