diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index fbe75d9b1..49222a43a 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -57,6 +57,9 @@
 #ifdef PDF_ENABLE_V8
 #include "fxjs/cfx_v8_array_buffer_allocator.h"
 #include "third_party/base/no_destructor.h"
+#include "v8/include/libplatform/libplatform.h"
+#include "v8/include/v8-array-buffer.h"
+#include "v8/include/v8-initialization.h"
 #endif
 
 #ifdef PDF_ENABLE_XFA
@@ -117,6 +120,11 @@ namespace {
 
 bool g_bLibraryInitialized = false;
 
+#ifdef PDF_ENABLE_V8
+v8::Platform* g_platform = nullptr;
+v8::Isolate* g_isolate = nullptr;
+#endif
+
 void SetRendererType(FPDF_RENDERER_TYPE public_type) {
   // Internal definition of renderer types must stay updated with respect to
   // the public definition, such that all public definitions can be mapped to
@@ -229,6 +237,22 @@ FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* config) {
   if (g_bLibraryInitialized)
     return;
 
+#ifdef PDF_ENABLE_V8
+  g_platform = v8::platform::NewDefaultPlatform().release();
+  v8::V8::InitializePlatform(g_platform);
+
+#ifdef PDF_ENABLE_XFA
+  cppgc::InitializeProcess(g_platform->GetPageAllocator());
+#endif
+
+  v8::V8::Initialize();
+
+  v8::Isolate::CreateParams params;
+  params.array_buffer_allocator = static_cast<v8::ArrayBuffer::Allocator*>(
+      FPDF_GetArrayBufferAllocatorSharedInstance());
+  g_isolate = v8::Isolate::New(params);
+#endif  // PDF_ENABLE_V8
+
   FX_InitializeMemoryAllocators();
   CFX_Timer::InitializeGlobals();
   CFX_GEModule::Create(config ? config->m_pUserFontPaths : nullptr);
@@ -238,14 +262,13 @@ FPDF_InitLibraryWithConfig(const FPDF_LIBRARY_CONFIG* config) {
   CPDFXFA_ModuleInit();
 #endif  // PDF_ENABLE_XFA
 
-  if (config && config->version >= 2) {
-    void* platform = config->version >= 3 ? config->m_pPlatform : nullptr;
-    IJS_Runtime::Initialize(config->m_v8EmbedderSlot, config->m_pIsolate,
-                            platform);
+#if PDF_ENABLE_V8
+  IJS_Runtime::Initialize(0, g_isolate, g_platform);
+#endif  // PDF_ENABLE_V8
+
+  if (config && config->version >= 4)
+    SetRendererType(config->m_RendererType);
 
-    if (config->version >= 4)
-      SetRendererType(config->m_RendererType);
-  }
   g_bLibraryInitialized = true;
 }
 
@@ -265,6 +288,19 @@ FPDF_EXPORT void FPDF_CALLCONV FPDF_DestroyLibrary() {
   CFX_GEModule::Destroy();
   CFX_Timer::DestroyGlobals();
 
+#ifdef PDF_ENABLE_XFA
+  cppgc::ShutdownProcess();
+#endif
+
+#ifdef PDF_ENABLE_V8
+  g_isolate->Dispose();
+  g_isolate = nullptr;
+  v8::V8::Dispose();
+  v8::V8::DisposePlatform();
+  delete g_platform;
+  g_platform = nullptr;
+#endif  // PDF_ENABLE_V8
+
   g_bLibraryInitialized = false;
 }
 
