diff --git a/constants/form_fields.cpp b/constants/form_fields.cpp
index 7409e8d..89c28ff 100644
--- a/constants/form_fields.cpp
+++ b/constants/form_fields.cpp
@@ -7,7 +7,7 @@
 namespace pdfium {
 namespace form_fields {
 
-// PDF 1.7 spec, table 8.69.
+// ISO 32000-1:2008 table 220.
 // Entries common to all field dictionaries.
 const char kFT[] = "FT";
 const char kParent[] = "Parent";
@@ -20,11 +20,19 @@
 const char kDV[] = "DV";
 const char kAA[] = "AA";
 
-// FT values from PDF 1.7 spec, table 8.69.
+// ISO 32000-1:2008 table 220.
+// Values for FT keyword.
 const char kBtn[] = "Btn";
 const char kTx[] = "Tx";
 const char kCh[] = "Ch";
 const char kSig[] = "Sig";
 
+// ISO 32000-1:2008 table 222.
+// Entries common to fields containing variable text.
+const char kDA[] = "DA";
+const char kQ[] = "Q";
+const char kDS[] = "DS";
+const char kRV[] = "RV";
+
 }  // namespace form_fields
 }  // namespace pdfium
diff --git a/constants/form_fields.h b/constants/form_fields.h
index cd2b0fa..e12f4a0 100644
--- a/constants/form_fields.h
+++ b/constants/form_fields.h
@@ -24,6 +24,11 @@
 extern const char kCh[];
 extern const char kSig[];
 
+extern const char kDA[];
+extern const char kQ[];
+extern const char kDS[];
+extern const char kRV[];
+
 }  // namespace form_fields
 }  // namespace pdfium
 
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index d514ee3..cb8cb11 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -9,6 +9,7 @@
 #include <iterator>
 #include <utility>
 
+#include "constants/form_fields.h"
 #include "core/fpdfapi/font/cpdf_font.h"
 #include "core/fpdfapi/page/cpdf_docpagedata.h"
 #include "core/fpdfapi/parser/cpdf_array.h"
@@ -182,11 +183,12 @@
 }
 
 CPDF_DefaultAppearance CPDF_FormControl::GetDefaultAppearance() const {
-  if (m_pWidgetDict->KeyExist("DA"))
-    return CPDF_DefaultAppearance(m_pWidgetDict->GetStringFor("DA"));
-
-  const CPDF_Object* pObj =
-      CPDF_FormField::GetFieldAttr(m_pField->GetDict(), "DA");
+  if (m_pWidgetDict->KeyExist(pdfium::form_fields::kDA)) {
+    return CPDF_DefaultAppearance(
+        m_pWidgetDict->GetStringFor(pdfium::form_fields::kDA));
+  }
+  const CPDF_Object* pObj = CPDF_FormField::GetFieldAttr(
+      m_pField->GetDict(), pdfium::form_fields::kDA);
   if (!pObj)
     return m_pForm->GetDefaultAppearance();
 
@@ -246,11 +248,11 @@
 }
 
 int CPDF_FormControl::GetControlAlignment() const {
-  if (m_pWidgetDict->KeyExist("Q"))
-    return m_pWidgetDict->GetIntegerFor("Q", 0);
+  if (m_pWidgetDict->KeyExist(pdfium::form_fields::kQ))
+    return m_pWidgetDict->GetIntegerFor(pdfium::form_fields::kQ, 0);
 
-  const CPDF_Object* pObj =
-      CPDF_FormField::GetFieldAttr(m_pField->GetDict(), "Q");
+  const CPDF_Object* pObj = CPDF_FormField::GetFieldAttr(
+      m_pField->GetDict(), pdfium::form_fields::kQ);
   if (pObj)
     return pObj->GetInteger();
 
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index a55c7fd..428728b 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -192,7 +192,7 @@
           csValue = pV->GetUnicodeText();
       }
 
-      bool bHasRV = !!GetFieldAttr(m_pDict.Get(), "RV");
+      bool bHasRV = !!GetFieldAttr(m_pDict.Get(), pdfium::form_fields::kRV);
       if (!bHasRV && (csDValue == csValue))
         return false;
 
@@ -210,11 +210,11 @@
 
           m_pDict->SetFor(pdfium::form_fields::kV, std::move(pClone));
           if (bHasRV) {
-            m_pDict->SetFor("RV", pDV->Clone());
+            m_pDict->SetFor(pdfium::form_fields::kRV, pDV->Clone());
           }
         } else {
           m_pDict->RemoveFor(pdfium::form_fields::kV);
-          m_pDict->RemoveFor("RV");
+          m_pDict->RemoveFor(pdfium::form_fields::kRV);
         }
       }
       NotifyAfterValueChange();
@@ -355,7 +355,8 @@
       int iIndex = FindOption(csValue);
       if (iIndex < 0) {
         if (m_Type == kRichText && !bDefault) {
-          m_pDict->SetFor("RV", m_pDict->GetObjectFor(key)->Clone());
+          m_pDict->SetFor(pdfium::form_fields::kRV,
+                          m_pDict->GetObjectFor(key)->Clone());
         }
         m_pDict->RemoveFor("I");
       } else {
