void ServerHandler::Browser_PrintToPDF()

in remote/ServerHandler.cpp [886:949]


void ServerHandler::Browser_PrintToPDF(
    const int32_t bid,
    const std::string& path,
    const std::map<std::string, std::string>& pdfPrintSettings,
    const thrift_codegen::RObject& pdfPrintCallback) {
  MEASURE;
  if (doTraceBrowser && Log::isTraceEnabled())
    Log::trace("ServerHandler: Browser_PrintToPDF, bid=%d", bid);
  GET_BROWSER_OR_RETURN()

  CefRefPtr<RemotePdfPrintCallback> callback = new RemotePdfPrintCallback(myCtx, pdfPrintCallback);
  if (!browser.get()) {
    callback->OnPdfPrintFinished(CefString(path), false);
    return;
  }

  CefPdfPrintSettings settings;
  for (const auto & kv: pdfPrintSettings) {
    if (kv.first.compare("landscape") == 0)
      setFieldValueB(settings.landscape, kv.second);
    else if (kv.first.compare("print_background") == 0)
      setFieldValueB(settings.print_background, kv.second);
    else if (kv.first.compare("scale") == 0)
      setFieldValueD(settings.scale, kv.second);
    else if (kv.first.compare("paper_width") == 0)
      setFieldValueD(settings.paper_width, kv.second);
    else if (kv.first.compare("paper_height") == 0)
      setFieldValueD(settings.paper_height, kv.second);
    else if (kv.first.compare("prefer_css_page_size") == 0)
      setFieldValueB(settings.prefer_css_page_size, kv.second);
    else if (kv.first.compare("margin_type") == 0) {
      settings.margin_type = PDF_PRINT_MARGIN_DEFAULT;
      if (kv.second.find("NONE") != std::string::npos)
        settings.margin_type = PDF_PRINT_MARGIN_NONE;
      else if (kv.second.find("CUSTOM") != std::string::npos)
        settings.margin_type = PDF_PRINT_MARGIN_CUSTOM;
    } else if (kv.first.compare("margin_top") == 0)
      setFieldValueD(settings.margin_top, kv.second);
    else if (kv.first.compare("margin_bottom") == 0)
      setFieldValueD(settings.margin_bottom, kv.second);
    else if (kv.first.compare("margin_right") == 0)
      setFieldValueD(settings.margin_right, kv.second);
    else if (kv.first.compare("margin_left") == 0)
      setFieldValueD(settings.margin_left, kv.second);
    else if (kv.first.compare("page_ranges") == 0) {
      std::string ranges = kv.second;
      CefString(&settings.page_ranges) = ranges;
    } else if (kv.first.compare("display_header_footer") == 0)
      setFieldValueB(settings.display_header_footer, kv.second);
    else if (kv.first.compare("header_template") == 0) {
      std::string templ = kv.second;
      CefString(&settings.header_template) = templ;
    } else if (kv.first.compare("footer_template") == 0) {
      std::string templ = kv.second;
      CefString(&settings.footer_template) = templ;
    }  else if (kv.first.compare("generate_document_outline") == 0) {
      setFieldValueB(settings.generate_document_outline, kv.second);
    }  else if (kv.first.compare("generate_tagged_pdf") == 0) {
      setFieldValueB(settings.generate_tagged_pdf, kv.second);
    }
  }

  browser->GetHost()->PrintToPDF(path, settings, callback);
}