diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index e6dde234330d0..eda0651355733 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -282,6 +282,7 @@ if (enable_pdf) {
     deps = [
       "//base",
       "//ppapi/cpp:objects",
+      "//printing/mojom",
       "//skia",
       "//third_party/blink/public:blink",
       "//third_party/blink/public/common:headers",
@@ -322,6 +323,7 @@ if (enable_pdf) {
       "//ppapi/cpp:objects",
       "//ppapi/cpp/private:internal_module",
       "//skia",
+      "//third_party/blink/public:blink_headers",
       "//third_party/blink/public/common:headers",
       "//ui/base",
       "//ui/base/cursor/mojom:cursor_type",
diff --git a/pdf/out_of_process_instance.cc b/pdf/out_of_process_instance.cc
index f9a335962e72e..096ef029a51f6 100644
--- a/pdf/out_of_process_instance.cc
+++ b/pdf/out_of_process_instance.cc
@@ -736,9 +736,8 @@ int32_t OutOfProcessInstance::PdfPrintBegin(
   if ((print_settings->format & supported_formats) == 0)
     return 0;
 
-  print_settings_.is_printing = true;
-  print_settings_.pepper_print_settings = *print_settings;
-  print_settings_.pdf_print_settings = *pdf_print_settings;
+  print_params_ =
+      WebPrintParamsFromPPPrintSettings(*print_settings, *pdf_print_settings);
   engine()->PrintBegin();
   return ret;
 }
@@ -761,10 +760,10 @@ int32_t OutOfProcessInstance::PrintBegin(
 pp::Resource OutOfProcessInstance::PrintPages(
     const PP_PrintPageNumberRange_Dev* page_ranges,
     uint32_t page_range_count) {
-  if (!print_settings_.is_printing)
+  if (!print_params_.has_value())
     return pp::Resource();
 
-  print_settings_.print_pages_called = true;
+  print_pages_called_ = true;
   if (page_range_count == 0)
     return pp::Resource();
 
@@ -772,8 +771,7 @@ pp::Resource OutOfProcessInstance::PrintPages(
       PageNumbersFromPPPrintPageNumberRange(page_ranges, page_range_count);
 
   const std::vector<uint8_t> pdf_data =
-      engine()->PrintPages(page_numbers, print_settings_.pepper_print_settings,
-                           print_settings_.pdf_print_settings);
+      engine()->PrintPages(page_numbers, print_params_.value());
 
   // Convert buffer to Pepper type.
   pp::Buffer_Dev buffer;
@@ -786,9 +784,10 @@ pp::Resource OutOfProcessInstance::PrintPages(
 }
 
 void OutOfProcessInstance::PrintEnd() {
-  if (print_settings_.print_pages_called)
+  if (print_pages_called_)
     UserMetricsRecordAction("PDF.PrintPage");
-  print_settings_.Clear();
+  print_pages_called_ = false;
+  print_params_.reset();
   engine()->PrintEnd();
 }
 
@@ -1358,11 +1357,4 @@ void OutOfProcessInstance::OnPrint(int32_t /*unused_but_required*/) {
   pp::PDF::Print(this);
 }
 
-void OutOfProcessInstance::PrintSettings::Clear() {
-  is_printing = false;
-  print_pages_called = false;
-  memset(&pepper_print_settings, 0, sizeof(pepper_print_settings));
-  memset(&pdf_print_settings, 0, sizeof(pdf_print_settings));
-}
-
 }  // namespace chrome_pdf
diff --git a/pdf/out_of_process_instance.h b/pdf/out_of_process_instance.h
index 4d0b966b4dc29..8f80acdd8dada 100644
--- a/pdf/out_of_process_instance.h
+++ b/pdf/out_of_process_instance.h
@@ -24,6 +24,7 @@
 #include "ppapi/cpp/image_data.h"
 #include "ppapi/cpp/instance.h"
 #include "ppapi/cpp/private/find_private.h"
+#include "third_party/blink/public/web/web_print_params.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "ui/gfx/geometry/rect.h"
 
@@ -192,27 +193,11 @@ class OutOfProcessInstance : public PdfViewPluginBase,
   // The Pepper image data that is in sync with mutable_image_data().
   pp::ImageData pepper_image_data_;
 
-  struct PrintSettings {
-    PrintSettings() { Clear(); }
+  // Assigned a value only between `PdfPrintBegin()` and `PrintEnd()` calls.
+  absl::optional<blink::WebPrintParams> print_params_;
 
-    void Clear();
-
-    // This is set to true when PdfPrintBegin() is called and false when
-    // PrintEnd() is called.
-    bool is_printing;
-
-    // To know whether this was an actual print operation, so we don't double
-    // count UMA logging.
-    bool print_pages_called;
-
-    // Generic print settings.
-    PP_PrintSettings_Dev pepper_print_settings;
-
-    // PDF-specific print settings.
-    PP_PdfPrintSettings_Dev pdf_print_settings;
-  };
-
-  PrintSettings print_settings_;
+  // For identifying actual print operations to avoid double logging of UMA.
+  bool print_pages_called_;
 
   // The PreviewModeClient used for print preview. Will be passed to
   // `preview_engine_`.
diff --git a/pdf/pdf_engine.h b/pdf/pdf_engine.h
index e2a84c1b99971..0c9a78235116c 100644
--- a/pdf/pdf_engine.h
+++ b/pdf/pdf_engine.h
@@ -19,7 +19,6 @@
 #include "build/chromeos_buildflags.h"
 #include "pdf/document_layout.h"
 #include "pdf/ppapi_migration/callback.h"
-#include "ppapi/c/dev/ppp_printing_dev.h"
 #include "ppapi/cpp/completion_callback.h"
 #include "ppapi/cpp/private/pdf.h"
 #include "ppapi/cpp/url_loader.h"
@@ -41,7 +40,6 @@ typedef void (*PDFEnsureTypefaceCharactersAccessible)(const LOGFONT* font,
                                                       size_t text_length);
 #endif
 
-struct PP_PdfPrintSettings_Dev;
 class SkBitmap;
 
 namespace base {
@@ -50,6 +48,7 @@ class Location;
 
 namespace blink {
 class WebInputEvent;
+struct WebPrintParams;
 }  // namespace blink
 
 namespace gfx {
@@ -322,8 +321,7 @@ class PDFEngine {
   virtual void PrintBegin() = 0;
   virtual std::vector<uint8_t> PrintPages(
       const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings) = 0;
+      const blink::WebPrintParams& print_params) = 0;
   virtual void PrintEnd() = 0;
   virtual void StartFind(const std::string& text, bool case_sensitive) = 0;
   virtual bool SelectFindResult(bool forward) = 0;
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 0e56a019f7c0f..60406293e6c4e 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -62,6 +62,7 @@
 #include "third_party/blink/public/common/input/web_pointer_properties.h"
 #include "third_party/blink/public/common/input/web_touch_event.h"
 #include "third_party/blink/public/common/input/web_touch_point.h"
+#include "third_party/blink/public/web/web_print_params.h"
 #include "third_party/pdfium/public/cpp/fpdf_scopers.h"
 #include "third_party/pdfium/public/fpdf_annot.h"
 #include "third_party/pdfium/public/fpdf_attachment.h"
@@ -967,25 +968,19 @@ void PDFiumEngine::PrintBegin() {
 
 std::vector<uint8_t> PDFiumEngine::PrintPages(
     const std::vector<int>& page_numbers,
-    const PP_PrintSettings_Dev& print_settings,
-    const PP_PdfPrintSettings_Dev& pdf_print_settings) {
+    const blink::WebPrintParams& print_params) {
   DCHECK(!page_numbers.empty());
 
-  if ((print_settings.format & PP_PRINTOUTPUTFORMAT_PDF) &&
-      HasPermission(PERMISSION_PRINT_HIGH_QUALITY)) {
-    return PrintPagesAsPdf(page_numbers, print_settings, pdf_print_settings);
-  }
-  if (HasPermission(PERMISSION_PRINT_LOW_QUALITY)) {
-    return PrintPagesAsRasterPdf(page_numbers, print_settings,
-                                 pdf_print_settings);
-  }
-  return std::vector<uint8_t>();
+  return print_params.rasterize_pdf
+             ? PrintPagesAsRasterPdf(page_numbers, print_params)
+             : PrintPagesAsPdf(page_numbers, print_params);
 }
 
 std::vector<uint8_t> PDFiumEngine::PrintPagesAsRasterPdf(
     const std::vector<int>& page_numbers,
-    const PP_PrintSettings_Dev& print_settings,
-    const PP_PdfPrintSettings_Dev& pdf_print_settings) {
+    const blink::WebPrintParams& print_params) {
+  DCHECK(HasPermission(PERMISSION_PRINT_LOW_QUALITY));
+
   // If document is not downloaded yet, disable printing.
   if (doc() && !doc_loader_->IsDocumentComplete())
     return std::vector<uint8_t>();
@@ -994,14 +989,13 @@ std::vector<uint8_t> PDFiumEngine::PrintPagesAsRasterPdf(
 
   SetLastInstance();
 
-  return print_.PrintPagesAsPdf(page_numbers, print_settings,
-                                pdf_print_settings, /*raster=*/true);
+  return print_.PrintPagesAsPdf(page_numbers, print_params);
 }
 
 std::vector<uint8_t> PDFiumEngine::PrintPagesAsPdf(
     const std::vector<int>& page_numbers,
-    const PP_PrintSettings_Dev& print_settings,
-    const PP_PdfPrintSettings_Dev& pdf_print_settings) {
+    const blink::WebPrintParams& print_params) {
+  DCHECK(HasPermission(PERMISSION_PRINT_HIGH_QUALITY));
   DCHECK(doc());
 
   KillFormFocus();
@@ -1012,8 +1006,7 @@ std::vector<uint8_t> PDFiumEngine::PrintPagesAsPdf(
       pages_[page_number]->Unload();
   }
 
-  return print_.PrintPagesAsPdf(page_numbers, print_settings,
-                                pdf_print_settings, /*raster=*/false);
+  return print_.PrintPagesAsPdf(page_numbers, print_params);
 }
 
 void PDFiumEngine::KillFormFocus() {
diff --git a/pdf/pdfium/pdfium_engine.h b/pdf/pdfium/pdfium_engine.h
index 28cc50e665710..f9ab582e94f4a 100644
--- a/pdf/pdfium/pdfium_engine.h
+++ b/pdf/pdfium/pdfium_engine.h
@@ -99,8 +99,7 @@ class PDFiumEngine : public PDFEngine,
   void PrintBegin() override;
   std::vector<uint8_t> PrintPages(
       const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings) override;
+      const blink::WebPrintParams& print_params) override;
   void PrintEnd() override;
   void StartFind(const std::string& text, bool case_sensitive) override;
   bool SelectFindResult(bool forward) override;
@@ -414,13 +413,11 @@ class PDFiumEngine : public PDFEngine,
 
   std::vector<uint8_t> PrintPagesAsRasterPdf(
       const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings);
+      const blink::WebPrintParams& print_params);
 
   std::vector<uint8_t> PrintPagesAsPdf(
       const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings);
+      const blink::WebPrintParams& print_params);
 
   // Checks if `page` has selected text in a form element. If so, sets that as
   // the plugin's text selection.
diff --git a/pdf/pdfium/pdfium_print.cc b/pdf/pdfium/pdfium_print.cc
index cff4fca167799..74e1e14a42d82 100644
--- a/pdf/pdfium/pdfium_print.cc
+++ b/pdf/pdfium/pdfium_print.cc
@@ -13,12 +13,10 @@
 #include "pdf/pdfium/pdfium_engine.h"
 #include "pdf/pdfium/pdfium_mem_buffer_file_read.h"
 #include "pdf/pdfium/pdfium_mem_buffer_file_write.h"
-#include "pdf/ppapi_migration/geometry_conversions.h"
-#include "ppapi/c/dev/ppp_printing_dev.h"
-#include "ppapi/c/private/ppp_pdf.h"
 #include "printing/nup_parameters.h"
 #include "printing/page_setup.h"
 #include "printing/units.h"
+#include "third_party/blink/public/web/web_print_params.h"
 #include "third_party/pdfium/public/fpdf_flatten.h"
 #include "third_party/pdfium/public/fpdf_ppo.h"
 #include "third_party/pdfium/public/fpdf_transformpage.h"
@@ -72,11 +70,12 @@ void SetPageSizeAndContentRect(bool rotated,
 }
 
 // Transform `page` contents to fit in the selected printer paper size.
-void TransformPDFPageForPrinting(FPDF_PAGE page,
-                                 float scale_factor,
-                                 PP_PrintScalingOption_Dev scaling_option,
-                                 const gfx::Size& paper_size,
-                                 const gfx::Rect& printable_area) {
+void TransformPDFPageForPrinting(
+    FPDF_PAGE page,
+    float scale_factor,
+    printing::mojom::PrintScalingOption scaling_option,
+    const gfx::Size& paper_size,
+    const gfx::Rect& printable_area) {
   // Get the source page width and height in points.
   gfx::SizeF src_page_size(FPDF_GetPageWidthF(page), FPDF_GetPageHeightF(page));
   const int src_page_rotation = FPDFPage_GetRotation(page);
@@ -97,12 +96,12 @@ void TransformPDFPageForPrinting(FPDF_PAGE page,
   gfx::Rect gfx_printed_rect;
   bool fitted_scaling;
   switch (scaling_option) {
-    case PP_PRINTSCALINGOPTION_FIT_TO_PRINTABLE_AREA:
+    case printing::mojom::PrintScalingOption::kFitToPrintableArea:
       gfx_printed_rect = gfx::Rect(content_rect.x(), content_rect.y(),
                                    content_rect.width(), content_rect.height());
       fitted_scaling = true;
       break;
-    case PP_PRINTSCALINGOPTION_FIT_TO_PAPER:
+    case printing::mojom::PrintScalingOption::kFitToPaper:
       gfx_printed_rect = gfx::Rect(page_size.width(), page_size.height());
       fitted_scaling = true;
       break;
@@ -166,11 +165,11 @@ void TransformPDFPageForPrinting(FPDF_PAGE page,
 void FitContentsToPrintableAreaIfRequired(
     FPDF_DOCUMENT doc,
     float scale_factor,
-    PP_PrintScalingOption_Dev scaling_option,
+    printing::mojom::PrintScalingOption scaling_option,
     const gfx::Size& paper_size,
     const gfx::Rect& printable_area) {
   // Check to see if we need to fit pdf contents to printer paper size.
-  if (scaling_option == PP_PRINTSCALINGOPTION_SOURCE_SIZE)
+  if (scaling_option == printing::mojom::PrintScalingOption::kSourceSize)
     return;
 
   int num_pages = FPDF_GetPageCount(doc);
@@ -292,20 +291,21 @@ void PDFiumPrint::FitContentsToPrintableArea(FPDF_DOCUMENT doc,
                                              const gfx::Size& page_size,
                                              const gfx::Rect& printable_area) {
   FitContentsToPrintableAreaIfRequired(
-      doc, /*scale_factor=*/1.0f, PP_PRINTSCALINGOPTION_FIT_TO_PRINTABLE_AREA,
-      page_size, printable_area);
+      doc, /*scale_factor=*/1.0f,
+      printing::mojom::PrintScalingOption::kFitToPrintableArea, page_size,
+      printable_area);
 }
 
 std::vector<uint8_t> PDFiumPrint::PrintPagesAsPdf(
     const std::vector<int>& page_numbers,
-    const PP_PrintSettings_Dev& print_settings,
-    const PP_PdfPrintSettings_Dev& pdf_print_settings,
-    bool raster) {
+    const blink::WebPrintParams& print_params) {
   std::vector<uint8_t> buffer;
-  ScopedFPDFDocument output_doc =
-      CreatePrintPdf(page_numbers, print_settings, pdf_print_settings);
-  if (raster)
-    output_doc = CreateRasterPdf(std::move(output_doc), print_settings);
+  ScopedFPDFDocument output_doc = CreatePrintPdf(page_numbers, print_params);
+  if (print_params.rasterize_pdf) {
+    output_doc =
+        CreateRasterPdf(std::move(output_doc), print_params.printer_dpi);
+  }
+
   if (GetDocumentPageCount(output_doc.get()))
     buffer = ConvertDocToBuffer(std::move(output_doc));
   return buffer;
@@ -313,8 +313,7 @@ std::vector<uint8_t> PDFiumPrint::PrintPagesAsPdf(
 
 ScopedFPDFDocument PDFiumPrint::CreatePrintPdf(
     const std::vector<int>& page_numbers,
-    const PP_PrintSettings_Dev& print_settings,
-    const PP_PdfPrintSettings_Dev& pdf_print_settings) {
+    const blink::WebPrintParams& print_params) {
   ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
   DCHECK(output_doc);
   FPDF_CopyViewerPreferences(output_doc.get(), engine_->doc());
@@ -325,36 +324,29 @@ ScopedFPDFDocument PDFiumPrint::CreatePrintPdf(
     return nullptr;
   }
 
-  float scale_factor = pdf_print_settings.scale_factor / 100.0f;
+  float scale_factor = print_params.scale_factor / 100.0f;
   FitContentsToPrintableAreaIfRequired(
-      output_doc.get(), scale_factor, print_settings.print_scaling_option,
-      SizeFromPPSize(print_settings.paper_size),
-      RectFromPPRect(print_settings.printable_area));
+      output_doc.get(), scale_factor, print_params.print_scaling_option,
+      print_params.paper_size, print_params.printable_area);
   if (!FlattenPrintData(output_doc.get()))
     return nullptr;
 
-  uint32_t pages_per_sheet = pdf_print_settings.pages_per_sheet;
+  uint32_t pages_per_sheet = print_params.pages_per_sheet;
   if (!ShouldDoNup(pages_per_sheet))
     return output_doc;
 
-  gfx::Size page_size(print_settings.paper_size.width,
-                      print_settings.paper_size.height);
-  gfx::Rect printable_area(print_settings.printable_area.point.x,
-                           print_settings.printable_area.point.y,
-                           print_settings.printable_area.size.width,
-                           print_settings.printable_area.size.height);
   gfx::Rect symmetrical_printable_area =
-      printing::PageSetup::GetSymmetricalPrintableArea(page_size,
-                                                       printable_area);
+      printing::PageSetup::GetSymmetricalPrintableArea(
+          print_params.paper_size, print_params.printable_area);
   if (symmetrical_printable_area.IsEmpty())
     return nullptr;
-  return CreateNupPdfDocument(std::move(output_doc), pages_per_sheet, page_size,
+  return CreateNupPdfDocument(std::move(output_doc), pages_per_sheet,
+                              print_params.paper_size,
                               symmetrical_printable_area);
 }
 
-ScopedFPDFDocument PDFiumPrint::CreateRasterPdf(
-    ScopedFPDFDocument doc,
-    const PP_PrintSettings_Dev& print_settings) {
+ScopedFPDFDocument PDFiumPrint::CreateRasterPdf(ScopedFPDFDocument doc,
+                                                int dpi) {
   int page_count = GetDocumentPageCount(doc.get());
   if (page_count == 0)
     return nullptr;
@@ -369,7 +361,7 @@ ScopedFPDFDocument PDFiumPrint::CreateRasterPdf(
       return nullptr;
 
     ScopedFPDFDocument temp_doc =
-        CreateSinglePageRasterPdf(pdf_page.get(), print_settings);
+        CreateSinglePageRasterPdf(pdf_page.get(), dpi);
     if (!temp_doc)
       return nullptr;
 
@@ -382,7 +374,7 @@ ScopedFPDFDocument PDFiumPrint::CreateRasterPdf(
 
 ScopedFPDFDocument PDFiumPrint::CreateSinglePageRasterPdf(
     FPDF_PAGE page_to_print,
-    const PP_PrintSettings_Dev& print_settings) {
+    int dpi) {
   ScopedFPDFDocument temp_doc(FPDF_CreateNewDocument());
   DCHECK(temp_doc);
 
@@ -391,10 +383,8 @@ ScopedFPDFDocument PDFiumPrint::CreateSinglePageRasterPdf(
 
   // For computing size in pixels, use a square dpi since the source PDF page
   // has square DPI.
-  int width_in_pixels =
-      ConvertUnit(source_page_width, kPointsPerInch, print_settings.dpi);
-  int height_in_pixels =
-      ConvertUnit(source_page_height, kPointsPerInch, print_settings.dpi);
+  int width_in_pixels = ConvertUnit(source_page_width, kPointsPerInch, dpi);
+  int height_in_pixels = ConvertUnit(source_page_height, kPointsPerInch, dpi);
 
   gfx::Size bitmap_size(width_in_pixels, height_in_pixels);
   ScopedFPDFBitmap bitmap(FPDFBitmap_Create(
@@ -405,13 +395,10 @@ ScopedFPDFDocument PDFiumPrint::CreateSinglePageRasterPdf(
                       bitmap_size.height(), 0xFFFFFFFF);
 
   FPDF_RenderPageBitmap(bitmap.get(), page_to_print, 0, 0, bitmap_size.width(),
-                        bitmap_size.height(), print_settings.orientation,
-                        FPDF_PRINTING);
+                        bitmap_size.height(), /*rotate=*/0, FPDF_PRINTING);
 
-  double ratio_x = ConvertUnitDouble(bitmap_size.width(), print_settings.dpi,
-                                     kPointsPerInch);
-  double ratio_y = ConvertUnitDouble(bitmap_size.height(), print_settings.dpi,
-                                     kPointsPerInch);
+  double ratio_x = ConvertUnitDouble(bitmap_size.width(), dpi, kPointsPerInch);
+  double ratio_y = ConvertUnitDouble(bitmap_size.height(), dpi, kPointsPerInch);
 
   // Add the bitmap to an image object and add the image object to the output
   // page.
diff --git a/pdf/pdfium/pdfium_print.h b/pdf/pdfium/pdfium_print.h
index 294c261c4a445..e28bcf9beb297 100644
--- a/pdf/pdfium/pdfium_print.h
+++ b/pdf/pdfium/pdfium_print.h
@@ -12,8 +12,9 @@
 #include "third_party/pdfium/public/cpp/fpdf_scopers.h"
 #include "third_party/pdfium/public/fpdfview.h"
 
-struct PP_PdfPrintSettings_Dev;
-struct PP_PrintSettings_Dev;
+namespace blink {
+struct WebPrintParams;
+}  // namespace blink
 
 namespace gfx {
 class Rect;
@@ -62,23 +63,16 @@ class PDFiumPrint {
 
   std::vector<uint8_t> PrintPagesAsPdf(
       const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings,
-      bool raster);
+      const blink::WebPrintParams& print_params);
 
  private:
-  ScopedFPDFDocument CreatePrintPdf(
-      const std::vector<int>& page_numbers,
-      const PP_PrintSettings_Dev& print_settings,
-      const PP_PdfPrintSettings_Dev& pdf_print_settings);
+  ScopedFPDFDocument CreatePrintPdf(const std::vector<int>& page_numbers,
+                                    const blink::WebPrintParams& print_params);
 
-  ScopedFPDFDocument CreateRasterPdf(
-      ScopedFPDFDocument doc,
-      const PP_PrintSettings_Dev& print_settings);
+  ScopedFPDFDocument CreateRasterPdf(ScopedFPDFDocument doc, int dpi);
 
-  ScopedFPDFDocument CreateSinglePageRasterPdf(
-      FPDF_PAGE page_to_print,
-      const PP_PrintSettings_Dev& print_settings);
+  ScopedFPDFDocument CreateSinglePageRasterPdf(FPDF_PAGE page_to_print,
+                                               int dpi);
 
   PDFiumEngine* const engine_;
 };
diff --git a/pdf/pdfium/pdfium_print_unittest.cc b/pdf/pdfium/pdfium_print_unittest.cc
index c360ae38df647..a1c32572fa213 100644
--- a/pdf/pdfium/pdfium_print_unittest.cc
+++ b/pdf/pdfium/pdfium_print_unittest.cc
@@ -12,12 +12,11 @@
 #include "pdf/pdfium/pdfium_engine_exports.h"
 #include "pdf/pdfium/pdfium_test_base.h"
 #include "pdf/test/test_client.h"
-#include "ppapi/c/dev/ppp_printing_dev.h"
-#include "ppapi/c/private/ppp_pdf.h"
 #include "printing/pdf_render_settings.h"
 #include "printing/units.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/blink/public/web/web_print_params.h"
 #include "ui/gfx/geometry/rect.h"
 #include "ui/gfx/geometry/size_f.h"
 
@@ -31,12 +30,21 @@ namespace {
 // Number of color channels in a BGRA bitmap.
 constexpr int kColorChannels = 4;
 
-constexpr PP_Size kUSLetterSize = {612, 792};
-constexpr PP_Rect kUSLetterRect = {{0, 0}, kUSLetterSize};
-constexpr PP_Rect kPrintableAreaRect = {{18, 18}, {576, 733}};
+constexpr gfx::Size kUSLetterSize = {612, 792};
+constexpr gfx::Rect kUSLetterRect = {{0, 0}, kUSLetterSize};
+constexpr gfx::Rect kPrintableAreaRect = {{18, 18}, {576, 733}};
 
 using ExpectedDimensions = std::vector<gfx::SizeF>;
 
+blink::WebPrintParams GetDefaultPrintParams() {
+  blink::WebPrintParams params;
+  params.print_content_area = kUSLetterRect;
+  params.printable_area = kUSLetterRect;
+  params.paper_size = kUSLetterSize;
+  params.print_scaling_option = printing::mojom::PrintScalingOption::kNone;
+  return params;
+}
+
 void CheckPdfDimensions(const std::vector<uint8_t>& pdf_data,
                         const ExpectedDimensions& expected_dimensions) {
   PDFiumEngineExports exports;
@@ -95,54 +103,39 @@ TEST_F(PDFiumPrintTest, Basic) {
 
   PDFiumPrint print(engine.get());
 
-  constexpr PP_PrintSettings_Dev print_settings = {kUSLetterRect,
-                                                   kUSLetterRect,
-                                                   kUSLetterSize,
-                                                   72,
-                                                   PP_PRINTORIENTATION_NORMAL,
-                                                   PP_PRINTSCALINGOPTION_NONE,
-                                                   PP_FALSE,
-                                                   PP_PRINTOUTPUTFORMAT_PDF};
-  constexpr PP_PdfPrintSettings_Dev pdf_print_settings = {1, 100};
+  blink::WebPrintParams print_params = GetDefaultPrintParams();
+  blink::WebPrintParams print_params_raster = print_params;
+  print_params_raster.rasterize_pdf = true;
 
   {
     // Print 2 pages.
     const ExpectedDimensions kExpectedDimensions = {{612.0, 792.0},
                                                     {612.0, 792.0}};
     const std::vector<int> pages = {0, 1};
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
   }
   {
     // Print 1 page.
     const ExpectedDimensions kExpectedDimensions = {{612.0, 792.0}};
     const std::vector<int> pages = {0};
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
   }
   {
     // Print the other page.
     const ExpectedDimensions kExpectedDimensions = {{612.0, 792.0}};
     const std::vector<int> pages = {1};
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
   }
 }
@@ -155,15 +148,12 @@ TEST_F(PDFiumPrintTest, AlterScaling) {
 
   PDFiumPrint print(engine.get());
 
-  PP_PrintSettings_Dev print_settings = {kPrintableAreaRect,
-                                         kUSLetterRect,
-                                         kUSLetterSize,
-                                         72,
-                                         PP_PRINTORIENTATION_NORMAL,
-                                         PP_PRINTSCALINGOPTION_NONE,
-                                         PP_FALSE,
-                                         PP_PRINTOUTPUTFORMAT_PDF};
-  constexpr PP_PdfPrintSettings_Dev pdf_print_settings = {1, 100};
+  blink::WebPrintParams print_params = GetDefaultPrintParams();
+  print_params.printable_area = kPrintableAreaRect;
+
+  blink::WebPrintParams print_params_raster = print_params;
+  print_params_raster.rasterize_pdf = true;
+
   const ExpectedDimensions kExpectedDimensions = {{612.0, 792.0}};
   const std::vector<int> pages = {0};
 
@@ -173,53 +163,49 @@ TEST_F(PDFiumPrintTest, AlterScaling) {
     static constexpr char kChecksumRaster[] =
         "1ab7bfd2c59f6ffb7b1eb0885a9cf18d";
 
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksum);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksumRaster);
   }
   {
-    // "Fit to Page" scaling
-    print_settings.print_scaling_option =
-        PP_PRINTSCALINGOPTION_FIT_TO_PRINTABLE_AREA;
+    // "Fit to Printable Area" scaling
+    print_params.print_scaling_option =
+        printing::mojom::PrintScalingOption::kFitToPrintableArea;
+    print_params_raster.print_scaling_option =
+        printing::mojom::PrintScalingOption::kFitToPrintableArea;
 
     static constexpr char kChecksum[] = "41847e1f0c581150a84794482528f790";
     static constexpr char kChecksumRaster[] =
         "f8c460d4b1a57e6dc580b88aadc73653";
 
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksum);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksumRaster);
   }
   {
     // "Fit to Paper" scaling
-    print_settings.print_scaling_option = PP_PRINTSCALINGOPTION_FIT_TO_PAPER;
+    print_params.print_scaling_option =
+        printing::mojom::PrintScalingOption::kFitToPaper;
+    print_params_raster.print_scaling_option =
+        printing::mojom::PrintScalingOption::kFitToPaper;
 
     static constexpr char kChecksum[] = "3a4828228bcbae230574c057b7a0669e";
     static constexpr char kChecksumRaster[] =
         "93b20afea37f1ec437061c7affc03918";
 
-    std::vector<uint8_t> pdf_data =
-        print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                              /*raster=*/false);
+    std::vector<uint8_t> pdf_data = print.PrintPagesAsPdf(pages, print_params);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksum);
 
-    pdf_data = print.PrintPagesAsPdf(pages, print_settings, pdf_print_settings,
-                                     /*raster=*/true);
+    pdf_data = print.PrintPagesAsPdf(pages, print_params_raster);
     CheckPdfDimensions(pdf_data, kExpectedDimensions);
     CheckPdfRendering(pdf_data, 0, kExpectedDimensions[0], kChecksumRaster);
   }
diff --git a/pdf/ppapi_migration/printing_conversions.cc b/pdf/ppapi_migration/printing_conversions.cc
index dda5fe3bf4fdb..119e4b3a30968 100644
--- a/pdf/ppapi_migration/printing_conversions.cc
+++ b/pdf/ppapi_migration/printing_conversions.cc
@@ -9,7 +9,12 @@
 #include <vector>
 
 #include "base/check.h"
+#include "pdf/ppapi_migration/geometry_conversions.h"
+#include "ppapi/c/dev/pp_print_settings_dev.h"
 #include "ppapi/c/dev/ppp_printing_dev.h"
+#include "ppapi/c/private/ppp_pdf.h"
+#include "printing/mojom/print.mojom.h"
+#include "third_party/blink/public/web/web_print_params.h"
 
 namespace chrome_pdf {
 
@@ -29,4 +34,21 @@ std::vector<int> PageNumbersFromPPPrintPageNumberRange(
   return page_numbers;
 }
 
+blink::WebPrintParams WebPrintParamsFromPPPrintSettings(
+    const PP_PrintSettings_Dev& print_settings,
+    const PP_PdfPrintSettings_Dev& pdf_print_settings) {
+  blink::WebPrintParams params;
+  params.print_content_area = RectFromPPRect(print_settings.content_area);
+  params.printable_area = RectFromPPRect(print_settings.printable_area);
+  params.paper_size = SizeFromPPSize(print_settings.paper_size);
+  params.printer_dpi = print_settings.dpi;
+  params.scale_factor = pdf_print_settings.scale_factor;
+  params.rasterize_pdf = print_settings.format & PP_PRINTOUTPUTFORMAT_RASTER;
+  params.print_scaling_option =
+      static_cast<printing::mojom::PrintScalingOption>(
+          print_settings.print_scaling_option);
+  params.pages_per_sheet = pdf_print_settings.pages_per_sheet;
+  return params;
+}
+
 }  // namespace chrome_pdf
diff --git a/pdf/ppapi_migration/printing_conversions.h b/pdf/ppapi_migration/printing_conversions.h
index b19a225f47b93..d8f9b032879c3 100644
--- a/pdf/ppapi_migration/printing_conversions.h
+++ b/pdf/ppapi_migration/printing_conversions.h
@@ -10,6 +10,12 @@
 #include <vector>
 
 struct PP_PrintPageNumberRange_Dev;
+struct PP_PrintSettings_Dev;
+struct PP_PdfPrintSettings_Dev;
+
+namespace blink {
+struct WebPrintParams;
+}  // namespace blink
 
 namespace chrome_pdf {
 
@@ -17,6 +23,10 @@ std::vector<int> PageNumbersFromPPPrintPageNumberRange(
     const PP_PrintPageNumberRange_Dev* page_ranges,
     uint32_t page_range_count);
 
+blink::WebPrintParams WebPrintParamsFromPPPrintSettings(
+    const PP_PrintSettings_Dev& print_settings,
+    const PP_PdfPrintSettings_Dev& pdf_print_settings);
+
 }  // namespace chrome_pdf
 
 #endif  // PDF_PPAPI_MIGRATION_PRINTING_CONVERSIONS_H_