Index: printing/printing_context_win.cc |
diff --git a/printing/printing_context_win.cc b/printing/printing_context_win.cc |
index c467457eef77b54e5de48ee4a80198a0c08637b8..70a3f91b1e307f6b028f51583cd3c39499548d2c 100644 |
--- a/printing/printing_context_win.cc |
+++ b/printing/printing_context_win.cc |
@@ -17,12 +17,28 @@ |
#include "printing/print_job_constants.h" |
#include "printing/print_settings_initializer_win.h" |
#include "printing/printed_document.h" |
+#include "printing/units.h" |
#include "skia/ext/platform_device.h" |
using base::Time; |
namespace { |
+// Constants for setting default PDF settings. |
+const int kPDFDpi = 300; // 300 dpi |
+// LETTER: 8.5 x 11 inches |
+const int kPDFLetterWidth = 8.5 * kPDFDpi; |
+const int kPDFLetterHeight = 11 * kPDFDpi; |
+// LEGAL: 8.5 x 14 inches |
+const int kPDFLegalWidth = 8.5 * kPDFDpi; |
+const int kPDFLegalHeight = 14 * kPDFDpi; |
+// A4: 8.27 x 11.69 inches |
+const int kPDFA4Width = 8.27 * kPDFDpi; |
+const int kPDFA4Height = 11.69 * kPDFDpi; |
+// A3: 11.69 x 16.54 inches |
+const int kPDFA3Width = 11.69 * kPDFDpi; |
+const int kPDFA3Height = 16.54 * kPDFDpi; |
+ |
// Retrieves the printer's PRINTER_INFO_* structure. |
// Output |level| can be 9 (user-default), 8 (admin-default), or 2 |
// (printer-default). |
@@ -331,7 +347,35 @@ PrintingContext::Result PrintingContextWin::UpdatePrinterSettings( |
bool print_to_cloud = job_settings.HasKey(printing::kSettingCloudPrintId); |
if (print_to_pdf || print_to_cloud) { |
- // Pseudo printer: handle orientation and ranges only. |
+ // Default fallback to Letter size. |
+ gfx::Size paper_size; |
+ gfx::Rect paper_rect; |
+ paper_size.SetSize(kPDFLetterWidth, kPDFLetterHeight); |
+ |
+ // Get settings from locale. Paper type buffer length is at most 4. |
+ const int paper_type_buffer_len = 4; |
+ wchar_t paper_type_buffer[paper_type_buffer_len] = {0}; |
+ GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_IPAPERSIZE, paper_type_buffer, |
+ paper_type_buffer_len); |
+ if (wcslen(paper_type_buffer)) { // The call succeeded. |
+ int paper_code = _wtoi(paper_type_buffer); |
+ switch (paper_code) { |
+ case DMPAPER_LEGAL: |
+ paper_size.SetSize(kPDFLegalWidth, kPDFLegalHeight); |
+ break; |
+ case DMPAPER_A4: |
+ paper_size.SetSize(kPDFA4Width, kPDFA4Height); |
+ break; |
+ case DMPAPER_A3: |
+ paper_size.SetSize(kPDFA3Width, kPDFA3Height); |
+ break; |
+ default: // DMPAPER_LETTER is used for default fallback. |
+ break; |
+ } |
+ } |
+ paper_rect.SetRect(0, 0, paper_size.width(), paper_size.height()); |
+ settings_.SetPrinterPrintableArea(paper_size, paper_rect, kPDFDpi); |
+ settings_.set_dpi(kPDFDpi); |
settings_.SetOrientation(landscape); |
settings_.ranges = ranges; |
return OK; |