Menggunakan skrip shell sebagai printer virtual

10

Saya memiliki skrip shell yang mengambil file PDF sebagai argumen dan mencetaknya dengan opsi spesifik printer tambahan. Bagaimana saya bisa menambahkan skrip ini sebagai printer virtual yang dapat dipilih dari GUI?

Skrip shell adalah skrip dupleks manual yang mengambil file PDF, mencetak halaman genap, memberikan prompt pengguna menggunakan zenity meminta pengguna untuk membalik halaman dan kemudian mencetak halaman ganjil.

Alur kerja saya saat ini adalah:

  1. File -> Cetak -> Simpan ke file -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

Apakah ada cara untuk menjadikannya sebagai:

  1. File -> Print -> my_script_as_virtual_printer

Catatan: Ini ada di Linux mint 13 cinnamon. Saya sudah mencoba gnome-manual-duplextetapi tidak berhasil untuk saya.


Dialog GUI dari mana saya dapat mencetak ke file PDF Dialog cetak GTK standar

my_duplex_script

#!/bin/bash

lp_args=
while getopts o: opt
do
    case "$opt" in
        o)  lp_args="$lp_args -o $OPTARG" ;;
        \?) echo >&2 Invalid argument; exit 1 ;;
    esac
done
shift `expr $OPTIND - 1`

file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`

if [ $is_odd -eq 1 ]
then
    #outputting blank
    echo | lp -s -t "$file"-blank
fi

#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"

if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
    #printing odd reversed
    lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
    echo >&2 User abort
    exit 1
fi

exit 0
pengguna80551
sumber

Jawaban:

2

Saya belum pernah mencoba ini tetapi ada alat bernama tea4cupsyang terdengar seperti Anda bisa menerapkan prehook ke skrip Anda yang akan melakukan pencetakan. Anda kemudian dapat membatalkan pencetakan ini dan tidak benar-benar pergi ke printer nyata melalui cangkir, memungkinkan skrip Anda untuk melakukan pencetakan sebagai gantinya.

kutipan

Kemungkinannya tidak terbatas:

  • Kirim pekerjaan yang sama ke beberapa printer secara bersamaan, yang tidak mungkin dilakukan dengan CUPS.
  • Otomatis pengarsipan PDF dari semua pekerjaan cetak.
  • Melarang pekerjaan cetak rangkap (contoh sederhana ditunjukkan dalam file konfigurasi sampel)
  • Buat solusi akuntansi cetak dalam 15 menit (YA, INI ADALAH NYATA)
  • dll ...

Tea4cups menyediakan fasilitas berikut:

Tea4CUPS menyediakan tiga cara untuk meluncurkan perintah:

  • filter: Sebuah filter dapat memodifikasi data input sebelum dikirim ke printer atau tersedia untuk kait sebelum dan sesudah didefinisikan di bawah ini. Saat ini satu filter dapat didefinisikan per antrian cetak.
  • prapengambilan: ini dijamin akan diluncurkan sebelum pekerjaan cetak dikirim ke printer asli. Prehook apa pun yang keluar -1 dapat membatalkan pekerjaan cetak. Sejumlah prehooks dapat ditentukan untuk antrian cetak tertentu.
  • posthooks: ini dijamin akan diluncurkan setelah pekerjaan cetak dikirim ke printer asli, kecuali pekerjaan itu sebelumnya dibatalkan oleh prehook. Sejumlah posthook dapat didefinisikan untuk antrian cetak tertentu.
slm
sumber
2

Bagaimana saya bisa menambahkan skrip ini sebagai printer virtual yang dapat dipilih dari GUI?

Untuk memasang printer virtual, cukup edit file Anda /etc/printcap. Ini tidak mudah, karena sintaks PRINTCAP perlu membiasakan diri.

Contoh cara melakukannya ditunjukkan di sini Layanan PDF dengan Samba :

# /etc/printcap
# PDF Service entry

lp|pdf|PDF Printer:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/pdf:\
        :af=/var/spool/lpd/pdf/acct:\
        :mx#0:sh:\
        :if=/usr/bin/smbprint:

Di sini /usr/bin/smbprintskrip digunakan sebagai filter cetak. Printer itu sendiri /dev/null.

Mungkin Anda harus menginstal cups-bsd, tetapi seringkali konfigurasi default.


sumber
Perhatikan bahwa printcapini adalah file konfigurasi untuk BSD lpr atau lprNG, bukan untuk CUPS yang merupakan standar de facto saat ini, dan merupakan standar pada Mint.
Gilles 'SO- stop being evil'
Oleh karena itu saya menyebutkan cups-bsdpaket, yang juga tersedia di Mint, secara default diinstal dan juga didukung. cups-bsdtidak lprng! Ini hanya pembungkus, yang menyediakan fungsionalitas pencetakan BSD untuk Piala untuk mendukung aplikasi yang digunakan lpruntuk mencetak (yaitu xpdf).
0

Terlambat ke pesta, tetapi saya ingin melakukan hal yang sama dan saya tidak menemukan solusi lain.

Saya akan menulis di sini bagaimana saya menyelesaikannya, mungkin orang lain akan menemukan solusi yang bermanfaat.

  • membuat filter untuk gelas untuk menangkap file yang akan dicetak
  • membuat backend untuk mencetak file
  • membuat pemasang yang bagus dan mudah.

kode sumber ada di github: https://github.com/dentys03/manual_duplex_linux

Ini harus bekerja pada semua printer HP. Mudah disesuaikan untuk printer lain, saya kira.

Denis
sumber