Как определить фактическое имя шрифта шрифта PDF типа 3 с помощью iText7? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь прочитать все шрифты, используемые в PDF, используя iText7. Для этого я создал IEventListener, который читает шрифты из TextRenderInfo как:

private class FontReader : IEventListener
{
    public ICollection<string> Fonts { get; }

    public FontReader()
    {
        Fonts = new List<string>();
    }

    public void EventOccurred(IEventData data, EventType type)
    {
        if (!(data is TextRenderInfo)) return;

        var font = ((TextRenderInfo) data).GetFont();
        var fontName = font.GetFontProgram().GetFontNames().GetFontName();
        if (!string.IsNullOrEmpty(fontName) && !Fonts.Contains(fontName))
        {
            Fonts.Add(fontName);
        }
    }

    public ICollection<EventType> GetSupportedEvents()
    {
        return new HashSet<EventType> {EventType.RENDER_TEXT};
    }
}

Это, кажется, работает нормально и позволяет мне читать все шрифты типа 1. Но вызов GetFontProgram().GetFontNames().GetFontName(); для шрифта Type 3 возвращает ноль.

При просмотре шрифтов в Acrobat Reader все же отображается имя для шрифтов Type 3 (см. Скриншот). Как я могу найти это имя через iText7 в C#?

Type 3 font name in Acrobat Reader

1 Ответ

0 голосов
/ 01 апреля 2020

Вы можете получить доступ к соответствующему объекту PDF и извлечь из него имя шрифта с помощью инструкции var fontName = font.GetPdfObject().GetAsName(PdfName.Name).

Пример полного кода:

private class FontReader : IEventListener
{
    public ICollection<string> Fonts { get; }

    public FontReader()
    {
        Fonts = new List<string>();
    }

    public void EventOccurred(IEventData data, EventType type)
    {
        if (!(data is TextRenderInfo)) return;

        var font = ((TextRenderInfo) data).GetFont();
        var fontName = font.GetPdfObject().GetAsName(PdfName.Name)
    }

    public ICollection<EventType> GetSupportedEvents()
    {
        return new HashSet<EventType> {EventType.RENDER_TEXT};
    }
}
...