Perangkat lunak "Cetak nanti"

12

Kadang-kadang ketika saya sedang mengerjakan laptop saya, saya ingin mengantri beberapa dokumen untuk dicetak nanti, karena saya tidak terhubung ke printer pada saat itu.

Namun, antrian printer yang sebenarnya tidak dirancang untuk ini; mereka segera mencoba untuk mencetak dokumen, dan semua tiba-tiba mulai mencetak segera setelah saya masuk ke jaringan, yang umumnya tidak ingin saya lakukan. Selain itu, kadang-kadang saya ingin mengubah urutan dokumen dalam antrian, yang tidak terlalu mudah, terutama sekali beberapa dari mereka sudah mulai mencetak.

Juga, kadang-kadang pencetakan gagal karena mis. Printer kehabisan kertas atau toner, dan saya ingin mencetak ulang dokumen ke printer yang berbeda. Ini tidak langsung dengan misalnya CUPSatau system-config-printer; Saya biasanya harus kembali, membuka kembali pembaca PDF, dan memulai lagi. Tidak satu pun dari pembaca PDF yang saya tahu membiarkan Anda menyimpan daftar dokumen untuk dicetak nanti, tetapi ini mungkin fitur tersembunyi dari pembaca PDF di suatu tempat yang saya tidak tahu.

Bagaimanapun, inilah yang saya ingin dapat lakukan:

  • Tentukan daftar PDF yang ingin saya cetak.
  • Simpan daftar itu di disk sehingga saya bisa menutup aplikasi atau reboot tanpa kehilangan seluruh daftar.
  • Tentukan printer yang ingin saya kirimi mereka sebelum benar-benar terhubung ke printer-printer itu pada saat itu.
  • Tentukan opsi pencetakan seperti warna, dupleks, dan jumlah salinan.
  • Ubah penugasan printer dan opsi cetak nanti.
  • Tunggu sampai saya menekan tombol atau menjalankan perintah untuk benar-benar mencetak dokumen.
  • Simpan daftar dokumen terpisah yang sudah dicetak, kalau-kalau pencetakan tidak berfungsi atau saya ingin mencetaknya lagi nanti.

Saya tahu saya bisa meretas sesuatu bersama dengan skrip shell lpr,, dan daftar jalur dalam file teks, tetapi saya tidak dapat menahan perasaan bahwa masalah ini telah diselesaikan dengan cara yang lebih kuat dan elegan.

Poin bonus:

  • Jangan mengharuskan dokumen dibuka di pembaca PDF. Saya ingin mencetaknya, tidak menjelajahinya, dan tidak ada alasan mereka harus aplikasi yang sama.
  • Lebih dari satu daftar.
  • Juga berfungsi untuk Postscript, DjVu, dan format deskripsi halaman lainnya.
  • Seret dan lepas dari pengelola file.

Ada saran?

Nathaniel M. Beaver
sumber
Mulai hadiah jika Anda memiliki reputasi yang cukup;)
AB
Sejauh yang saya bisa lihat, ini hanya memerlukan modifikasi sederhana dari antrian printer seperti yang saat ini diterapkan oleh cups. Anda cukup mencetak ke antrian printer yang diinginkan, tetapi menunda pekerjaan printer "sampai Anda memutuskan untuk" melepaskan "mereka. Tombol "ditahan" adalah semua yang diperlukan. Atau apakah saya melewatkan sesuatu?
Jos
@ Jo Versi saya system-config-printer-appletmemang memungkinkan saya untuk menahan dan melepaskan pekerjaan cetak serta memindahkannya ke printer lain, tetapi saya tidak dapat mengubah urutan pekerjaan cetak atau mengubah opsi pencetakan setelah mengirimkan pekerjaan. Juga, pada saat itu jalur ke dokumen asli sudah lama hilang.
Nathaniel M. Beaver
@ AB Sayangnya karunia membutuhkan 75 poin internet, dan saya adalah 53-pointer yang rendah.
Nathaniel M. Beaver

Jawaban:

10

Apa yang saya lakukan adalah sebagai berikut --- ini tidak serbaguna seperti yang Anda minta, tetapi bekerja hampir ok. Anda perlu menentukan semua printer Anda, dan kemudian Anda membutuhkan dua skrip ini:

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

Anda harus meletakkannya di jalur Anda (misalnya ~/bin) dan membuatnya dapat dieksekusi chmod +x. CAVEAT : Saya tidak punya printer dengan spasi di namanya. Skrip tidak diuji dalam kasus itu (tapi saya yakin bahwa salah satu guru skrip shell kami akan memperbaiki skrip dalam sekejap; -) ...)

Sekarang, Anda dapat menerbitkan:

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

Dan Anda dapat mencetak dari mana pun Anda inginkan, printer akan dijeda:

printer dari evince

Anda dapat melihat antrian Anda:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(AFAIK, antrian cetak persisten di seluruh reboot). Dan ketika Anda ingin mencetak:

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

Menggunakan lprmAnda dapat menghapus pekerjaan jika perlu; lpruntuk mengirim dokumen melalui baris perintah, dan jika Anda ingin "daftar" yang berbeda, tidak ada yang melarang mendefinisikan printer yang sama beberapa kali dengan nama yang berbeda.

Anda juga dapat melanjutkan setiap printer dengan tangan, itu hanya masalah menjalankan cupsenable <printername>dari prompt.

Apa yang saya pikir tidak dapat Anda lakukan dengan solusi ini adalah mengubah opsi cetak setelah fakta --- Anda harus melakukan dequeue dan re-enqueue dokumen untuk ini.

Rmano
sumber
2
1 Baik, Namun, saat Anda mungkin memiliki alasan Anda, mengisi array Anda dapat dibuat lebih sederhana dengan menggunakan pembatas yang tepat dalam cutporsi: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Anda menghemat waktu siklus dengan menyingkirkan terjemahan tr. Ini berfungsi asalkan Anda hanya perlu bidang pertama Anda.
Cbhihe
1

Paket saya (plug shameless), duplexpr melakukan apa yang Anda inginkan dan termasuk fungsi bash yang mungkin berguna dalam menggulir versi Anda sendiri. (Ini dikodekan dalam bash, jadi seharusnya relatif mudah untuk dimodifikasi dan saya akan membantu jika saya bisa.)

Ini dirancang untuk meniru pencetakan dupleks pada printer non-dupleks dan mengimplementasikan manajemen antrian cetaknya sendiri yang sederhana. Ini memiliki antarmuka gui dan cli.

Versi saat ini hanya mencetak dalam duplex dan hanya bekerja dengan printer non-duplex, tetapi versi baru sedang bekerja yang akan menangani printer dengan perangkat keras duplex yang pada dasarnya hanya manajemen printer dan antrian tanpa perangkat lunak emulasi duplex. (Saya memiliki versi alpha dari skrip yang sudah berfungsi jika ada yang ingin menghubungi saya langsung melalui proyek, dll.)

Sistem mencetak ke printer default saat ini, tetapi skrip dplx dan duplex menerima argumen tambahan yang diteruskan ke lp dan dapat digunakan untuk mengatur opsi yang dimengerti lp seperti printer dan properti lainnya.

Sistem saat ini menangani file PDF, PostScript, dan teks biasa.

Satu hal yang akan tidak lakukan adalah mencetak file yang dibuat menggunakan Print untuk opsi File dari dalam Acroread. File-file itu tidak bekerja dengan lp dan saya tidak pernah bisa mendapatkan perhatian dari orang-orang hulu untuk mencari tahu apa masalahnya.

Secara pribadi, saya mencetak hampir semua "offline" (menggunakan opsi Cetak ke File yang didukung sebagian besar aplikasi) bahkan ketika printer saya tersedia. Ini membantu saya berkonsentrasi pada apa yang saya lakukan. Kemudian, ketika saya mencapai titik istirahat yang cocok, saya mencetak banyak pekerjaan.

Memiliki antrian cetak juga sangat bagus ketika Anda ingin mencetak salinan lain dari sesuatu tanpa harus memperbaruinya dan itu penting untuk mengatasi kesalahan printer seperti macet atau kehabisan toner.

Joe
sumber
Itu adalah paket yang menarik, tetapi sepertinya memiliki beberapa sisi yang kasar sekarang, dan saya tidak yakin saya bisa memperbaikinya jika ada yang salah. Omong-omong, sudahkah Anda mempertimbangkan untuk mengunggahnya ke Github?
Nathaniel M. Beaver
@bariumbitmap - Saya sudah menggunakannya setiap hari selama lebih dari 10 tahun (sejak saya pertama kali menulisnya). Itu stabil. Saya juga memiliki versi baru dalam pengembangan. Jika Anda merusaknya atau membutuhkan fitur tambahan dan bersedia bekerja dengan saya, saya akan memperbaikinya. Saya belum belajar git, jadi saya menggunakan minimal github. Sourceforge sangat terkenal.
Joe
0

Tampaknya tidak ada solusi lengkap untuk masalah ini, tapi inilah fungsi yang saya tambahkan ke saya .bashrcyang mirip dengan jawaban Rmano di atas, dengan tambahan kenyamanan autocomplete.

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers
Nathaniel M. Beaver
sumber