Index: gnucash-2.0.5/src/report/report-system/html-acct-table.scm
===================================================================
--- gnucash-2.0.5.orig/src/report/report-system/html-acct-table.scm	2007-04-16 17:16:04.065743112 +1000
+++ gnucash-2.0.5/src/report/report-system/html-acct-table.scm	2007-04-16 17:18:09.251711952 +1000
@@ -988,6 +988,11 @@
 ;; Here are some standard functions to help process gnc:html-acct-tables.
 ;; 
 
+(define (gnc:html-make-nbsps n)
+  (if (> n 0)
+      (string-append "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" (gnc:html-make-nbsps (- n 1)))
+      ""))
+
 ;; Stylesheets define the following cell styles which these functions
 ;; use: "text-cell" "total-label-cell" "number-cell"
 ;; "total-number-cell".  Row styles include "normal-row",
@@ -1024,16 +1029,15 @@
 	 (tbl-width (or table-width (+ amt-depth amt-colspan)))
 	 (row
 	  (append
-	   (gnc:html-make-empty-cells lbl-depth)  ;; padding before label
 	   (list
 	    (if label-markup                      ;; the actual label
 		(gnc:make-html-table-cell/size/markup
-		 1 lbl-colspan label-markup label)
+		 1 1 label-markup (gnc:make-html-text (gnc:html-make-nbsps lbl-depth)) label)
 		(gnc:make-html-table-cell/size
-		 1 lbl-colspan label))
+		 1 1 (gnc:make-html-text (gnc:html-make-nbsps lbl-depth)) label))
 	    )
 	   (gnc:html-make-empty-cells             ;; padding after label
-            (+ (- amt-depth (+ lbl-depth lbl-colspan))
+            (+ (- amt-depth (/ tbl-width 2))
                (if total-rule? -1 0)
                )
             )
Index: gnucash-2.0.5/src/gnome-utils/print-session.c
===================================================================
--- gnucash-2.0.5.orig/src/gnome-utils/print-session.c	2007-04-16 17:16:04.066742960 +1000
+++ gnucash-2.0.5/src/gnome-utils/print-session.c	2007-04-16 17:16:07.576209440 +1000
@@ -29,6 +29,35 @@
 
 #include "print-session.h"
 
+static void gnc_print_session_fontsel_cb(GtkButton *widget, gpointer user_data)
+{
+  PrintSession *ps = (PrintSession *)user_data;
+  GtkWidget *dialog;
+  gint response;
+
+  dialog = gtk_font_selection_dialog_new("GnuCash Print Font");
+  if (ps->pango_font_string == NULL) {
+    GtkStyle *style = gtk_style_new();
+    ps->pango_font_string = pango_font_description_to_string(style->font_desc);
+    g_object_unref(style);
+  }
+  if (ps->pango_font_string != NULL)
+      gtk_font_selection_dialog_set_font_name((GtkFontSelectionDialog *)dialog, ps->pango_font_string);
+
+  response = gtk_dialog_run(GTK_DIALOG(dialog));
+  gtk_widget_destroy(dialog);
+
+  switch (response) {
+    case GTK_RESPONSE_OK:
+      g_free(ps->pango_font_string);
+      ps->pango_font_string = gtk_font_selection_dialog_get_font_name((GtkFontSelectionDialog *)dialog);
+      gnc_gconf_set_string(NULL, "pango_font_string", ps->pango_font_string, NULL);
+      break;
+
+    default:
+      break;
+  }
+}
 
 PrintSession * 
 gnc_print_session_create(gboolean hand_built_pages)
@@ -36,30 +65,40 @@ gnc_print_session_create(gboolean hand_b
   PrintSession * ps = g_new0(PrintSession, 1);
   GnomePrintConfig *config;
   GtkWidget *dialog;
+  GtkWidget *button;
   gint response;
 
+  ps->default_font = NULL;
+  ps->pango_font_string = gnc_gconf_get_string (NULL, "pango_font_string", NULL);
+
   /* Ask the user what to do with the output */
   config = gnome_print_config_default();
   ps->job = gnome_print_job_new(config);
   g_object_unref(config);
   dialog = gnome_print_dialog_new(ps->job, (guchar *) _("Print GnuCash Document"), 0);
+
+  button = gtk_button_new_from_stock(GTK_STOCK_SELECT_FONT);
+  g_signal_connect(button, "clicked", G_CALLBACK(gnc_print_session_fontsel_cb), ps);
+  gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->action_area), button);
+  gtk_button_box_set_child_secondary((GtkButtonBox *)GTK_DIALOG(dialog)->action_area, button, TRUE);
+  gtk_widget_show(button); /* shouldn't be needed but is */
+
   response = gtk_dialog_run(GTK_DIALOG(dialog));
+  gtk_widget_destroy(dialog);
+
   switch (response) {
     case GNOME_PRINT_DIALOG_RESPONSE_PRINT: 
     case GNOME_PRINT_DIALOG_RESPONSE_PREVIEW:
-      gtk_widget_destroy(dialog);
-      ps->context = gnome_print_job_get_context(ps->job);
       break;
-    
+
     default:
-      gtk_widget_destroy(dialog);
-      g_object_unref(ps->job);
-      g_free(ps);
+      gnc_print_session_destroy(ps);
       return NULL;
   }
 
   ps->hand_built_pages = hand_built_pages;
   ps->print_type = response;
+  ps->context = gnome_print_job_get_context(ps->job);
 
   ps->default_font = gnome_font_find_closest((guchar *)"Sans Regular", 12);
 
@@ -75,7 +114,9 @@ void 
 gnc_print_session_destroy(PrintSession * ps)
 {
   g_object_unref(ps->job);
-  g_object_unref(ps->default_font);
+  if (ps->default_font != NULL)
+    g_object_unref(ps->default_font);
+  g_free(ps->pango_font_string);
 
   g_free(ps);
 }
@@ -117,6 +158,7 @@ gnc_print_session_done(PrintSession * ps
     default:
       break;
   }
+  gnc_print_session_destroy(ps);
 }
 
 void
Index: gnucash-2.0.5/src/gnome-utils/gnc-html.c
===================================================================
--- gnucash-2.0.5.orig/src/gnome-utils/gnc-html.c	2007-04-16 17:16:04.066742960 +1000
+++ gnucash-2.0.5/src/gnome-utils/gnc-html.c	2007-04-16 17:16:07.577209288 +1000
@@ -1314,10 +1314,21 @@ gnc_html_export(gnc_html * html, const c
   return TRUE;
 }
 
+static GtkHTML *
+gnc_html_get_top_html (GtkHTML *html)
+{
+  while (html->iframe_parent)
+    html = GTK_HTML (html->iframe_parent);
+
+  return html;
+}
+
 void
 gnc_html_print(gnc_html * html)
 {
   PrintSession *ps;
+  GtkWidget *top_level;
+  PangoFontDescription *fontdesc;
 
   ps = gnc_print_session_create(FALSE);
   if (ps == NULL) {
@@ -1325,7 +1336,21 @@ gnc_html_print(gnc_html * html)
     return;
   }
 
+  top_level = GTK_WIDGET (gnc_html_get_top_html (GTK_HTML(html->html)));
+
+  if (ps->pango_font_string != NULL) {
+    fontdesc = pango_font_description_from_string(ps->pango_font_string);
+    gtk_widget_modify_font(top_level, fontdesc);
+    pango_font_description_free(fontdesc);
+  }
+
+  gtk_html_print_set_master(GTK_HTML(html->html), ps->job);
   gtk_html_print(GTK_HTML(html->html), ps->context);
+
+  if (ps->pango_font_string != NULL) {
+    gtk_widget_modify_font(top_level, NULL);
+  }
+
   gnc_print_session_done(ps);
 }
 
Index: gnucash-2.0.5/src/gnome-utils/print-session.h
===================================================================
--- gnucash-2.0.5.orig/src/gnome-utils/print-session.h	2007-04-16 17:16:04.066742960 +1000
+++ gnucash-2.0.5/src/gnome-utils/print-session.h	2007-04-16 17:16:07.577209288 +1000
@@ -43,6 +43,7 @@ typedef struct {
   GnomePrintJob      * job;
   GnomePrintContext  * context;		/* Convenience only. Owned by the job */
   GnomeFont          * default_font;
+  guchar             * pango_font_string;
 } PrintSession;
 
 
