diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index b11366f..b2880f8 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -299,7 +299,7 @@
 
   for (auto& line : m_ttoLines) {
     for (size_t i = 0; i < line.GetSize(); ++i) {
-      Piece* pPiece = line.GetPieceAtIndex(i);
+      const Piece* pPiece = line.GetPieceAtIndex(i);
       size_t szCount = GetDisplayPos(pPiece);
       if (szCount == 0)
         continue;
@@ -451,7 +451,7 @@
   pdfium::span<const wchar_t> text_span = m_wsText.span();
   size_t iPieceIndex = 0;
   size_t iPieceCount = pLine->GetSize();
-  Piece* pPiece = pLine->GetPieceAtIndex(0);
+  const Piece* pPiece = pLine->GetPieceAtIndex(0);
   int32_t iStartChar = pPiece->iStartChar;
   int32_t iPieceWidths = 0;
   CFX_BreakType dwBreakStatus = CFX_BreakType::None;
@@ -481,7 +481,7 @@
   if (m_ttoLines.empty())
     return;
 
-  Piece* pFirstPiece = m_ttoLines.back().GetPieceAtIndex(0);
+  const Piece* pFirstPiece = m_ttoLines.back().GetPieceAtIndex(0);
   if (!pFirstPiece)
     return;
 
@@ -500,7 +500,7 @@
   }
 }
 
-size_t CFDE_TextOut::GetDisplayPos(Piece* pPiece) {
+size_t CFDE_TextOut::GetDisplayPos(const Piece* pPiece) {
   ASSERT(pPiece->iChars >= 0);
 
   if (pdfium::CollectionSize<int32_t>(m_CharPos) < pPiece->iChars)
@@ -541,6 +541,12 @@
   return pieces_.size();
 }
 
+const CFDE_TextOut::Piece* CFDE_TextOut::Line::GetPieceAtIndex(
+    size_t index) const {
+  CHECK(pdfium::IndexInBounds(pieces_, index));
+  return &pieces_[index];
+}
+
 CFDE_TextOut::Piece* CFDE_TextOut::Line::GetPieceAtIndex(size_t index) {
   CHECK(pdfium::IndexInBounds(pieces_, index));
   return &pieces_[index];
diff --git a/xfa/fde/cfde_textout.h b/xfa/fde/cfde_textout.h
index bd6b482..900397e 100644
--- a/xfa/fde/cfde_textout.h
+++ b/xfa/fde/cfde_textout.h
@@ -73,6 +73,7 @@
 
     size_t AddPiece(size_t index, const Piece& piece);
     size_t GetSize() const;
+    const Piece* GetPieceAtIndex(size_t index) const;
     Piece* GetPieceAtIndex(size_t index);
     void RemoveLast(size_t count);
 
@@ -96,7 +97,7 @@
                       int32_t* pPieceWidths);
   void AppendPiece(const Piece& piece, bool bNeedReload, bool bEnd);
   void DoAlignment(const CFX_RectF& rect);
-  size_t GetDisplayPos(Piece* pPiece);
+  size_t GetDisplayPos(const Piece* pPiece);
 
   std::unique_ptr<CFX_TxtBreak> const m_pTxtBreak;
   RetainPtr<CFGAS_GEFont> m_pFont;
