+ first_page = ev_print_job_get_first_page (job);
+ last_page = ev_print_job_get_last_page (job);
+
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_begin (EV_FILE_EXPORTER (document),
+ g_ascii_strcasecmp (job->format, "pdf") == 0 ?
+ EV_FILE_FORMAT_PDF : EV_FILE_FORMAT_PS,
+ job->temp_file,
+ MIN (first_page, last_page),
+ MAX (first_page, last_page),
+ job->width, job->height, FALSE);
+ ev_document_doc_mutex_unlock ();
+
+ for (i = 0; i < job->copies; i++) {
+ gint page, step;
+
+ step = job->reverse ? -1 : 1;
+ page = job->reverse ? last_page : first_page;
+
+ while ((job->reverse && (page >= first_page)) ||
+ (!job->reverse && (page <= last_page))) {
+ gint n_pages = 1;
+ gint j;
+
+ if (job->n_ranges > 0 &&
+ !ev_print_job_print_page_in_range (job, page)) {
+ page += step;
+ continue;
+ }
+
+ if (!ev_print_job_print_page_in_set (job, page + 1)) {
+ page += step;
+ continue;
+ }
+
+ if (job->collate)
+ n_pages = job->copies;
+
+ for (j = 0; j < n_pages; j++) {
+ ev_document_doc_mutex_lock ();
+ ev_job_print_do_page (job, page);
+ ev_document_doc_mutex_unlock ();
+ }
+
+ page += step;
+ }
+
+ if (job->collate)
+ break;
+ }
+
+ ev_document_doc_mutex_lock ();
+ ev_file_exporter_end (EV_FILE_EXPORTER (document));