diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index fefe6bb..ed934d2 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -9,14 +9,30 @@
 #include <algorithm>
 #include <vector>
 
+#include "core/fpdfapi/parser/cpdf_dictionary.h"
 #include "core/fpdfapi/parser/cpdf_simple_parser.h"
 #include "core/fpdfapi/parser/fpdf_parser_utility.h"
+#include "core/fpdfdoc/cpdf_formfield.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/notreached.h"
 #include "core/fxge/cfx_color.h"
 
 namespace {
 
+ByteString GetDefaultAppearanceString(const CPDF_Dictionary* annot_dict,
+                                      const CPDF_Dictionary* acroform_dict) {
+  ByteString default_appearance_string;
+  RetainPtr<const CPDF_Object> default_appearance_object =
+      CPDF_FormField::GetFieldAttrForDict(annot_dict, "DA");
+  if (default_appearance_object) {
+    default_appearance_string = default_appearance_object->GetString();
+  }
+  if (default_appearance_string.IsEmpty()) {
+    default_appearance_string = acroform_dict->GetByteStringFor("DA");
+  }
+  return default_appearance_string;
+}
+
 // Find the token and its |nParams| parameters from the start of data,
 // and move the current position to the start of those parameters.
 bool FindTagParamFromStart(CPDF_SimpleParser* parser,
@@ -61,6 +77,12 @@
 CPDF_DefaultAppearance::CPDF_DefaultAppearance(const ByteString& csDA)
     : da_(csDA) {}
 
+CPDF_DefaultAppearance::CPDF_DefaultAppearance(
+    const CPDF_Dictionary* annot_dict,
+    const CPDF_Dictionary* acroform_dict)
+    : CPDF_DefaultAppearance(
+          GetDefaultAppearanceString(annot_dict, acroform_dict)) {}
+
 CPDF_DefaultAppearance::~CPDF_DefaultAppearance() = default;
 
 std::optional<CPDF_DefaultAppearance::FontNameAndSize>
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 129b75f..d15d1c5 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -12,6 +12,7 @@
 #include "core/fxcrt/bytestring.h"
 #include "core/fxge/cfx_color.h"
 
+class CPDF_Dictionary;
 class CPDF_SimpleParser;
 
 class CPDF_DefaultAppearance {
@@ -22,6 +23,8 @@
   };
 
   explicit CPDF_DefaultAppearance(const ByteString& csDA);
+  CPDF_DefaultAppearance(const CPDF_Dictionary* annot_dict,
+                         const CPDF_Dictionary* acroform_dict);
   CPDF_DefaultAppearance(const CPDF_DefaultAppearance&) = delete;
   CPDF_DefaultAppearance& operator=(const CPDF_DefaultAppearance&) = delete;
   ~CPDF_DefaultAppearance();
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 56c1411..e921bd3 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -246,20 +246,6 @@
   };
 }
 
-ByteString GetDefaultAppearanceString(CPDF_Dictionary* annot_dict,
-                                      CPDF_Dictionary* form_dict) {
-  ByteString default_appearance_string;
-  RetainPtr<const CPDF_Object> default_appearance_object =
-      CPDF_FormField::GetFieldAttrForDict(annot_dict, "DA");
-  if (default_appearance_object) {
-    default_appearance_string = default_appearance_object->GetString();
-  }
-  if (default_appearance_string.IsEmpty()) {
-    default_appearance_string = form_dict->GetByteStringFor("DA");
-  }
-  return default_appearance_string;
-}
-
 struct DefaultAppearanceInfo {
   ByteString font_name;
   float font_size;
@@ -267,8 +253,9 @@
 };
 
 std::optional<DefaultAppearanceInfo> GetDefaultAppearanceInfo(
-    const ByteString& default_appearance_string) {
-  CPDF_DefaultAppearance appearance(default_appearance_string);
+    const CPDF_Dictionary* annot_dict,
+    const CPDF_Dictionary* acroform_dict) {
+  CPDF_DefaultAppearance appearance(annot_dict, acroform_dict);
   auto maybe_font_name_and_size = appearance.GetFont();
   if (!maybe_font_name_and_size.has_value()) {
     return std::nullopt;
@@ -1051,8 +1038,7 @@
   }
 
   std::optional<DefaultAppearanceInfo> default_appearance_info =
-      GetDefaultAppearanceInfo(
-          GetDefaultAppearanceString(annot_dict, form_dict));
+      GetDefaultAppearanceInfo(annot_dict, form_dict);
   if (!default_appearance_info.has_value()) {
     return false;
   }
@@ -1454,8 +1440,7 @@
   }
 
   std::optional<DefaultAppearanceInfo> default_appearance_info =
-      GetDefaultAppearanceInfo(
-          GetDefaultAppearanceString(annot_dict, form_dict));
+      GetDefaultAppearanceInfo(annot_dict, form_dict);
   if (!default_appearance_info.has_value()) {
     return;
   }
