如何使用 iText7 确定 Type 3 PDF 字体的实际字体名称?
How can I determine the actual font name of a Type 3 PDF Font using iText7?
我正在尝试使用 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};
}
}
这似乎工作正常并且允许我阅读所有 Type 1 字体。但是在 Type 3 字体上调用 GetFontProgram().GetFontNames().GetFontName();
returns null.
在 Acrobat 中查看字体 Reader 确实显示了 Type 3 字体的名称(参见屏幕截图)。如何在 C# 中通过 iText7 找到此名称?
您可以访问相应的 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};
}
}
我正在尝试使用 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};
}
}
这似乎工作正常并且允许我阅读所有 Type 1 字体。但是在 Type 3 字体上调用 GetFontProgram().GetFontNames().GetFontName();
returns null.
在 Acrobat 中查看字体 Reader 确实显示了 Type 3 字体的名称(参见屏幕截图)。如何在 C# 中通过 iText7 找到此名称?
您可以访问相应的 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};
}
}