Почему в моей игре Unity android PdfFontFactory не может зарегистрировать шрифты локального языка, расположенные в постоянном пути данных приложения? - PullRequest
0 голосов
/ 02 марта 2020

Я использую Itext7 для создания PDF на моем местном языке. На standalone_ windows все работает нормально, но в android PdfFontFactory не может зарегистрировать эти шрифты.

В Standalone_ Windows Я извлекаю необработанные файлы из потоковых ресурсов , и они отлично работают.

В Android я загружаю шрифты из пути потоковых ресурсов в постоянный путь данных, используя UnityWebRequest

Это код для загрузки и записи шрифта байты от потоковых ресурсов до постоянного пути к данным:

 string fontpath1 = System.IO.Path.Combine(Application.streamingAssetsPath, "LEOPALMHINDI15K710.TTF");
    string fontpath2 = System.IO.Path.Combine(Application.streamingAssetsPath, "LEOPALMHINDI14K240.TTF");

    //Request Hindi Font 1

    UnityWebRequest request = UnityWebRequest.Get(fontpath1);
    request.SendWebRequest();
    while (!request.isDone)
    {


    }
    System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.persistentDataPath , "LEOPALMHINDI15K710.TTF"),request.downloadHandler.data); 
    request.Dispose();
    //Request Hindi Font 2

    UnityWebRequest font2 = UnityWebRequest.Get(fontpath2);
    font2.SendWebRequest();
    while (!font2.isDone)
    {


    }
    System.IO.File.WriteAllBytes(System.IO.Path.Combine(Application.persistentDataPath, "LEOPALMHINDI14K240.TTF"), font2.downloadHandler.data);
    font2.Dispose();

Этот код я использую для чтения файлов шрифтов с использованием строк filePath:

    string HFOnt = System.IO.Path.Combine(Application.persistentDataPath, "LEOPALMHINDI15K710.TTF");
    string HFOnt2 = System.IO.Path.Combine(Application.persistentDataPath, "LEOPALMHINDI14K240.TTF");
    PdfFontFactory.Register(HFOnt, "HindiFont1");
    PdfFont myHindiFont1 = PdfFontFactory.CreateRegisteredFont("HindiFont1", PdfEncodings.IDENTITY_H, true);

    PdfFontFactory.Register(HFOnt2, "HindiFont2");
    PdfFont myHindiFont2 = PdfFontFactory.CreateRegisteredFont("HindiFont2", PdfEncodings.IDENTITY_H, true);


    //Create Writer

    if (File.Exists(path))
    {

        File.Delete(path);

    }
    PdfWriter writer = new PdfWriter(path);




    //Create Pdf Document Object
    PdfDocument pdf = new PdfDocument(writer);

    //Create A Document
    Document document = new Document(pdf, PageSize.A4);
    document.SetMargins(90f, 36f, 120f, 36f);

    PdfPage page1 = pdf.AddNewPage();
    document.Add(new iText.Layout.Element.AreaBreak());

    //Get Page Size and Canvas
    PdfCanvas canvas = new PdfCanvas(page1);
    Rectangle pageSize = page1.GetPageSize();

    canvas.BeginText()
      .MoveText(pageSize.GetWidth() / 2-35, pageSize.GetHeight() - 400)
      .SetFontAndSize(myHindiFont1, 9f)
      .ShowText("lfdZy uacj dqvk uacj gS")
      .EndText();

     document.Close();

Я загружаю эти шрифты из потоковых ресурсов в постоянный путь данных с помощью UnityWebRequest.

Я проверил существование файла с помощью File.Exists в постоянном пути данных после удаления веб-запросов Unity, и он возвращает true в трассировках для обоих файлов шрифтов.

Это ошибка, которую я получаю на мониторе своего устройства:

03-02 13: 40: 57.084: E / Unity (18347) : NotSupportedException: Кодировка 1252 данных не найдена. Убедитесь, что у вас установлена ​​и включена правильная сборка международного кодового набора.

03-02 13: 40: 57.084: E / Unity (18347): в System.Text.Encoding.GetEncoding (кодовая страница System.Int32) [0x0023f ] в <7ba07f088431485bb722f3b3373e87ee>: 0

03-02 13: 40: 57.084: E / Unity (18347): в System.Text.Encoding.GetEncoding (имя System.String) [0x00012] в <7ba07bb887 : 0 </p>

03-02 13: 40: 57.084: E / Unity (18347): в iText.IO.Util.JavaUtil.GetStringForBytes (байты System.Byte [], смещение System.Int32, System.Int32 длина, кодировка System.String) [0x00000] в <57da1b8d8a184e278c732544ebe6412a>: 0

03-02 13: 40: 57.084: E / Unity (18347): в iText.IO.Util.JavaUtil.GetStringForBytes (система .Byte [] байт, кодировка System.String) [0x00000] в <57da1b8d8a184e278c732544ebe6412a>: 0

03-02 13: 40: 57.084: E / Unity (18347): в iText.IO.Source.RandomAccessFileO .ReadString (длина System.Int32, кодировка System.String) [0x0000e] в <57da1b8d8a184e278c7325 44ebe6412a>: 0

03-02 13: 40: 57.084: E / Unity (18347): в iText.IO.Font.OpenTypeParser.ReadStandardString (длина System.Int32) [0x00000] в <57da1b8d8a184e27e645a564a5645 0 </p>

03-02 13: 40: 57.084: E / Unity (18347): на iText.IO.Font.OpenTypeParser.Process () [0x00

Есть ли кто-нибудь, кто можете посмотреть в этом, помогите мне зарегистрировать шрифты?

1 Ответ

0 голосов
/ 02 марта 2020

Просто сохранил файл i18n.dll в моем проекте, и он работает. Спасибо всем предыдущим темам.

...