diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index 02d6eea..32bdefb 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -20,22 +20,6 @@
   return syntax.FindTagParamFromStart("Tf", 2);
 }
 
-ByteString CPDF_DefaultAppearance::GetFontString() {
-  ByteString csFont;
-  if (m_csDA.IsEmpty())
-    return csFont;
-
-  CPDF_SimpleParser syntax(m_csDA.AsStringView());
-  if (syntax.FindTagParamFromStart("Tf", 2)) {
-    csFont += syntax.GetWord();
-    csFont += " ";
-    csFont += syntax.GetWord();
-    csFont += " ";
-    csFont += syntax.GetWord();
-  }
-  return csFont;
-}
-
 ByteString CPDF_DefaultAppearance::GetFont(float* fFontSize) {
   *fFontSize = 0.0f;
   if (m_csDA.IsEmpty())
@@ -68,45 +52,6 @@
       (nOperation == PaintOperation::STROKE ? "K" : "k"), 4);
 }
 
-ByteString CPDF_DefaultAppearance::GetColorString(PaintOperation nOperation) {
-  ByteString csColor;
-  if (m_csDA.IsEmpty())
-    return csColor;
-
-  CPDF_SimpleParser syntax(m_csDA.AsStringView());
-  if (syntax.FindTagParamFromStart(
-          (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    return csColor;
-  }
-  if (syntax.FindTagParamFromStart(
-          (nOperation == PaintOperation::STROKE ? "RG" : "rg"), 3)) {
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    return csColor;
-  }
-  if (syntax.FindTagParamFromStart(
-          (nOperation == PaintOperation::STROKE ? "K" : "k"), 4)) {
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-    csColor += " ";
-    csColor += syntax.GetWord();
-  }
-  return csColor;
-}
-
 void CPDF_DefaultAppearance::GetColor(int& iColorType,
                                       float fc[4],
                                       PaintOperation nOperation) {
@@ -181,41 +126,3 @@
                        (int)(b * 255 + 0.5f));
   }
 }
-
-bool CPDF_DefaultAppearance::HasTextMatrix() {
-  if (m_csDA.IsEmpty())
-    return false;
-
-  CPDF_SimpleParser syntax(m_csDA.AsStringView());
-  return syntax.FindTagParamFromStart("Tm", 6);
-}
-
-ByteString CPDF_DefaultAppearance::GetTextMatrixString() {
-  ByteString csTM;
-  if (m_csDA.IsEmpty())
-    return csTM;
-
-  CPDF_SimpleParser syntax(m_csDA.AsStringView());
-  if (syntax.FindTagParamFromStart("Tm", 6)) {
-    for (int i = 0; i < 6; i++) {
-      csTM += syntax.GetWord();
-      csTM += " ";
-    }
-    csTM += syntax.GetWord();
-  }
-  return csTM;
-}
-
-CFX_Matrix CPDF_DefaultAppearance::GetTextMatrix() {
-  if (m_csDA.IsEmpty())
-    return CFX_Matrix();
-
-  CPDF_SimpleParser syntax(m_csDA.AsStringView());
-  if (!syntax.FindTagParamFromStart("Tm", 6))
-    return CFX_Matrix();
-
-  float f[6];
-  for (int i = 0; i < 6; i++)
-    f[i] = FX_atof(syntax.GetWord());
-  return CFX_Matrix(f);
-}
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 33d4bfd..13e6307 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -28,11 +28,9 @@
   ByteString GetStr() const { return m_csDA; }
 
   bool HasFont();
-  ByteString GetFontString();
   ByteString GetFont(float* fFontSize);
 
   bool HasColor(PaintOperation nOperation = PaintOperation::FILL);
-  ByteString GetColorString(PaintOperation nOperation = PaintOperation::FILL);
   void GetColor(int& iColorType,
                 float fc[4],
                 PaintOperation nOperation = PaintOperation::FILL);
@@ -40,10 +38,6 @@
                 int& iColorType,
                 PaintOperation nOperation = PaintOperation::FILL);
 
-  bool HasTextMatrix();
-  ByteString GetTextMatrixString();
-  CFX_Matrix GetTextMatrix();
-
  private:
   ByteString m_csDA;
 };
