diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 00a0bb464089..66f17029bd54 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -16,6 +16,7 @@ #include "native_mate/callback.h" #include "native_mate/constructor.h" #include "native_mate/dictionary.h" +#include "printing/print_job_constants.h" #include "ui/gfx/geometry/rect.h" #include "atom/common/node_includes.h" @@ -430,8 +431,13 @@ void Window::Print(mate::Arguments* args) { window_->Print(settings.silent, settings.print_background); } -void Window::PrintToPDF() { - window_->PrintToPDF(); +void Window::PrintToPDF(mate::Arguments* args) { + mate::Dictionary options; + if (args->Length() == 1 && !args->GetNext(&options)) { + args->ThrowError(); + return; + } + window_->PrintToPDF(options); } void Window::SetProgressBar(double progress) { diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index 606fda9f7dc3..828ab2ab9014 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -132,7 +132,7 @@ class Window : public mate::EventEmitter, bool IsDocumentEdited(); void CapturePage(mate::Arguments* args); void Print(mate::Arguments* args); - void PrintToPDF(); + void PrintToPDF(mate::Arguments* args); void SetProgressBar(double progress); void SetOverlayIcon(const gfx::Image& overlay, const std::string& description); diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 9b922dc9b5b0..f7616f423666 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -265,9 +265,9 @@ void NativeWindow::Print(bool silent, bool print_background) { PrintNow(silent, print_background); } -void NativeWindow::PrintToPDF() { +void NativeWindow::PrintToPDF(const mate::Dictionary& options) { printing::PrintPreviewMessageHandler::FromWebContents(GetWebContents())-> - HandleGetPreview(NULL); + HandleGetPreview(options); } void NativeWindow::ShowDefinitionForSelection() { diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 5c99a2c117b5..dd10dd1229f2 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -158,7 +158,7 @@ class NativeWindow : public CommonWebContentsDelegate, virtual void Print(bool silent, bool print_background); // Print current page as PDF. - virtual void PrintToPDF(); + virtual void PrintToPDF(const mate::Dictionary& options); // Show popup dictionary. virtual void ShowDefinitionForSelection(); diff --git a/chromium_src/chrome/browser/printing/print_preview_message_handler.cc b/chromium_src/chrome/browser/printing/print_preview_message_handler.cc index c5b59547599b..bb960b2ef75e 100644 --- a/chromium_src/chrome/browser/printing/print_preview_message_handler.cc +++ b/chromium_src/chrome/browser/printing/print_preview_message_handler.cc @@ -199,7 +199,8 @@ bool PrintPreviewMessageHandler::OnMessageReceived( return handled; } -void PrintPreviewMessageHandler::HandleGetPreview(const base::ListValue* args) { +void PrintPreviewMessageHandler::HandleGetPreview( + const mate::Dictionary& options) { static int request_id = 0; request_id++; // A simulated Chromium print preivew setting. @@ -212,7 +213,7 @@ void PrintPreviewMessageHandler::HandleGetPreview(const base::ListValue* args) { \"width_microns\":210000, \ \"custom_display_name\":\"A4\" \ }, \ - \"landscape\":true, \ + \"landscape\":false, \ \"color\":2, \ \"headerFooterEnabled\":false, \ \"marginsType\":0, \ @@ -229,7 +230,7 @@ void PrintPreviewMessageHandler::HandleGetPreview(const base::ListValue* args) { \"duplex\":0, \ \"copies\":1, \ \"collate\":true, \ - \"shouldPrintBackgrounds\":true, \ + \"shouldPrintBackgrounds\":false, \ \"shouldPrintSelectionOnly\":false \ }"; @@ -237,7 +238,26 @@ void PrintPreviewMessageHandler::HandleGetPreview(const base::ListValue* args) { static_cast( base::JSONReader::Read(setting_json_str))); settings->SetInteger(printing::kPreviewRequestID, request_id); + // Default Print PDF settings: + int margins_type = 0; // DEFAULT_MARGINS + bool print_background = false; + bool print_selection_only = false; + bool is_landscape = false; // layout: true for portrait, false for landscape + if (!options.IsEmpty()) { + options.Get(printing::kSettingMarginsType, &margins_type); + options.Get(printing::kSettingShouldPrintBackgrounds, &print_background); + options.Get(printing::kSettingShouldPrintSelectionOnly, + &print_selection_only); + std::string layout; + options.Get("layout", &is_landscape); + } + settings->SetInteger(printing::kSettingMarginsType, margins_type); + settings->SetBoolean(printing::kSettingShouldPrintBackgrounds, + print_background); + settings->SetBoolean(printing::kSettingShouldPrintSelectionOnly, + print_selection_only); + settings->SetBoolean(printing::kSettingLandscape, is_landscape); LOG(ERROR) << "Print preview request start"; content::RenderViewHost* rvh = web_contents()->GetRenderViewHost(); rvh->Send(new PrintMsg_PrintPreview(rvh->GetRoutingID(), *settings)); diff --git a/chromium_src/chrome/browser/printing/print_preview_message_handler.h b/chromium_src/chrome/browser/printing/print_preview_message_handler.h index 8f9f1b4ed230..38943b01b80a 100644 --- a/chromium_src/chrome/browser/printing/print_preview_message_handler.h +++ b/chromium_src/chrome/browser/printing/print_preview_message_handler.h @@ -17,6 +17,10 @@ namespace content { class WebContents; } +namespace mate { +class Dictionary; +} + namespace gfx { class Rect; } @@ -37,8 +41,7 @@ class PrintPreviewMessageHandler // Asks the initiator renderer to generate a preview. First element of |args| // is a job settings JSON string. - void HandleGetPreview(const base::ListValue* args); - + void HandleGetPreview(const mate::Dictionary& options); private: explicit PrintPreviewMessageHandler(content::WebContents* web_contents); friend class content::WebContentsUserData;