Contains the information about a PDF font.
[SerializableAttribute()]
public struct PDFFont
The PDFFont structure is used as the type for the PDFDocument.Fonts collection.
You can read the fonts of a PDF page using the PDFDocument.ParseDocumentStructure method with the PDFParseDocumentStructureOptions.Fonts as part of the options parameter. When this method returns, The PDFDocument.Fonts collection will be populated with the PDFFont objects found in the document.
The font height and width is not stored in the PDFFont structure, instead it is stored in the PDFObject.TextProperties property of the text or hyperlink object.
PDFFont matches the font properties from PDF specification and contains the following members:
Member | Description |
---|---|
FaceName | Name of the font found in the file such as "Arial", "Times New Roman" or "ArialBoldEmbeddedSubset" or any value the creator of the PDF chose when creating the document. |
FontType | Type of font. Typically "Type0", "Type1", "TrueType" or any other font types defined by the PDFFont.Type constants. |
Encoding | Character set encoding used by this font. This could be "StandardEncoding", "WinAnsiEncoding", or any other encodings defined by the PDFFont.Encoding constants. |
DescendantCID | Descendant CIDFont name if this is a Type 0 font. |
EmbeddingType | Font embedding type, such as None , Embedded or EmbeddedSubset . |
Refer to the example below for sample source code on how to parse these values.
This example parses the fonts from a PDF document and shows their information.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Controls;
using Leadtools.Pdf;
using Leadtools.Svg;
using Leadtools.WinForms;
private static void DocumentFontsExample()
{
// Make a copy of 'leadtools.pdf' installed with LEADTOOLS
string pdfFile = @"C:\LEADTOOLS22\Resources\Images\leadtools.pdf";
using (var document = new PDFDocument(pdfFile))
{
document.ParseDocumentStructure(PDFParseDocumentStructureOptions.Fonts);
Console.WriteLine("Fonts found in the document:");
if (document.Fonts != null && document.Fonts.Count > 0)
{
foreach (PDFFont font in document.Fonts)
{
string faceName = GetPDFFontFaceName(font);
string type = GetPDFFontTypeName(font);
string encoding = GetPDFFontEncodingName(font);
Console.WriteLine($" Face name:{faceName}\n type:{type} encoding:{encoding}");
}
}
}
}
private static string GetPDFFontFaceName(PDFFont font)
{
if (string.IsNullOrEmpty(font.FaceName))
return string.Empty;
string faceName = font.FaceName;
// Strip out everything between + and -
char[] separator = { '+', '-' };
int index = faceName.IndexOfAny(separator);
if (index != -1)
{
faceName = faceName.Substring(index + 1);
index = faceName.IndexOfAny(separator);
if (index != -1)
faceName = faceName.Substring(0, index);
}
switch (font.EmbeddingType)
{
case PDFFontEmbeddingType.Embedded:
faceName += " (Embedded)";
break;
case PDFFontEmbeddingType.EmbeddedSubset:
faceName += " (Embedded Subset)";
break;
case PDFFontEmbeddingType.None:
default:
break;
}
return faceName;
}
private static string GetPDFFontTypeName(PDFFont font)
{
if (string.IsNullOrEmpty(font.FontType))
return string.Empty;
if (string.Compare(PDFFont.TypeType0, font.FontType, true) == 0)
{
if (string.Compare(PDFFont.TypeCIDFontType2, font.DescendantCID, true) == 0)
return "TrueType (CID)";
else
return "Type 2 (CID)";
}
if (string.Compare(PDFFont.TypeType1, font.FontType, true) == 0)
return "Type 1";
if (string.Compare(PDFFont.TypeType3, font.FontType, true) == 0)
return "Type 3";
return font.FontType;
}
private static string GetPDFFontEncodingName(PDFFont font)
{
if (string.IsNullOrEmpty(font.Encoding))
return "Custom";
if (string.Compare(PDFFont.EncodingWinAnsiEncoding, font.Encoding, true) == 0)
return "Ansi";
if (string.Compare(PDFFont.EncodingStandardEncoding, font.Encoding, true) == 0)
return "Standard";
if (string.Compare(PDFFont.EncodingPDFDocEncoding, font.Encoding, true) == 0)
return "PDF";
if (string.Compare(PDFFont.EncodingMacExpertEncoding, font.Encoding, true) == 0)
return "MAC Expert";
if (string.Compare(PDFFont.EncodingMacRomanEncoding, font.Encoding, true) == 0)
return "MAC Roman";
return font.Encoding;
}