diff --git a/core/fpdfapi/parser/cfdf_document.cpp b/core/fpdfapi/parser/cfdf_document.cpp
index 85e2f6e..b008069 100644
--- a/core/fpdfapi/parser/cfdf_document.cpp
+++ b/core/fpdfapi/parser/cfdf_document.cpp
@@ -7,6 +7,7 @@
 #include "core/fpdfapi/parser/cfdf_document.h"
 
 #include <memory>
+#include <sstream>
 #include <utility>
 
 #include "core/fpdfapi/edit/cpdf_creator.h"
@@ -88,10 +89,11 @@
   }
 }
 
-bool CFDF_Document::WriteBuf(CFX_ByteTextBuf& buf) const {
+CFX_ByteString CFDF_Document::WriteToString() const {
   if (!m_pRootDict)
-    return false;
+    return CFX_ByteString();
 
+  std::ostringstream buf;
   buf << "%FDF-1.2\r\n";
   for (const auto& pair : *this)
     buf << pair.first << " 0 obj\r\n"
@@ -99,5 +101,6 @@
 
   buf << "trailer\r\n<</Root " << m_pRootDict->GetObjNum()
       << " 0 R>>\r\n%%EOF\r\n";
-  return true;
+
+  return CFX_ByteString(buf);
 }
diff --git a/core/fpdfapi/parser/cfdf_document.h b/core/fpdfapi/parser/cfdf_document.h
index 9a13877..45bf83d 100644
--- a/core/fpdfapi/parser/cfdf_document.h
+++ b/core/fpdfapi/parser/cfdf_document.h
@@ -27,7 +27,7 @@
   CFDF_Document();
   ~CFDF_Document() override;
 
-  bool WriteBuf(CFX_ByteTextBuf& buf) const;
+  CFX_ByteString WriteToString() const;
   CPDF_Dictionary* GetRoot() const { return m_pRootDict.Get(); }
 
  protected:
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp
index 0c0ca66..7cea165 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp
@@ -151,7 +151,7 @@
   return res;
 }
 
-CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj) {
+std::ostream& operator<<(std::ostream& buf, const CPDF_Object* pObj) {
   if (!pObj) {
     buf << " null";
     return buf;
@@ -211,7 +211,8 @@
       buf << p->GetDict() << "stream\r\n";
       auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(p);
       pAcc->LoadAllData(true);
-      buf.AppendBlock(pAcc->GetData(), pAcc->GetSize());
+      buf.write(reinterpret_cast<const char*>(pAcc->GetData()),
+                pAcc->GetSize());
       buf << "\r\nendstream";
       break;
     }
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.h b/core/fpdfapi/parser/fpdf_parser_utility.h
index 5e764ad..47431e4 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.h
+++ b/core/fpdfapi/parser/fpdf_parser_utility.h
@@ -43,6 +43,6 @@
 
 int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteString& key);
 
-CFX_ByteTextBuf& operator<<(CFX_ByteTextBuf& buf, const CPDF_Object* pObj);
+std::ostream& operator<<(std::ostream& buf, const CPDF_Object* pObj);
 
 #endif  // CORE_FPDFAPI_PARSER_FPDF_PARSER_UTILITY_H_
diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index 552bb31..27db105 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -8,6 +8,8 @@
 
 #include <algorithm>
 #include <memory>
+#include <sstream>
+#include <string>
 #include <vector>
 
 #include "core/fpdfapi/page/cpdf_page.h"
@@ -436,21 +438,28 @@
                                      const std::vector<CPDF_FormField*>& fields,
                                      bool bIncludeOrExclude,
                                      bool bUrlEncoded) {
-  CFX_ByteTextBuf textBuf;
-  ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
+  CFX_ByteString textBuf = ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude);
 
-  uint8_t* pBuffer = textBuf.GetBuffer();
   FX_STRSIZE nBufSize = textBuf.GetLength();
-
-  if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
+  if (nBufSize == 0)
     return false;
 
-  m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
-  return true;
-}
+  uint8_t* pLocalBuffer = FX_Alloc(uint8_t, nBufSize);
+  memcpy(pLocalBuffer, textBuf.c_str(), nBufSize);
+  uint8_t* pBuffer = pLocalBuffer;
 
-bool CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile,
-                                            CFX_WideString csTxtFile) {
+  if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) {
+    FX_Free(pLocalBuffer);
+    return false;
+  }
+
+  m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
+
+  if (pBuffer != pLocalBuffer)
+    FX_Free(pBuffer);
+
+  FX_Free(pLocalBuffer);
+
   return true;
 }
 
@@ -469,7 +478,7 @@
   if (!pFields)
     return false;
 
-  CFX_ByteTextBuf fdfEncodedData;
+  std::ostringstream fdfEncodedData;
   for (uint32_t i = 0; i < pFields->GetCount(); i++) {
     CPDF_Dictionary* pField = pFields->GetDictAt(i);
     if (!pField)
@@ -490,19 +499,22 @@
       fdfEncodedData << "&";
   }
 
-  nBufSize = fdfEncodedData.GetLength();
+  nBufSize = fdfEncodedData.tellp();
+  if (nBufSize == 0)
+    return false;
+
   pBuf = FX_Alloc(uint8_t, nBufSize);
-  memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
+  memcpy(pBuf, fdfEncodedData.str().c_str(), nBufSize);
   return true;
 }
 
-bool CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
+CFX_ByteString CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
     const std::vector<CPDF_FormField*>& fields,
-    bool bIncludeOrExclude,
-    CFX_ByteTextBuf& textBuf) {
+    bool bIncludeOrExclude) {
   std::unique_ptr<CFDF_Document> pFDF = m_pInterForm->ExportToFDF(
       m_pFormFillEnv->JS_docGetFilePath(), fields, bIncludeOrExclude, false);
-  return pFDF ? pFDF->WriteBuf(textBuf) : false;
+
+  return pFDF ? pFDF->WriteToString() : CFX_ByteString();
 }
 
 CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
@@ -523,26 +535,36 @@
   if (!pFDFDoc)
     return false;
 
-  CFX_ByteTextBuf FdfBuffer;
-  if (!pFDFDoc->WriteBuf(FdfBuffer))
+  CFX_ByteString fdfBuffer = pFDFDoc->WriteToString();
+
+  FX_STRSIZE nBufSize = fdfBuffer.GetLength();
+  if (nBufSize == 0)
     return false;
 
-  uint8_t* pBuffer = FdfBuffer.GetBuffer();
-  FX_STRSIZE nBufSize = FdfBuffer.GetLength();
-  if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
+  uint8_t* pLocalBuffer = FX_Alloc(uint8_t, nBufSize);
+  memcpy(pLocalBuffer, fdfBuffer.c_str(), nBufSize);
+  uint8_t* pBuffer = pLocalBuffer;
+
+  if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize)) {
+    FX_Free(pLocalBuffer);
     return false;
+  }
 
   m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
-  if (bUrlEncoded)
+
+  if (pBuffer != pLocalBuffer)
     FX_Free(pBuffer);
 
+  FX_Free(pLocalBuffer);
+
   return true;
 }
 
-bool CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
+CFX_ByteString CPDFSDK_InterForm::ExportFormToFDFTextBuf() {
   std::unique_ptr<CFDF_Document> pFDF =
       m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false);
-  return pFDF && pFDF->WriteBuf(textBuf);
+
+  return pFDF ? pFDF->WriteToString() : CFX_ByteString();
 }
 
 bool CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h
index b613c73..c4a1ff1 100644
--- a/fpdfsdk/cpdfsdk_interform.h
+++ b/fpdfsdk/cpdfsdk_interform.h
@@ -90,10 +90,10 @@
                     bool bIncludeOrExclude,
                     bool bUrlEncoded);
   bool SubmitForm(const CFX_WideString& sDestination, bool bUrlEncoded);
-  bool ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf);
-  bool ExportFieldsToFDFTextBuf(const std::vector<CPDF_FormField*>& fields,
-                                bool bIncludeOrExclude,
-                                CFX_ByteTextBuf& textBuf);
+  CFX_ByteString ExportFormToFDFTextBuf();
+  CFX_ByteString ExportFieldsToFDFTextBuf(
+      const std::vector<CPDF_FormField*>& fields,
+      bool bIncludeOrExclude);
   CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
 
   bool IsNeedHighLight(int nFieldType);
@@ -117,7 +117,6 @@
   int BeforeFormImportData(CPDF_InterForm* pForm) override;
   void AfterFormImportData(CPDF_InterForm* pForm) override;
 
-  bool FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile);
   bool FDFToURLEncodedData(uint8_t*& pBuf, FX_STRSIZE& nBufSize);
   int GetPageIndexByAnnotDict(CPDF_Document* pDocument,
                               CPDF_Dictionary* pAnnotDict) const;
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index ba4b2ae..77878a5 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -7,6 +7,7 @@
 #include "fpdfsdk/javascript/Document.h"
 
 #include <algorithm>
+#include <sstream>
 #include <utility>
 #include <vector>
 
@@ -382,16 +383,21 @@
       iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
   CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
-  CFX_ByteTextBuf textBuf;
-  if (!pInterForm->ExportFormToFDFTextBuf(textBuf))
+  CFX_ByteString sTextBuf = pInterForm->ExportFormToFDFTextBuf();
+  if (sTextBuf.GetLength() == 0)
     return false;
 
+  FX_STRSIZE nBufSize = sTextBuf.GetLength();
+  char* pMutableBuf = FX_Alloc(char, nBufSize);
+  memcpy(pMutableBuf, sTextBuf.c_str(), nBufSize);
+
   pRuntime->BeginBlock();
   CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
-  pFormFillEnv->JS_docmailForm(textBuf.GetBuffer(), textBuf.GetLength(), bUI,
-                               cTo.c_str(), cSubject.c_str(), cCc.c_str(),
-                               cBcc.c_str(), cMsg.c_str());
+  pFormFillEnv->JS_docmailForm(pMutableBuf, nBufSize, bUI, cTo.c_str(),
+                               cSubject.c_str(), cCc.c_str(), cBcc.c_str(),
+                               cMsg.c_str());
   pRuntime->EndBlock();
+  FX_Free(pMutableBuf);
   return true;
 }
 
