diff --git a/cups-pdf-postprocess.py b/cups-pdf-postprocess.py index 4ae7c170cacf87585b1a5e4860cd71cad2832520..cc5dd1d9a5119ac3ee35681908611512edfa111e 100755 --- a/cups-pdf-postprocess.py +++ b/cups-pdf-postprocess.py @@ -12,6 +12,7 @@ from PyQt5.QtCore import * import sys import subprocess as sp import ast +import os def exec_pipeline(pipeline, inp, out = None, err_callback = None): def make_proc(cmd): @@ -79,6 +80,32 @@ class CPP(QWidget): o.setWordWrap(True) vbox.addWidget(o) + hbox = QHBoxLayout() + self._compact = QCheckBox('Compact', self) + self._compact_copies = QSpinBox(self) + self._compact_copies.setMinimum(1) + self._compact_copies.setMaximum(1000) + self._compact_copies.setSingleStep(1) + self._compact_copies.setValue(1) + self._compact_copies.setEnabled(False) + + def _compact_changed(enabled): + self._pdfbook.setEnabled(not enabled) + self._compact_copies.setEnabled(enabled) + if enabled: + self._duplex.setCurrentIndex(1) + self._pdfbook.setChecked(False) + _pdfbook_changed(False) + else: + self._compact_copies.setValue(1) + self._duplex.setEnabled(not enabled) + + self._compact.clicked[bool].connect(_compact_changed) + + hbox.addWidget(self._compact) + hbox.addWidget(self._compact_copies) + vbox.addLayout(hbox) + hbox = QHBoxLayout() hbox.addWidget(QLabel("Duplex:")) self._duplex = QComboBox(self) @@ -143,6 +170,10 @@ class CPP(QWidget): if self._pdfbook.isChecked(): pipeline.append([ "pdfbook", "/dev/stdin", "-o", "/dev/stdout" ]) + if self._compact.isChecked(): + pipeline.append([ "%s/%s" % (os.path.dirname(os.path.realpath(sys.argv[0])), "print_compact.sh"), + "%i" % self._compact_copies.value() ]) + if self._printer.currentData() is SAVE_AS_FILE: f = QFileDialog.getSaveFileName(self, 'Save as ...') if not f[0]: diff --git a/print_compact.sh b/print_compact.sh new file mode 100755 index 0000000000000000000000000000000000000000..a959237680451c5aba0d2aa9eb8a337b7f334f6c --- /dev/null +++ b/print_compact.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +COPIES="${1:-1}" +PDF="`xxd -p`" +PAGES=`xxd -p -r <<<"$PDF" | pdfinfo - | sed -nre 's/Pages:\s*(.*)/\1/p'` + +if (( PAGES <= 2)); then + : $(( COPIES = (COPIES + 1) / 2 )) +fi + +xxd -p -r <<<"$PDF" | +case $PAGES in + 1) pdfjam --nup 2x1 --landscape --doublepagestwistodd\* true -o /dev/stdout /dev/stdin 1,'{}';; + 2) pdfjam --nup 2x1 --landscape --doublepagestwistodd\* true -o /dev/stdout /dev/stdin 1,2;; + *) pdfbook -o /dev/stdout /dev/stdin;; +esac | pdfjoin -o /dev/stdout /dev/stdin `python -c "print(','.join(['-']*$COPIES))"` +