diff --git a/core/fpdfapi/font/cpdf_type3char.cpp b/core/fpdfapi/font/cpdf_type3char.cpp
index c008d5b..1e3ff65 100644
--- a/core/fpdfapi/font/cpdf_type3char.cpp
+++ b/core/fpdfapi/font/cpdf_type3char.cpp
@@ -22,8 +22,7 @@
 
 }  // namespace
 
-CPDF_Type3Char::CPDF_Type3Char(std::unique_ptr<CPDF_Form> pForm)
-    : m_pForm(std::move(pForm)) {}
+CPDF_Type3Char::CPDF_Type3Char() = default;
 
 CPDF_Type3Char::~CPDF_Type3Char() = default;
 
@@ -37,7 +36,7 @@
   pRect->Scale(kTextUnitInGlyphUnit);
 }
 
-bool CPDF_Type3Char::LoadBitmap(CPDF_RenderContext* pContext) {
+bool CPDF_Type3Char::LoadBitmap() {
   if (m_pBitmap || !m_pForm)
     return true;
 
@@ -78,12 +77,12 @@
   m_BBox.top = FXSYS_round(TextUnitToGlyphUnit(pData[5]));
 }
 
-void CPDF_Type3Char::Transform(const CFX_Matrix& matrix) {
+void CPDF_Type3Char::Transform(CPDF_Form* pForm, const CFX_Matrix& matrix) {
   m_Width = m_Width * matrix.GetXUnit() + 0.5f;
 
   CFX_FloatRect char_rect;
   if (m_BBox.right <= m_BBox.left || m_BBox.bottom >= m_BBox.top) {
-    char_rect = form()->CalcBoundingBox();
+    char_rect = pForm->CalcBoundingBox();
     TextUnitRectToGlyphUnitRect(&char_rect);
   } else {
     char_rect = CFX_FloatRect(m_BBox);
@@ -92,12 +91,8 @@
   m_BBox = matrix.TransformRect(char_rect).ToRoundedFxRect();
 }
 
-void CPDF_Type3Char::ResetForm() {
-  m_pForm.reset();
-}
-
-bool CPDF_Type3Char::HasPageObjects() const {
-  return !!m_pForm->GetPageObjectCount();
+void CPDF_Type3Char::SetForm(std::unique_ptr<CPDF_Form> pForm) {
+  m_pForm = std::move(pForm);
 }
 
 RetainPtr<CFX_DIBitmap> CPDF_Type3Char::GetBitmap() {
diff --git a/core/fpdfapi/font/cpdf_type3char.h b/core/fpdfapi/font/cpdf_type3char.h
index c52f5e7..784332d 100644
--- a/core/fpdfapi/font/cpdf_type3char.h
+++ b/core/fpdfapi/font/cpdf_type3char.h
@@ -15,20 +15,18 @@
 
 class CFX_DIBitmap;
 class CPDF_Form;
-class CPDF_RenderContext;
 
 class CPDF_Type3Char {
  public:
-  explicit CPDF_Type3Char(std::unique_ptr<CPDF_Form> pForm);
+  CPDF_Type3Char();
   ~CPDF_Type3Char();
 
   static float TextUnitToGlyphUnit(float fTextUnit);
   static void TextUnitRectToGlyphUnitRect(CFX_FloatRect* pRect);
 
-  bool LoadBitmap(CPDF_RenderContext* pContext);
+  bool LoadBitmap();
   void InitializeFromStreamData(bool bColored, const float* pData);
-  void Transform(const CFX_Matrix& matrix);
-  bool HasPageObjects() const;
+  void Transform(CPDF_Form* pForm, const CFX_Matrix& matrix);
 
   RetainPtr<CFX_DIBitmap> GetBitmap();
   const RetainPtr<CFX_DIBitmap>& GetBitmap() const;
@@ -40,7 +38,7 @@
 
   const CPDF_Form* form() const { return m_pForm.get(); }
   CPDF_Form* form() { return m_pForm.get(); }
-  void ResetForm();
+  void SetForm(std::unique_ptr<CPDF_Form> pForm);
 
  private:
   std::unique_ptr<CPDF_Form> m_pForm;
diff --git a/core/fpdfapi/font/cpdf_type3font.cpp b/core/fpdfapi/font/cpdf_type3font.cpp
index 64343ed..97d473e 100644
--- a/core/fpdfapi/font/cpdf_type3font.cpp
+++ b/core/fpdfapi/font/cpdf_type3font.cpp
@@ -108,13 +108,12 @@
   if (!pStream)
     return nullptr;
 
-  auto form = pdfium::MakeUnique<CPDF_Form>(
+  auto pForm = pdfium::MakeUnique<CPDF_Form>(
       m_pDocument.Get(),
       m_pFontResources ? m_pFontResources.Get() : m_pPageResources.Get(),
       pStream);
 
-  CPDF_Form* pForm = form.get();
-  auto pNewChar = pdfium::MakeUnique<CPDF_Type3Char>(std::move(form));
+  auto pNewChar = pdfium::MakeUnique<CPDF_Type3Char>();
 
   // This can trigger recursion into this method. The content of |m_CacheMap|
   // can change as a result. Thus after it returns, check the cache again for
@@ -128,11 +127,12 @@
   if (it != m_CacheMap.end())
     return it->second.get();
 
-  pNewChar->Transform(m_FontMatrix);
+  pNewChar->Transform(pForm.get(), m_FontMatrix);
+  if (pForm->GetPageObjectCount() != 0)
+    pNewChar->SetForm(std::move(pForm));
+
+  CPDF_Type3Char* pCachedChar = pNewChar.get();
   m_CacheMap[charcode] = std::move(pNewChar);
-  CPDF_Type3Char* pCachedChar = m_CacheMap[charcode].get();
-  if (!pCachedChar->HasPageObjects())
-    pCachedChar->ResetForm();
   return pCachedChar;
 }
 
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index 416ed1e..95ad758 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -1825,7 +1825,7 @@
     matrix.e += iChar > 0 ? textobj->GetCharPositions()[iChar - 1] : 0;
     matrix.Concat(text_matrix);
     matrix.Concat(mtObj2Device);
-    if (!pType3Char->LoadBitmap(m_pContext.Get())) {
+    if (!pType3Char->LoadBitmap()) {
       if (!glyphs.empty()) {
         for (size_t i = 0; i < iChar; ++i) {
           const TextGlyphPos& glyph = glyphs[i];
