diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 3e3edb7..3aaad30 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -382,11 +382,11 @@
   if (m_Charset != CIDSET_UNKNOWN) {
     m_pCID2UnicodeMap = manager->GetCID2UnicodeMap(m_Charset);
   }
-  if (m_Font.GetFace()) {
+  if (m_Font.GetFaceRec()) {
     if (m_bType1)
-      FXFT_Select_Charmap(m_Font.GetFace(), FT_ENCODING_UNICODE);
+      FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE);
     else
-      FT_UseCIDCharmap(m_Font.GetFace(), m_pCMap->GetCoding());
+      FT_UseCIDCharmap(m_Font.GetFaceRec(), m_pCMap->GetCoding());
   }
   m_DefaultWidth = pCIDFontDict->GetIntegerFor("DW", 1000);
   const CPDF_Array* pWidthArray = pCIDFontDict->GetArrayFor("W");
@@ -426,7 +426,7 @@
   FX_RECT rect;
   bool bVert = false;
   int glyph_index = GlyphFromCharCode(charcode, &bVert);
-  FXFT_FaceRec* face = m_Font.GetFace();
+  FXFT_FaceRec* face = m_Font.GetFaceRec();
   if (face) {
     if (FXFT_Is_Face_Tricky(face)) {
       int err =
@@ -554,7 +554,7 @@
   if (pVertGlyph)
     *pVertGlyph = false;
 
-  FXFT_FaceRec* face = m_Font.GetFace();
+  FXFT_FaceRec* face = m_Font.GetFaceRec();
   int index = FT_Get_Char_Index(face, unicode);
   if (unicode == 0x2502)
     return index;
@@ -623,7 +623,7 @@
           unicode = unicode_str[0];
       }
     }
-    FXFT_FaceRec* face = m_Font.GetFace();
+    FXFT_FaceRec* face = m_Font.GetFaceRec();
     if (unicode == 0) {
       if (!m_bAdobeCourierStd)
         return charcode ? static_cast<int>(charcode) : -1;
@@ -699,7 +699,7 @@
     return unicode;
   }
 
-  if (!m_Font.GetFace())
+  if (!m_Font.GetFaceRec())
     return -1;
 
   uint16_t cid = CIDFromCharCode(charcode);
@@ -709,10 +709,10 @@
     if (m_pFontFile && m_pCMap->IsDirectCharcodeToCIDTableIsEmpty())
       return cid;
     if (m_pCMap->GetCoding() == CIDCODING_UNKNOWN ||
-        !FXFT_Get_Face_Charmap(m_Font.GetFace())) {
+        !FXFT_Get_Face_Charmap(m_Font.GetFaceRec())) {
       return cid;
     }
-    if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFace())) ==
+    if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFaceRec())) ==
         FT_ENCODING_UNICODE) {
       WideString unicode_str = UnicodeFromCharCode(charcode);
       if (unicode_str.IsEmpty())
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 7c1b15a..f45de85 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -222,7 +222,7 @@
 void CPDF_Font::CheckFontMetrics() {
   if (m_FontBBox.top == 0 && m_FontBBox.bottom == 0 && m_FontBBox.left == 0 &&
       m_FontBBox.right == 0) {
-    FXFT_FaceRec* face = m_Font.GetFace();
+    FXFT_FaceRec* face = m_Font.GetFaceRec();
     if (face) {
       m_FontBBox.left = TT2PDF(FXFT_Get_Face_xMin(face), face);
       m_FontBBox.bottom = TT2PDF(FXFT_Get_Face_yMin(face), face);
@@ -389,7 +389,7 @@
   WideString str = UnicodeFromCharCode(charcode);
   uint32_t unicode = !str.IsEmpty() ? str[0] : charcode;
   int glyph =
-      FT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), unicode);
+      FT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFaceRec(), unicode);
   if (glyph == 0)
     return -1;
 
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index ab599d3..8639a19 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -68,7 +68,7 @@
   CPDF_Dictionary* GetFontDict() const { return m_pFontDict.Get(); }
   void ClearFontDict() { m_pFontDict = nullptr; }
   bool IsStandardFont() const;
-  bool HasFace() const { return !!m_Font.GetFace(); }
+  bool HasFace() const { return !!m_Font.GetFaceRec(); }
   void AppendChar(ByteString* str, uint32_t charcode) const;
 
   const FX_RECT& GetFontBBox() const { return m_FontBBox; }
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index bf8a25e..06672f2 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -54,7 +54,7 @@
 }
 
 void CPDF_SimpleFont::LoadCharMetrics(int charcode) {
-  if (!m_Font.GetFace())
+  if (!m_Font.GetFaceRec())
     return;
 
   if (charcode < 0 || charcode > 0xff) {
@@ -71,7 +71,7 @@
     }
     return;
   }
-  FXFT_FaceRec* face = m_Font.GetFace();
+  FXFT_FaceRec* face = m_Font.GetFaceRec();
   int err =
       FT_Load_Glyph(face, glyph_index,
                     FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH);
@@ -222,7 +222,7 @@
   LoadPDFEncoding(!!m_pFontFile, m_Font.IsTTFont());
   LoadGlyphMap();
   m_CharNames.clear();
-  if (!m_Font.GetFace())
+  if (!m_Font.GetFaceRec())
     return true;
 
   if (FontStyleIsAllCaps(m_Flags)) {
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index a499917..d0aac08 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -38,19 +38,19 @@
 }
 
 void CPDF_TrueTypeFont::LoadGlyphMap() {
-  if (!m_Font.GetFace())
+  if (!m_Font.GetFaceRec())
     return;
 
   int baseEncoding = m_BaseEncoding;
-  if (m_pFontFile && m_Font.GetFace()->num_charmaps > 0 &&
+  if (m_pFontFile && m_Font.GetFaceRec()->num_charmaps > 0 &&
       (baseEncoding == PDFFONT_ENCODING_MACROMAN ||
        baseEncoding == PDFFONT_ENCODING_WINANSI) &&
       FontStyleIsSymbolic(m_Flags)) {
     bool bSupportWin = false;
     bool bSupportMac = false;
-    for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.GetFace()); i++) {
+    for (int i = 0; i < FXFT_Get_Face_CharmapCount(m_Font.GetFaceRec()); i++) {
       int platform_id = FXFT_Get_Charmap_PlatformID(
-          FXFT_Get_Face_Charmaps(m_Font.GetFace())[i]);
+          FXFT_Get_Face_Charmaps(m_Font.GetFaceRec())[i]);
       if (platform_id == 0 || platform_id == 3) {
         bSupportWin = true;
       } else if (platform_id == 0 || platform_id == 1) {
@@ -69,8 +69,9 @@
         baseEncoding == PDFFONT_ENCODING_WINANSI) &&
        m_CharNames.empty()) ||
       FontStyleIsNonSymbolic(m_Flags)) {
-    if (!FXFT_Has_Glyph_Names(m_Font.GetFace()) &&
-        (!m_Font.GetFace()->num_charmaps || !m_Font.GetFace()->charmaps)) {
+    if (!FXFT_Has_Glyph_Names(m_Font.GetFaceRec()) &&
+        (!m_Font.GetFaceRec()->num_charmaps ||
+         !m_Font.GetFaceRec()->charmaps)) {
       int nStartChar = m_pFontDict->GetIntegerFor("FirstChar");
       if (nStartChar < 0 || nStartChar > 255)
         return;
@@ -83,16 +84,16 @@
         m_GlyphIndex[charcode] = nGlyph;
       return;
     }
-    bool bMSUnicode = FT_UseTTCharmap(m_Font.GetFace(), 3, 1);
+    bool bMSUnicode = FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 1);
     bool bMacRoman = false;
     bool bMSSymbol = false;
     if (!bMSUnicode) {
       if (FontStyleIsNonSymbolic(m_Flags)) {
-        bMacRoman = FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
-        bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
+        bMacRoman = FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0);
+        bMSSymbol = !bMacRoman && FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0);
       } else {
-        bMSSymbol = FT_UseTTCharmap(m_Font.GetFace(), 3, 0);
-        bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFace(), 1, 0);
+        bMSSymbol = FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0);
+        bMacRoman = !bMSSymbol && FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0);
       }
     }
     bool bToUnicode = m_pFontDict->KeyExist("ToUnicode");
@@ -100,31 +101,32 @@
       const char* name = GetAdobeCharName(baseEncoding, m_CharNames, charcode);
       if (!name) {
         m_GlyphIndex[charcode] =
-            m_pFontFile ? FT_Get_Char_Index(m_Font.GetFace(), charcode) : -1;
+            m_pFontFile ? FT_Get_Char_Index(m_Font.GetFaceRec(), charcode) : -1;
         continue;
       }
       m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
       if (bMSSymbol) {
         for (size_t j = 0; j < FX_ArraySize(kPrefix); j++) {
           uint16_t unicode = kPrefix[j] * 256 + charcode;
-          m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), unicode);
+          m_GlyphIndex[charcode] =
+              FT_Get_Char_Index(m_Font.GetFaceRec(), unicode);
           if (m_GlyphIndex[charcode])
             break;
         }
       } else if (m_Encoding.UnicodeFromCharCode(charcode)) {
         if (bMSUnicode) {
           m_GlyphIndex[charcode] = FT_Get_Char_Index(
-              m_Font.GetFace(), m_Encoding.UnicodeFromCharCode(charcode));
+              m_Font.GetFaceRec(), m_Encoding.UnicodeFromCharCode(charcode));
         } else if (bMacRoman) {
           uint32_t maccode =
               FT_CharCodeFromUnicode(FT_ENCODING_APPLE_ROMAN,
                                      m_Encoding.UnicodeFromCharCode(charcode));
           if (!maccode) {
             m_GlyphIndex[charcode] =
-                FXFT_Get_Name_Index(m_Font.GetFace(), name);
+                FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
           } else {
             m_GlyphIndex[charcode] =
-                FT_Get_Char_Index(m_Font.GetFace(), maccode);
+                FT_Get_Char_Index(m_Font.GetFaceRec(), maccode);
           }
         }
       }
@@ -133,28 +135,29 @@
         continue;
       }
       if (strcmp(name, ".notdef") == 0) {
-        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), 32);
+        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFaceRec(), 32);
         continue;
       }
-      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), name);
+      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
       if (m_GlyphIndex[charcode] != 0 || !bToUnicode)
         continue;
 
       WideString wsUnicode = UnicodeFromCharCode(charcode);
       if (!wsUnicode.IsEmpty()) {
         m_GlyphIndex[charcode] =
-            FT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
+            FT_Get_Char_Index(m_Font.GetFaceRec(), wsUnicode[0]);
         m_Encoding.SetUnicode(charcode, wsUnicode[0]);
       }
     }
     return;
   }
-  if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
+  if (FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0)) {
     bool bFound = false;
     for (int charcode = 0; charcode < 256; charcode++) {
       for (size_t j = 0; j < FX_ArraySize(kPrefix); j++) {
         uint16_t unicode = kPrefix[j] * 256 + charcode;
-        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), unicode);
+        m_GlyphIndex[charcode] =
+            FT_Get_Char_Index(m_Font.GetFaceRec(), unicode);
         if (m_GlyphIndex[charcode]) {
           bFound = true;
           break;
@@ -169,7 +172,7 @@
           if (name)
             m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
         }
-      } else if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
+      } else if (FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0)) {
         for (int charcode = 0; charcode < 256; charcode++) {
           m_Encoding.SetUnicode(
               charcode,
@@ -179,10 +182,10 @@
       return;
     }
   }
-  if (FT_UseTTCharmap(m_Font.GetFace(), 1, 0)) {
+  if (FT_UseTTCharmap(m_Font.GetFaceRec(), 1, 0)) {
     bool bFound = false;
     for (int charcode = 0; charcode < 256; charcode++) {
-      m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), charcode);
+      m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFaceRec(), charcode);
       m_Encoding.SetUnicode(
           charcode, FT_UnicodeFromCharCode(FT_ENCODING_APPLE_ROMAN, charcode));
       if (m_GlyphIndex[charcode]) {
@@ -192,7 +195,7 @@
     if (m_pFontFile || bFound)
       return;
   }
-  if (FXFT_Select_Charmap(m_Font.GetFace(), FT_ENCODING_UNICODE) == 0) {
+  if (FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE) == 0) {
     bool bFound = false;
     const uint16_t* pUnicodes = PDF_UnicodesForPredefinedCharSet(baseEncoding);
     for (uint32_t charcode = 0; charcode < 256; charcode++) {
@@ -206,7 +209,7 @@
           m_Encoding.SetUnicode(charcode, pUnicodes[charcode]);
       }
       m_GlyphIndex[charcode] = FT_Get_Char_Index(
-          m_Font.GetFace(), m_Encoding.UnicodeFromCharCode(charcode));
+          m_Font.GetFaceRec(), m_Encoding.UnicodeFromCharCode(charcode));
       if (m_GlyphIndex[charcode])
         bFound = true;
     }
diff --git a/core/fpdfapi/font/cpdf_type1font.cpp b/core/fpdfapi/font/cpdf_type1font.cpp
index a519fba..9df9606 100644
--- a/core/fpdfapi/font/cpdf_type1font.cpp
+++ b/core/fpdfapi/font/cpdf_type1font.cpp
@@ -120,7 +120,7 @@
 #endif
 
 void CPDF_Type1Font::LoadGlyphMap() {
-  if (!m_Font.GetFace())
+  if (!m_Font.GetFaceRec())
     return;
 
 #if defined(OS_MACOSX)
@@ -139,13 +139,14 @@
   }
 #endif
   if (!IsEmbedded() && (m_Base14Font < 12) && m_Font.IsTTFont()) {
-    if (FT_UseTTCharmap(m_Font.GetFace(), 3, 0)) {
+    if (FT_UseTTCharmap(m_Font.GetFaceRec(), 3, 0)) {
       bool bGotOne = false;
       for (uint32_t charcode = 0; charcode < 256; charcode++) {
         const uint8_t prefix[4] = {0x00, 0xf0, 0xf1, 0xf2};
         for (int j = 0; j < 4; j++) {
           uint16_t unicode = prefix[j] * 256 + charcode;
-          m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), unicode);
+          m_GlyphIndex[charcode] =
+              FT_Get_Char_Index(m_Font.GetFaceRec(), unicode);
 #if defined(OS_MACOSX)
           CalcExtGID(charcode);
 #endif
@@ -163,7 +164,7 @@
         return;
       }
     }
-    FXFT_Select_Charmap(m_Font.GetFace(), FT_ENCODING_UNICODE);
+    FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE);
     if (m_BaseEncoding == 0)
       m_BaseEncoding = PDFFONT_ENCODING_STANDARD;
 
@@ -175,13 +176,13 @@
 
       m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
       m_GlyphIndex[charcode] = FT_Get_Char_Index(
-          m_Font.GetFace(), m_Encoding.UnicodeFromCharCode(charcode));
+          m_Font.GetFaceRec(), m_Encoding.UnicodeFromCharCode(charcode));
 #if defined(OS_MACOSX)
       CalcExtGID(charcode);
 #endif
       if (m_GlyphIndex[charcode] == 0 && strcmp(name, ".notdef") == 0) {
         m_Encoding.SetUnicode(charcode, 0x20);
-        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), 0x20);
+        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFaceRec(), 0x20);
 #if defined(OS_MACOSX)
         CalcExtGID(charcode);
 #endif
@@ -193,7 +194,7 @@
 #endif
     return;
   }
-  FT_UseType1Charmap(m_Font.GetFace());
+  FT_UseType1Charmap(m_Font.GetFaceRec());
 #if defined(OS_MACOSX)
   if (bCoreText) {
     if (FontStyleIsSymbolic(m_Flags)) {
@@ -202,11 +203,12 @@
             GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode);
         if (name) {
           m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
-          m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), name);
+          m_GlyphIndex[charcode] =
+              FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
           SetExtGID(name, charcode);
         } else {
           m_GlyphIndex[charcode] =
-              FT_Get_Char_Index(m_Font.GetFace(), charcode);
+              FT_Get_Char_Index(m_Font.GetFaceRec(), charcode);
           wchar_t unicode = 0;
           if (m_GlyphIndex[charcode]) {
             unicode =
@@ -214,7 +216,7 @@
           }
           char name_glyph[256];
           memset(name_glyph, 0, sizeof(name_glyph));
-          FT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+          FT_Get_Glyph_Name(m_Font.GetFaceRec(), m_GlyphIndex[charcode],
                             name_glyph, 256);
           name_glyph[255] = 0;
           if (unicode == 0 && name_glyph[0] != 0)
@@ -228,7 +230,7 @@
     }
 
     bool bUnicode =
-        FXFT_Select_Charmap(m_Font.GetFace(), FT_ENCODING_UNICODE) == 0;
+        FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE) == 0;
     for (uint32_t charcode = 0; charcode < 256; charcode++) {
       const char* name =
           GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode);
@@ -237,23 +239,23 @@
 
       m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
       const char* pStrUnicode = GlyphNameRemap(name);
-      if (pStrUnicode && FXFT_Get_Name_Index(m_Font.GetFace(), name) == 0) {
+      if (pStrUnicode && FXFT_Get_Name_Index(m_Font.GetFaceRec(), name) == 0) {
         name = pStrUnicode;
       }
-      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), name);
+      m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
       SetExtGID(name, charcode);
       if (m_GlyphIndex[charcode] != 0)
         continue;
 
       if (strcmp(name, ".notdef") != 0 && strcmp(name, "space") != 0) {
         m_GlyphIndex[charcode] = FT_Get_Char_Index(
-            m_Font.GetFace(),
+            m_Font.GetFaceRec(),
             bUnicode ? m_Encoding.UnicodeFromCharCode(charcode) : charcode);
         CalcExtGID(charcode);
       } else {
         m_Encoding.SetUnicode(charcode, 0x20);
         m_GlyphIndex[charcode] =
-            bUnicode ? FT_Get_Char_Index(m_Font.GetFace(), 0x20) : 0xffff;
+            bUnicode ? FT_Get_Char_Index(m_Font.GetFaceRec(), 0x20) : 0xffff;
         CalcExtGID(charcode);
       }
     }
@@ -266,16 +268,17 @@
           GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode);
       if (name) {
         m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
-        m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), name);
+        m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
       } else {
-        m_GlyphIndex[charcode] = FT_Get_Char_Index(m_Font.GetFace(), charcode);
+        m_GlyphIndex[charcode] =
+            FT_Get_Char_Index(m_Font.GetFaceRec(), charcode);
         if (m_GlyphIndex[charcode]) {
           wchar_t unicode =
               FT_UnicodeFromCharCode(PDFFONT_ENCODING_STANDARD, charcode);
           if (unicode == 0) {
             char name_glyph[256];
             memset(name_glyph, 0, sizeof(name_glyph));
-            FT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode],
+            FT_Get_Glyph_Name(m_Font.GetFaceRec(), m_GlyphIndex[charcode],
                               name_glyph, 256);
             name_glyph[255] = 0;
             if (name_glyph[0] != 0)
@@ -294,20 +297,20 @@
   }
 
   bool bUnicode =
-      FXFT_Select_Charmap(m_Font.GetFace(), FT_ENCODING_UNICODE) == 0;
+      FXFT_Select_Charmap(m_Font.GetFaceRec(), FT_ENCODING_UNICODE) == 0;
   for (int charcode = 0; charcode < 256; charcode++) {
     const char* name = GetAdobeCharName(m_BaseEncoding, m_CharNames, charcode);
     if (!name)
       continue;
 
     m_Encoding.SetUnicode(charcode, PDF_UnicodeFromAdobeName(name));
-    m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFace(), name);
+    m_GlyphIndex[charcode] = FXFT_Get_Name_Index(m_Font.GetFaceRec(), name);
     if (m_GlyphIndex[charcode] != 0)
       continue;
 
     if (strcmp(name, ".notdef") != 0 && strcmp(name, "space") != 0) {
       m_GlyphIndex[charcode] = FT_Get_Char_Index(
-          m_Font.GetFace(),
+          m_Font.GetFaceRec(),
           bUnicode ? m_Encoding.UnicodeFromCharCode(charcode) : charcode);
     } else {
       m_Encoding.SetUnicode(charcode, 0x20);
@@ -332,7 +335,8 @@
 
 void CPDF_Type1Font::CalcExtGID(uint32_t charcode) {
   char name_glyph[256];
-  FT_Get_Glyph_Name(m_Font.GetFace(), m_GlyphIndex[charcode], name_glyph, 256);
+  FT_Get_Glyph_Name(m_Font.GetFaceRec(), m_GlyphIndex[charcode], name_glyph,
+                    256);
   name_glyph[255] = 0;
   SetExtGID(name_glyph, charcode);
 }
diff --git a/core/fxge/cfx_font.h b/core/fxge/cfx_font.h
index 39e68a7..8b3fdaf 100644
--- a/core/fxge/cfx_font.h
+++ b/core/fxge/cfx_font.h
@@ -49,7 +49,7 @@
                  bool bVertical);
 
   bool LoadEmbedded(pdfium::span<const uint8_t> src_span);
-  FXFT_FaceRec* GetFace() const { return m_Face.Get(); }
+  FXFT_FaceRec* GetFaceRec() const { return m_Face.Get(); }
   CFX_SubstFont* GetSubstFont() const { return m_pSubstFont.get(); }
 
 #ifdef PDF_ENABLE_XFA
diff --git a/core/fxge/cfx_fontcache.cpp b/core/fxge/cfx_fontcache.cpp
index 7610f47..571517d 100644
--- a/core/fxge/cfx_fontcache.cpp
+++ b/core/fxge/cfx_fontcache.cpp
@@ -20,7 +20,7 @@
 CFX_FontCache::~CFX_FontCache() = default;
 
 RetainPtr<CFX_GlyphCache> CFX_FontCache::GetGlyphCache(const CFX_Font* pFont) {
-  FXFT_FaceRec* face = pFont->GetFace();
+  FXFT_FaceRec* face = pFont->GetFaceRec();
   const bool bExternal = !face;
   auto& map = bExternal ? m_ExtGlyphCacheMap : m_GlyphCacheMap;
   auto it = map.find(face);
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 171924d..2769f24 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -890,7 +890,7 @@
   if (fabs(char2device.a) + fabs(char2device.b) > 50 * 1.0f ||
       ((m_DeviceClass == FXDC_PRINTER) &&
        !(text_flags & FXTEXT_PRINTIMAGETEXT))) {
-    if (pFont->GetFace()) {
+    if (pFont->GetFaceRec()) {
       int nPathFlags =
           (text_flags & FXTEXT_NOSMOOTH) == 0 ? 0 : FXFILL_NOPATHSMOOTH;
       return DrawTextPath(nChars, pCharPos, pFont, font_size, mtText2Device,
@@ -917,7 +917,7 @@
         anti_alias = FT_RENDER_MODE_LCD;
 
         bool bClearType = false;
-        if (pFont->GetFace())
+        if (pFont->GetFaceRec())
           bClearType = !!(text_flags & FXTEXT_CLEARTYPE);
         bNormal = !bClearType;
       }
diff --git a/core/fxge/cfx_unicodeencoding.cpp b/core/fxge/cfx_unicodeencoding.cpp
index 79c0620..6673fca 100644
--- a/core/fxge/cfx_unicodeencoding.cpp
+++ b/core/fxge/cfx_unicodeencoding.cpp
@@ -17,7 +17,7 @@
 CFX_UnicodeEncoding::~CFX_UnicodeEncoding() {}
 
 uint32_t CFX_UnicodeEncoding::GlyphFromCharCode(uint32_t charcode) {
-  FXFT_FaceRec* face = m_pFont->GetFace();
+  FXFT_FaceRec* face = m_pFont->GetFaceRec();
   if (!face)
     return charcode;
 
diff --git a/core/fxge/cfx_unicodeencodingex.cpp b/core/fxge/cfx_unicodeencodingex.cpp
index 5daeef8..2afbf8f 100644
--- a/core/fxge/cfx_unicodeencodingex.cpp
+++ b/core/fxge/cfx_unicodeencodingex.cpp
@@ -28,7 +28,7 @@
 std::unique_ptr<CFX_UnicodeEncodingEx> FXFM_CreateFontEncoding(
     CFX_Font* pFont,
     uint32_t nEncodingID) {
-  if (FXFT_Select_Charmap(pFont->GetFace(), nEncodingID))
+  if (FXFT_Select_Charmap(pFont->GetFaceRec(), nEncodingID))
     return nullptr;
   return pdfium::MakeUnique<CFX_UnicodeEncodingEx>(pFont, nEncodingID);
 }
@@ -42,7 +42,7 @@
 CFX_UnicodeEncodingEx::~CFX_UnicodeEncodingEx() {}
 
 uint32_t CFX_UnicodeEncodingEx::GlyphFromCharCode(uint32_t charcode) {
-  FXFT_FaceRec* face = m_pFont->GetFace();
+  FXFT_FaceRec* face = m_pFont->GetFaceRec();
   FT_UInt nIndex = FT_Get_Char_Index(face, charcode);
   if (nIndex > 0)
     return nIndex;
@@ -71,7 +71,7 @@
       m_nEncodingID == FXFM_ENCODING_MS_SYMBOL) {
     return Unicode;
   }
-  FXFT_FaceRec* face = m_pFont->GetFace();
+  FXFT_FaceRec* face = m_pFont->GetFaceRec();
   int nmaps = FXFT_Get_Face_CharmapCount(face);
   for (int i = 0; i < nmaps; i++) {
     int nEncodingID =
@@ -86,7 +86,7 @@
 
 std::unique_ptr<CFX_UnicodeEncodingEx> FX_CreateFontEncodingEx(
     CFX_Font* pFont) {
-  if (!pFont || !pFont->GetFace())
+  if (!pFont || !pFont->GetFaceRec())
     return nullptr;
 
   for (uint32_t id : g_EncodingID) {
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 68ce0d8..75fb55e 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -852,7 +852,7 @@
     if (Accumulator::kText != m_type) {
       m_positions.setCount(0);
       m_glyphs.setCount(0);
-      m_pTypeFace = pFont->GetFace() ? pFont->GetDeviceCache() : nullptr;
+      m_pTypeFace = pFont->GetFaceRec() ? pFont->GetDeviceCache() : nullptr;
       m_fontSize = font_size;
       m_scaleX = scaleX;
       m_fillColor = color;
@@ -1109,7 +1109,7 @@
                    float scaleX,
                    uint32_t color) const {
     CFX_TypeFace* typeface =
-        pFont->GetFace() ? pFont->GetDeviceCache() : nullptr;
+        pFont->GetFaceRec() ? pFont->GetDeviceCache() : nullptr;
     return typeface != m_pTypeFace || MatrixChanged(&matrix) ||
            font_size != m_fontSize || scaleX != m_scaleX ||
            color != m_fillColor;
diff --git a/fpdfsdk/fpdf_edittext.cpp b/fpdfsdk/fpdf_edittext.cpp
index af1a830..ce4c414 100644
--- a/fpdfsdk/fpdf_edittext.cpp
+++ b/fpdfsdk/fpdf_edittext.cpp
@@ -67,13 +67,13 @@
   pFontDesc->SetNewFor<CPDF_Name>("Type", "FontDescriptor");
   pFontDesc->SetNewFor<CPDF_Name>("FontName", font_name);
   int flags = 0;
-  if (FXFT_Is_Face_fixedwidth(pFont->GetFace()))
+  if (FXFT_Is_Face_fixedwidth(pFont->GetFaceRec()))
     flags |= FXFONT_FIXED_PITCH;
   if (font_name.Contains("Serif"))
     flags |= FXFONT_SERIF;
-  if (FXFT_Is_Face_Italic(pFont->GetFace()))
+  if (FXFT_Is_Face_Italic(pFont->GetFaceRec()))
     flags |= FXFONT_ITALIC;
-  if (FXFT_Is_Face_Bold(pFont->GetFace()))
+  if (FXFT_Is_Face_Bold(pFont->GetFaceRec()))
     flags |= FXFONT_BOLD;
 
   // TODO(npm): How do I know if a  font is symbolic, script, allcap, smallcap
@@ -275,7 +275,8 @@
   pFontDict->SetNewFor<CPDF_Name>("BaseFont", name);
 
   uint32_t dwGlyphIndex;
-  uint32_t dwCurrentChar = FT_Get_First_Char(pFont->GetFace(), &dwGlyphIndex);
+  uint32_t dwCurrentChar =
+      FT_Get_First_Char(pFont->GetFaceRec(), &dwGlyphIndex);
   static constexpr uint32_t kMaxSimpleFontChar = 0xFF;
   if (dwCurrentChar > kMaxSimpleFontChar || dwGlyphIndex == 0)
     return nullptr;
@@ -288,7 +289,7 @@
                  static_cast<uint32_t>(std::numeric_limits<int>::max()));
     widthsArray->AddNew<CPDF_Number>(static_cast<int>(width));
     uint32_t nextChar =
-        FT_Get_Next_Char(pFont->GetFace(), dwCurrentChar, &dwGlyphIndex);
+        FT_Get_Next_Char(pFont->GetFaceRec(), dwCurrentChar, &dwGlyphIndex);
     // Simple fonts have 1-byte charcodes only.
     if (nextChar > kMaxSimpleFontChar || dwGlyphIndex == 0)
       break;
@@ -346,7 +347,8 @@
                                       pFontDesc->GetObjNum());
 
   uint32_t dwGlyphIndex;
-  uint32_t dwCurrentChar = FT_Get_First_Char(pFont->GetFace(), &dwGlyphIndex);
+  uint32_t dwCurrentChar =
+      FT_Get_First_Char(pFont->GetFaceRec(), &dwGlyphIndex);
   static constexpr uint32_t kMaxUnicode = 0x10FFFF;
   // If it doesn't have a single char, just fail
   if (dwGlyphIndex == 0 || dwCurrentChar > kMaxUnicode)
@@ -362,7 +364,7 @@
       widths[dwGlyphIndex] = pFont->GetGlyphWidth(dwGlyphIndex);
     to_unicode[dwGlyphIndex] = dwCurrentChar;
     dwCurrentChar =
-        FT_Get_Next_Char(pFont->GetFace(), dwCurrentChar, &dwGlyphIndex);
+        FT_Get_Next_Char(pFont->GetFaceRec(), dwCurrentChar, &dwGlyphIndex);
     if (dwGlyphIndex == 0)
       break;
   }
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index eb21c93..4ae263a 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -79,7 +79,7 @@
 
         CFX_Font* font;
 #if !defined(OS_WIN)
-        FxFont.SetFace(pFxFont->GetFace());
+        FxFont.SetFace(pFxFont->GetFaceRec());
         font = &FxFont;
 #else
         font = pFxFont;
@@ -101,7 +101,7 @@
     pFxFont = pCurFont->GetDevFont();
     CFX_Font* font;
 #if !defined(OS_WIN)
-    FxFont.SetFace(pFxFont->GetFace());
+    FxFont.SetFace(pFxFont->GetFaceRec());
     font = &FxFont;
 #else
     font = pFxFont;
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 47a709e..51f46a4 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -31,7 +31,7 @@
 namespace {
 
 bool VerifyUnicode(const RetainPtr<CFGAS_GEFont>& pFont, wchar_t wcUnicode) {
-  FXFT_FaceRec* pFace = pFont->GetDevFont()->GetFace();
+  FXFT_FaceRec* pFace = pFont->GetDevFont()->GetFaceRec();
   FT_CharMap charmap = FXFT_Get_Face_Charmap(pFace);
   if (FXFT_Select_Charmap(pFace, FT_ENCODING_UNICODE) != 0)
     return false;
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index 62ceb6c..6f35126 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -80,7 +80,7 @@
 
   m_pFont->LoadSubst(csFontFamily, true, dwFontStyles, iWeight, 0, wCodePage,
                      false);
-  return m_pFont->GetFace() && InitFont();
+  return m_pFont->GetFaceRec() && InitFont();
 }
 #endif  // defined(OS_WIN)
 
