diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp
index ce21eb9..a326fe2 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -409,36 +409,10 @@
 std::unique_ptr<CFPF_SkiaPathFont> CFPF_SkiaFontMgr::ReportFace(
     RetainPtr<CFX_Face> face,
     const ByteString& file) {
-  uint32_t style = 0;
-  if (face->IsBold()) {
-    style |= pdfium::kFontStyleForceBold;
-  }
-  if (face->IsItalic()) {
-    style |= pdfium::kFontStyleItalic;
-  }
-  if (face->IsFixedWidth()) {
-    style |= pdfium::kFontStyleFixedPitch;
-  }
-
-  uint32_t charset = SKIACHARSET_Default;
-  std::optional<std::array<uint32_t, 2>> code_page_range =
-      face->GetOs2CodePageRange();
-  if (code_page_range.has_value()) {
-    if (code_page_range.value()[0] & (1 << 31)) {
-      style |= pdfium::kFontStyleSymbolic;
-    }
-    charset |= SkiaGetFaceCharset(code_page_range.value()[0]);
-  }
-
-  std::optional<std::array<uint8_t, 2>> panose = face->GetOs2Panose();
-  if (panose.has_value() && panose.value()[0] == 2) {
-    uint8_t serif = panose.value()[1];
-    if ((serif > 1 && serif < 10) || serif > 13) {
-      style |= pdfium::kFontStyleSerif;
-    }
-  }
-
-  return std::make_unique<CFPF_SkiaPathFont>(file, face->GetFamilyName(), style,
-                                             face->GetRec()->face_index,
-                                             charset, face->GetGlyphCount());
+  CFX_Face::FontStyleInfo fontinfo = face->GetFontStyleInfo();
+  uint32_t charset =
+      SKIACHARSET_Default | SkiaGetFaceCharset(fontinfo.os2_codepage_mask);
+  return std::make_unique<CFPF_SkiaPathFont>(
+      file, face->GetFamilyName(), fontinfo.style, face->GetRec()->face_index,
+      charset, face->GetGlyphCount());
 }
diff --git a/core/fxge/cfx_face.cpp b/core/fxge/cfx_face.cpp
index 56a4520..3b7fa70 100644
--- a/core/fxge/cfx_face.cpp
+++ b/core/fxge/cfx_face.cpp
@@ -865,3 +865,33 @@
   }
   FT_Set_MM_Design_Coordinates(rec, 2, coords);
 }
+
+CFX_Face::FontStyleInfo CFX_Face::GetFontStyleInfo() {
+  uint32_t style = 0;
+  if (IsBold()) {
+    style |= pdfium::kFontStyleForceBold;
+  }
+  if (IsItalic()) {
+    style |= pdfium::kFontStyleItalic;
+  }
+  if (IsFixedWidth()) {
+    style |= pdfium::kFontStyleFixedPitch;
+  }
+
+  uint32_t os2_codepage_mask = 0;
+  std::optional<std::array<uint32_t, 2>> code_page_range =
+      GetOs2CodePageRange();
+  if (code_page_range.has_value() && (code_page_range.value()[0] & (1 << 31))) {
+    style |= pdfium::kFontStyleSymbolic;
+    os2_codepage_mask = code_page_range.value()[0];
+  }
+
+  std::optional<std::array<uint8_t, 2>> panose = GetOs2Panose();
+  if (panose.has_value() && panose.value()[0] == 2) {
+    uint8_t serif = panose.value()[1];
+    if ((serif > 1 && serif < 10) || serif > 13) {
+      style |= pdfium::kFontStyleSerif;
+    }
+  }
+  return {style, os2_codepage_mask};
+}
diff --git a/core/fxge/cfx_face.h b/core/fxge/cfx_face.h
index fc46f98..4c23eaa 100644
--- a/core/fxge/cfx_face.h
+++ b/core/fxge/cfx_face.h
@@ -38,6 +38,12 @@
     uint32_t glyph_index;
   };
 
+  struct FontStyleInfo {
+    // Style utilizes enum FontStyle values
+    uint32_t style;
+    uint32_t os2_codepage_mask;
+  };
+
   // Note that this corresponds to the cmap header in fonts, and not the cmap
   // data in PDFs.
   struct CharMapId {
@@ -76,6 +82,7 @@
 
   bool IsItalic() const;
   bool IsBold() const;
+  FontStyleInfo GetFontStyleInfo();
 
   ByteString GetFamilyName() const;
   ByteString GetStyleName() const;
@@ -93,7 +100,6 @@
 
   std::optional<std::array<uint32_t, 4>> GetOs2UnicodeRange();
   std::optional<std::array<uint32_t, 2>> GetOs2CodePageRange();
-  std::optional<std::array<uint8_t, 2>> GetOs2Panose();
 
   int GetGlyphCount() const;
   // TODO(crbug.com/pdfium/2037): Can this method be private?
@@ -147,6 +153,7 @@
   ~CFX_Face() override;
 
   void AdjustVariationParams(int glyph_index, int dest_width, int weight);
+  std::optional<std::array<uint8_t, 2>> GetOs2Panose();
 
   ScopedFXFTFaceRec const rec_;
   RetainPtr<Retainable> const desc_;
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 74fc7c3..e5b486a 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -487,31 +487,8 @@
 }
 
 uint32_t GetFlags(const RetainPtr<CFX_Face>& face) {
-  uint32_t flags = 0;
-  if (face->IsBold()) {
-    flags |= pdfium::kFontStyleForceBold;
-  }
-  if (face->IsItalic()) {
-    flags |= pdfium::kFontStyleItalic;
-  }
-  if (face->IsFixedWidth()) {
-    flags |= pdfium::kFontStyleFixedPitch;
-  }
-
-  std::optional<std::array<uint32_t, 2>> code_page_range =
-      face->GetOs2CodePageRange();
-  if (code_page_range.has_value() && (code_page_range.value()[0] & (1 << 31))) {
-    flags |= pdfium::kFontStyleSymbolic;
-  }
-
-  std::optional<std::array<uint8_t, 2>> panose = face->GetOs2Panose();
-  if (panose.has_value() && panose.value()[0] == 2) {
-    uint8_t serif = panose.value()[1];
-    if ((serif > 1 && serif < 10) || serif > 13) {
-      flags |= pdfium::kFontStyleSerif;
-    }
-  }
-  return flags;
+  CFX_Face::FontStyleInfo fontinfo = face->GetFontStyleInfo();
+  return fontinfo.style;
 }
 
 RetainPtr<IFX_SeekableReadStream> CreateFontStream(CFX_FontMapper* font_mapper,
