diff -up cups-1.4.1/filter/pstops.c.page-label cups-1.4.1/filter/pstops.c --- cups-1.4.1/filter/pstops.c.page-label 2009-10-02 12:33:33.410719651 +0100 +++ cups-1.4.1/filter/pstops.c 2009-10-02 12:34:11.399594180 +0100 @@ -108,6 +108,7 @@ typedef struct /**** Document informa int num_options; /* Number of document-wide options */ cups_option_t *options; /* Document-wide options */ int normal_landscape, /* Normal rotation for landscape? */ + orientation, /* Original orientation of the document */ saw_eof, /* Saw the %%EOF comment? */ slow_collate, /* Collate copies by hand? */ slow_duplex, /* Duplex pages slowly? */ @@ -2048,7 +2049,7 @@ do_setup(pstops_doc_t *doc, /* I - Docu * of the pages... */ - if (Orientation & 1) + if (doc->orientation & 1) write_label_prolog(doc, doc->page_label, PageBottom, PageWidth - PageLength + PageTop, PageLength); else @@ -2056,7 +2057,30 @@ do_setup(pstops_doc_t *doc, /* I - Docu PageLength); } else - write_label_prolog(doc, doc->page_label, PageBottom, PageTop, PageWidth); + { + switch (doc->orientation) + { + case 0 : + write_label_prolog(doc, doc->page_label, PageBottom, PageTop, + PageWidth); + break; + + case 1 : + write_label_prolog(doc, doc->page_label, PageLeft, PageRight, + PageLength); + break; + + case 2 : + write_label_prolog(doc, doc->page_label, PageLength - PageTop, + PageLength - PageBottom, PageWidth); + break; + + case 3 : + write_label_prolog(doc, doc->page_label, PageWidth - PageRight, + PageWidth - PageLeft, PageLength); + break; + } + } } @@ -2141,7 +2165,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum case 1 : if (doc->use_ESPshowpage) { - write_labels(doc, Orientation); + write_labels(doc, doc->orientation); doc_puts(doc, "ESPshowpage\n"); } break; @@ -2156,7 +2180,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum * Rotate the labels back to portrait... */ - write_labels(doc, Orientation - 1); + write_labels(doc, doc->orientation - 1); } else if (Orientation == 0) { @@ -2182,7 +2206,7 @@ end_nup(pstops_doc_t *doc, /* I - Docum default : if (is_last_page(number) && doc->use_ESPshowpage) { - write_labels(doc, Orientation); + write_labels(doc, doc->orientation); doc_puts(doc, "ESPshowpage\n"); } break; @@ -2385,6 +2409,12 @@ set_pstops_options( doc->new_bounding_box[3] = INT_MIN; /* + * Save original orientation of the document + */ + + doc->orientation = Orientation; + + /* * AP_FIRSTPAGE_InputSlot */