diff --git a/testing/fuzzers/pdfium_fuzzer_helper.cc b/testing/fuzzers/pdfium_fuzzer_helper.cc
index bc5bbe2..21a34ff 100644
--- a/testing/fuzzers/pdfium_fuzzer_helper.cc
+++ b/testing/fuzzers/pdfium_fuzzer_helper.cc
@@ -114,6 +114,18 @@
 }
 #endif  // PDF_ENABLE_V8
 
+std::pair<int, int> GetRenderingAndFormFlagFromData(const char* data,
+                                                    size_t len) {
+  std::string data_str = std::string(data, len);
+  std::size_t data_hash = std::hash<std::string>()(data_str);
+
+  // The largest flag value is 0x4FFF, so just take 16 bits from |data_hash| at
+  // a time.
+  int render_flags = data_hash & 0xffff;
+  int form_flags = (data_hash >> 16) & 0xffff;
+  return std::make_pair(render_flags, form_flags);
+}
+
 }  // namespace
 
 PDFiumFuzzerHelper::PDFiumFuzzerHelper() = default;
@@ -124,7 +136,12 @@
   return true;
 }
 
-void PDFiumFuzzerHelper::RenderPdf(const char* pBuf, size_t len) {
+void PDFiumFuzzerHelper::RenderPdf(const char* data, size_t len) {
+  int render_flags;
+  int form_flags;
+  std::tie(render_flags, form_flags) =
+      GetRenderingAndFormFlagFromData(data, len);
+
   IPDF_JSPLATFORM platform_callbacks;
   memset(&platform_callbacks, '\0', sizeof(platform_callbacks));
   platform_callbacks.version = 3;
@@ -138,7 +155,7 @@
   form_callbacks.version = GetFormCallbackVersion();
   form_callbacks.m_pJsPlatform = &platform_callbacks;
 
-  TestLoader loader({pBuf, len});
+  TestLoader loader({data, len});
   FPDF_FILEACCESS file_access;
   memset(&file_access, '\0', sizeof(file_access));
   file_access.m_FileLen = static_cast<unsigned long>(len);
@@ -204,14 +221,16 @@
       if (nRet == PDF_DATA_ERROR)
         return;
     }
-    RenderPage(doc.get(), form.get(), i);
+    RenderPage(doc.get(), form.get(), i, render_flags, form_flags);
   }
   FORM_DoDocumentAAction(form.get(), FPDFDOC_AACTION_WC);
 }
 
 bool PDFiumFuzzerHelper::RenderPage(FPDF_DOCUMENT doc,
                                     FPDF_FORMHANDLE form,
-                                    const int page_index) {
+                                    int page_index,
+                                    int render_flags,
+                                    int form_flags) {
   ScopedFPDFPage page(FPDF_LoadPage(doc, page_index));
   if (!page)
     return false;
@@ -226,8 +245,10 @@
   ScopedFPDFBitmap bitmap(FPDFBitmap_Create(width, height, 0));
   if (bitmap) {
     FPDFBitmap_FillRect(bitmap.get(), 0, 0, width, height, 0xFFFFFFFF);
-    FPDF_RenderPageBitmap(bitmap.get(), page.get(), 0, 0, width, height, 0, 0);
-    FPDF_FFLDraw(form, bitmap.get(), page.get(), 0, 0, width, height, 0, 0);
+    FPDF_RenderPageBitmap(bitmap.get(), page.get(), 0, 0, width, height, 0,
+                          render_flags);
+    FPDF_FFLDraw(form, bitmap.get(), page.get(), 0, 0, width, height, 0,
+                 form_flags);
   }
   FORM_DoPageAAction(page.get(), form, FPDFPAGE_AACTION_CLOSE);
   FORM_OnBeforeClosePage(page.get(), form);
diff --git a/testing/fuzzers/pdfium_fuzzer_helper.h b/testing/fuzzers/pdfium_fuzzer_helper.h
index 72ada4c..60717a1 100644
--- a/testing/fuzzers/pdfium_fuzzer_helper.h
+++ b/testing/fuzzers/pdfium_fuzzer_helper.h
@@ -11,7 +11,7 @@
 
 class PDFiumFuzzerHelper {
  public:
-  void RenderPdf(const char* pBuf, size_t len);
+  void RenderPdf(const char* data, size_t len);
 
   virtual int GetFormCallbackVersion() const = 0;
   virtual bool OnFormFillEnvLoaded(FPDF_DOCUMENT doc);
@@ -21,7 +21,11 @@
   virtual ~PDFiumFuzzerHelper();
 
  private:
-  bool RenderPage(FPDF_DOCUMENT doc, FPDF_FORMHANDLE form, int page_index);
+  bool RenderPage(FPDF_DOCUMENT doc,
+                  FPDF_FORMHANDLE form,
+                  int page_index,
+                  int render_flags,
+                  int form_flags);
 };
 
 #endif  // TESTING_FUZZERS_PDFIUM_FUZZER_HELPER_H_
