【问题标题】:How to get the font path in the Assets folder如何获取 Assets 文件夹中的字体路径
【发布时间】:2023-03-26 11:01:01
【问题描述】:

我使用 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 中字体的路径?

Environment.GetFolderPath(Environment.SpecialFolder.Fonts);

或者我可以以某种方式使用生成的字体

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

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

【问题讨论】:

  • 试试“file:///android_asset/fileName”是否是正确的路径
  • @LeoZhu 没有找到这样的路径 :( 也类似

标签: fonts xamarin.android itext android-assets


【解决方案1】:

在我的理解中,当你说它给你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

一旦你这样做了,对象引用错误就会消失,

Goodluck 在查询时回复。

【讨论】:

  • 这似乎有所帮助。但我意识到 StreamReader 并不能真正帮助我,因为我需要获取文件的路径,而不是读取它:)
  • 您能解释一下您的最终目标,然后也许我可以更好地帮助您吗?
  • 这导致流的读取路径:iTextSharp.text.DocumentException: 。因此,我认为需要一种不同的方法。
  • 忽略异常你的最终目标是什么你想在这里实现什么
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2011-05-08
    • 2014-11-05
    相关资源
    最近更新 更多