Index: gtkprintoperation-private.h
===================================================================
--- gtkprintoperation-private.h	(revision 21513)
+++ gtkprintoperation-private.h	(working copy)
@@ -122,6 +122,8 @@
 								     GtkPageSetup      *page_setup);
 void             _gtk_print_context_translate_into_margin           (GtkPrintContext   *context);
 void             _gtk_print_context_rotate_according_to_orientation (GtkPrintContext   *context);
+void             _gtk_print_context_set_hard_margins                (GtkPrintContext *context,
+							              gdouble top,gdouble bottom,gdouble left,gdouble right);
 
 G_END_DECLS
 
Index: gtkprintoperation-win32.c
===================================================================
--- gtkprintoperation-win32.c	(revision 21513)
+++ gtkprintoperation-win32.c	(working copy)
@@ -1487,6 +1487,7 @@
   HDC hDC = NULL;
   const char *printer = NULL;
   double dpi_x, dpi_y;
+  double hard_top, hard_bottom, hard_left, hard_right;
   int job_id;
   cairo_t *cr;
   DEVNAMES *pdn;
@@ -1555,6 +1556,11 @@
   op_win32->surface = cairo_win32_printing_surface_create (hDC);
   dpi_x = (double) GetDeviceCaps (hDC, LOGPIXELSX);
   dpi_y = (double) GetDeviceCaps (hDC, LOGPIXELSY);
+  hard_top    = (double)GetDeviceCaps(hDC,PHYSICALOFFSETY);
+  hard_bottom = (double)GetDeviceCaps(hDC,PHYSICALHEIGHT)-hard_top;
+  hard_left   = (double)GetDeviceCaps(hDC,PHYSICALOFFSETX);
+  hard_right  = (double)GetDeviceCaps(hDC,PHYSICALWIDTH)-hard_left;
+  _gtk_print_context_set_hard_margins(priv->print_context,hard_top,hard_bottom,hard_left,hard_right);
 
   cr = cairo_create (op_win32->surface);
   gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y);
@@ -1764,6 +1770,7 @@
       DOCINFOW docinfo;
       int job_id;
       double dpi_x, dpi_y;
+      double hard_top, hard_bottom, hard_left, hard_right;
       cairo_t *cr;
       GtkPageSetup *page_setup;
 
@@ -1776,8 +1783,13 @@
 
       op_win32->surface = cairo_win32_printing_surface_create (printdlgex->hDC);
 
-      dpi_x = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSX);
-      dpi_y = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSY);
+      dpi_x       = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSX);
+      dpi_y       = (double)GetDeviceCaps (printdlgex->hDC, LOGPIXELSY);
+      hard_top    = (double)GetDeviceCaps(printdlgex->hDC,PHYSICALOFFSETY);
+      hard_bottom = (double)GetDeviceCaps(printdlgex->hDC,PHYSICALHEIGHT)-hard_top;
+      hard_left   = (double)GetDeviceCaps(printdlgex->hDC,PHYSICALOFFSETX);
+      hard_right  = (double)GetDeviceCaps(printdlgex->hDC,PHYSICALWIDTH)-hard_left;
+      _gtk_print_context_set_hard_margins(priv->print_context,hard_top,hard_bottom,hard_left,hard_right);
 
       cr = cairo_create (op_win32->surface);
       gtk_print_context_set_cairo_context (priv->print_context, cr, dpi_x, dpi_y);
