Function: ps-end-job

ps-end-job is a byte-compiled function defined in ps-print.el.gz.

Signature

(ps-end-job NEEDS-BEGIN-FILE)

Source Code

;; Defined in /usr/src/emacs/lisp/ps-print.el.gz
(defun ps-end-job (needs-begin-file)
  (let ((ps-print-page-p t))
    (ps-flush-output)
    (save-excursion
      (let ((pages-per-sheet (mod ps-page-printed ps-n-up-printing))
	    (total-lines (cdr ps-printing-region))
	    (total-pages (ps-page-number)))
	(set-buffer ps-spool-buffer)
	(let (case-fold-search)
	  ;; Back to the PS output buffer to set the last page n-up printing
	  (goto-char (point-max))
	  (and (> pages-per-sheet 0)
	       (re-search-backward "^[0-9]+ BeginSheet$" nil t)
	       (replace-match (format "%d BeginSheet" pages-per-sheet) t))
	  ;; Back to the PS output buffer to set the page count
	  (goto-char (point-min))
	  (while (re-search-forward "^/Lines 0 def\n/PageCount 0 def$" nil t)
	    (replace-match (format "/Lines %d def\n/PageCount %d def"
				   total-lines total-pages) t)))))
    ;; Set dummy page
    (and ps-spool-duplex (oddp ps-page-order)
	 (let ((ps-n-up-printing 0))
	   (ps-header-sheet)
	   (ps-output "/PrintHeader false def\n/ColumnIndex 0 def\n"
		      "/PrintLineNumber false def\n"
		      (number-to-string ps-lines-printed) " BeginPage\n")
	   (ps-end-page)))
    ;; Set end of PostScript file
    (ps-end-sheet)
    (ps-output "\n%%Trailer\n%%Pages: "
	       (number-to-string
		(if (and needs-begin-file
			 ps-banner-page-when-duplexing)
		    (1+ ps-page-order)
		  ps-page-order))
	       "\n\nEndDoc\n\n%%EOF\n")
    (and ps-end-with-control-d
	 (ps-output "\C-d"))
    (ps-flush-output))
  ;; disable selected pages
  (setq ps-selected-pages nil))