diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2007-10-11 10:18:58 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2007-10-11 10:18:58 (GMT) |
commit | 459160ed87739fa5bba5e96d0b53c6fd3bbce6b7 (patch) | |
tree | 5e597a016d85d57331d300cad5ac130c4c515cfc /backend/pdf/ev-poppler.cc | |
parent | c5de241a3ab5fd9557326bd7135dfb550223f974 (diff) |
When printing multiple pages per sheet in reverse option, do not invert
2007-10-11 Carlos Garcia Campos <carlosgc@gnome.org>
* backend/pdf/ev-poppler.cc:
(pdf_document_file_exporter_begin_page),
(pdf_document_file_exporter_do_page),
(pdf_document_file_exporter_end_page),
(pdf_document_file_exporter_iface_init):
* libdocument/ev-file-exporter.[ch]:
(ev_file_exporter_begin_page), (ev_file_exporter_end_page):
* shell/ev-jobs.c: (ev_job_print_get_page_list),
(ev_job_print_run):
When printing multiple pages per sheet in reverse option, do not
invert the order of the pages in every sheet, but the order of the
sheets. Do not print blank pages when page range is invalid. Fixes
bugs #484857 and #485521.
svn path=/trunk/; revision=2700
Diffstat (limited to 'backend/pdf/ev-poppler.cc')
-rw-r--r-- | backend/pdf/ev-poppler.cc | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/backend/pdf/ev-poppler.cc b/backend/pdf/ev-poppler.cc index 9ccfd22..4a78341 100644 --- a/backend/pdf/ev-poppler.cc +++ b/backend/pdf/ev-poppler.cc @@ -1593,6 +1593,29 @@ pdf_document_file_exporter_begin (EvFileExporter *exporter, } static void +pdf_document_file_exporter_begin_page (EvFileExporter *exporter) +{ + PdfDocument *pdf_document = PDF_DOCUMENT (exporter); + PdfPrintContext *ctx = pdf_document->print_ctx; + + g_return_if_fail (pdf_document->print_ctx != NULL); + + ctx->pages_printed = 0; + + if (ctx->paper_width > ctx->paper_height) { + if (ctx->format == EV_FILE_FORMAT_PS) { + cairo_ps_surface_set_size (cairo_get_target (ctx->cr), + ctx->paper_height, + ctx->paper_width); + } else if (ctx->format == EV_FILE_FORMAT_PDF) { + cairo_pdf_surface_set_size (cairo_get_target (ctx->cr), + ctx->paper_height, + ctx->paper_width); + } + } +} + +static void pdf_document_file_exporter_do_page (EvFileExporter *exporter, EvRenderContext *rc) { @@ -1630,9 +1653,6 @@ pdf_document_file_exporter_do_page (EvFileExporter *exporter, width = ctx->paper_height; height = ctx->paper_width; rotate = !rotate; - - cairo_ps_surface_set_size (cairo_get_target (ctx->cr), - width, height); } else { width = ctx->paper_width; height = ctx->paper_height; @@ -1653,7 +1673,6 @@ pdf_document_file_exporter_do_page (EvFileExporter *exporter, tmp2 = page_width; page_width = page_height; page_height = tmp2; - } pwidth = width / ctx->pages_x; @@ -1703,9 +1722,6 @@ pdf_document_file_exporter_do_page (EvFileExporter *exporter, ctx->pages_printed++; - if (ctx->pages_printed % ctx->pages_per_sheet == 0) { - cairo_show_page (ctx->cr); - } cairo_restore (ctx->cr); #else /* HAVE_CAIRO_PRINT */ if (ctx->format == EV_FILE_FORMAT_PS) @@ -1716,6 +1732,17 @@ pdf_document_file_exporter_do_page (EvFileExporter *exporter, } static void +pdf_document_file_exporter_end_page (EvFileExporter *exporter) +{ + PdfDocument *pdf_document = PDF_DOCUMENT (exporter); + PdfPrintContext *ctx = pdf_document->print_ctx; + + g_return_if_fail (pdf_document->print_ctx != NULL); + + cairo_show_page (ctx->cr); +} + +static void pdf_document_file_exporter_end (EvFileExporter *exporter) { PdfDocument *pdf_document = PDF_DOCUMENT (exporter); @@ -1753,7 +1780,9 @@ static void pdf_document_file_exporter_iface_init (EvFileExporterIface *iface) { iface->begin = pdf_document_file_exporter_begin; + iface->begin_page = pdf_document_file_exporter_begin_page; iface->do_page = pdf_document_file_exporter_do_page; + iface->end_page = pdf_document_file_exporter_end_page; iface->end = pdf_document_file_exporter_end; iface->get_capabilities = pdf_document_file_exporter_get_capabilities; } |