void FillInDictionaryFromPdfPrintSettings()

in libcef/browser/printing/print_view_manager.cc [56:133]


void FillInDictionaryFromPdfPrintSettings(
    const CefPdfPrintSettings& pdf_settings,
    int request_id,
    base::DictionaryValue& print_settings) {
  // Fixed settings.
  print_settings.SetIntKey(kSettingPrinterType,
                           static_cast<int>(mojom::PrinterType::kPdf));
  print_settings.SetInteger(kSettingColor,
                            static_cast<int>(mojom::ColorModel::kGray));
  print_settings.SetInteger(kSettingDuplexMode,
                            static_cast<int>(mojom::DuplexMode::kSimplex));
  print_settings.SetInteger(kSettingCopies, 1);
  print_settings.SetBoolean(kSettingCollate, false);
  print_settings.SetString(kSettingDeviceName, "");
  print_settings.SetBoolean(kSettingRasterizePdf, false);
  print_settings.SetBoolean(kSettingPreviewModifiable, false);
  print_settings.SetInteger(kSettingDpiHorizontal, 0);
  print_settings.SetInteger(kSettingDpiVertical, 0);
  print_settings.SetInteger(kSettingPagesPerSheet, 1);

  // User defined settings.
  print_settings.SetBoolean(kSettingLandscape, !!pdf_settings.landscape);
  print_settings.SetBoolean(kSettingShouldPrintSelectionOnly,
                            !!pdf_settings.selection_only);
  print_settings.SetBoolean(kSettingShouldPrintBackgrounds,
                            !!pdf_settings.backgrounds_enabled);
  print_settings.SetBoolean(kSettingHeaderFooterEnabled,
                            !!pdf_settings.header_footer_enabled);
  print_settings.SetInteger(kSettingScaleFactor, pdf_settings.scale_factor > 0
                                                     ? pdf_settings.scale_factor
                                                     : 100);

  if (pdf_settings.header_footer_enabled) {
    print_settings.SetString(
        kSettingHeaderFooterTitle,
        CefString(&pdf_settings.header_footer_title).ToString16());
    print_settings.SetString(
        kSettingHeaderFooterURL,
        CefString(&pdf_settings.header_footer_url).ToString16());
  }

  if (pdf_settings.page_width > 0 && pdf_settings.page_height > 0) {
    std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
    dict->SetInteger(kSettingMediaSizeWidthMicrons, pdf_settings.page_width);
    dict->SetInteger(kSettingMediaSizeHeightMicrons, pdf_settings.page_height);
    print_settings.Set(kSettingMediaSize, std::move(dict));
  }

  auto margin_type = printing::mojom::MarginType::kDefaultMargins;
  switch (pdf_settings.margin_type) {
    case PDF_PRINT_MARGIN_NONE:
      margin_type = printing::mojom::MarginType::kNoMargins;
      break;
    case PDF_PRINT_MARGIN_MINIMUM:
      margin_type = printing::mojom::MarginType::kPrintableAreaMargins;
      break;
    case PDF_PRINT_MARGIN_CUSTOM:
      margin_type = printing::mojom::MarginType::kCustomMargins;
      break;
    default:
      break;
  }

  print_settings.SetInteger(kSettingMarginsType, static_cast<int>(margin_type));
  if (margin_type == printing::mojom::MarginType::kCustomMargins) {
    std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
    dict->SetInteger(kSettingMarginTop, pdf_settings.margin_top);
    dict->SetInteger(kSettingMarginRight, pdf_settings.margin_right);
    dict->SetInteger(kSettingMarginBottom, pdf_settings.margin_bottom);
    dict->SetInteger(kSettingMarginLeft, pdf_settings.margin_left);
    print_settings.Set(kSettingMarginsCustom, std::move(dict));
  }

  // Service settings.
  print_settings.SetInteger(kPreviewUIID, PREVIEW_UIID);
  print_settings.SetInteger(kPreviewRequestID, request_id);
  print_settings.SetBoolean(kIsFirstRequest, request_id != 0);
}