当前位置: 首页 > 知识库问答 >
问题:

如何使用iText7确定Type 3 PDF字体的实际字体名称?

宿丰
2023-03-14

我正在尝试使用iText7阅读PDF中使用的所有字体。为此,我创建了一个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() 返回null。

不过,在Acrobat Reader中查看字体确实会显示类型3字体的名称(见截图)。我如何通过c#中的iText7找到这个名称?


共有1个答案

潘彦
2023-03-14

您可以访问相应的PDF对象,并使用var fontName=fontName. 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};
    }
}
 类似资料:
  • 我正在尝试将字体嵌入到我的pdf/a中。 我找到了很多答案,但使用的是iTextSharp 在我的cas中,我使用iText7,但我所尝试的都是错误的: “所有字体都必须嵌入……” 我有一个ttf文件为我的字体,但我没有找到一种方法嵌入到我的pdf使用它... 有人能帮我吗? 事先谢谢 kor6k

  • 问题内容: 我的CSS 为整个页面指定了“ ”。似乎在某些部分上使用了Verdana。我希望能够验证这一点。 我曾尝试从浏览器复制并粘贴到Word中,但它没有保留字体。 有什么方法可以确定文本部分实际使用哪种字体? Firebug将为我提供如上的字体列表[1],但我没有确定使用哪种字体的方法。 原来使用了错误的列表,这解决了我原来的Verdana问题。但是我仍然很好奇是否有一种方法可以识别实际的渲

  • 我正在使用IText7从html字符串生成pdf。现在,我需要对段落应用自定义颜色和自定义字体或字体系列。 如何使用Itext7实现这一点? 谢谢

  • 问题内容: 我有两个字体文件,例如:FONT-light和FONT-bold。两者都来自@ font- face工具包,因此每个版本都包含5个字体文件(OGV,TTF,WOFF,EOT)。 要从精简版本转到粗体版本,我必须使用然后。我想使用和代替,因为我需要它到CSS3过渡。我该如何实现? 问题答案: @font-face { font-family: ‘DroidSerif’; src: url

  • 我现在试图修改一个只有文本内容的PDF文件。当我使用 谢谢

  • 这可能是非常基本的,但我在这个问题上挣扎了很长时间,我不得不尝试。 假设我有一个字体“open sans”,字体重量为400 https://fonts.googleapis.com/css?family=Open Sans:400'rel='stylesheet'type='text/css' 我把css中的字体权重设置为700。 我知道浏览器会试图猜测该字体的粗体版本。 我的问题是:就网络排版