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);
}