“Daha sonra yazdır” yazılımı


12

Bazen dizüstü bilgisayarımda çalışırken, daha sonra yazdırmak için birkaç belgeyi sıraya koymak istiyorum, çünkü o sırada bir yazıcıya bağlı değilim.

Ancak, gerçek yazıcı kuyrukları bunun için tasarlanmamıştır; hemen belgeyi yazdırmaya çalışırlar ve ağa girer girmez aniden yazdırmaya başlarlar, bu genellikle yapmak istediğim şey değildir. Dahası, bazen sıradaki belgelerin sırasını değiştirmek istiyorum, bu da özellikle bazıları yazdırmaya başladıktan sonra çok kolay değil.

Ayrıca, örneğin yazıcıda kağıt veya toner bittiğinden ve belgeyi farklı bir yazıcıya yeniden yazdırmak istediğim için bazen yazdırma başarısız oluyor. Bu ile örn kolay değildir CUPSya system-config-printer; Genel olarak geri dönmem, PDF okuyucuyu tekrar açmam ve yeniden başlamam gerekiyor. Tanıdığım PDF okuyucuların hiçbiri, daha sonra yazdırmak için bir belge listesi tutmanıza izin vermez, ancak bu, bilmediğim bir yerde bir PDF okuyucunun gizli bir özelliği olabilir.

Her neyse, işte yapabilmek istediğim şey:

  • Yazdırmak istediğim PDF'lerin listesini belirtin.
  • Tüm listeyi kaybetmeden uygulamayı kapatabilmem veya yeniden başlatabilmem için bu listeyi diskte tut.
  • O zamanlar bu yazıcılara gerçekten bağlanmadan önceden göndermek istediğim yazıcıları belirtin.
  • Renkli, dupleks ve kopya sayısı gibi yazdırma seçeneklerini belirtin.
  • Bu yazıcı atamalarını ve yazdırma seçeneklerini daha sonra değiştirin.
  • Belgeleri yazdırmak için bir düğmeye basana veya bir komut çalışana kadar bekleyin.
  • Yazdırmanın çalışmadığı veya daha sonra yeniden yazdırmak isteyebileceğimden, yazdırılmış belgelerin ayrı bir listesini saklayın.

Bir kabuk betiği lprve bir metin dosyasındaki yolların bir listesi ile birlikte bir şeyler hackleyebileceğimi biliyorum , ancak bu sorunun daha sağlam ve zarif bir şekilde çözüldüğünü hissetmeye yardımcı olamıyorum.

Bonus puanlar:

  • Belgelerin PDF okuyucuda açık olmasını gerektirmeyin. Onları yazdırmak istiyorum, göz atmak istemiyorum ve aynı uygulama olmaları için hiçbir neden yok.
  • Birden fazla liste.
  • Ayrıca Postscript, DjVu ve diğer sayfa açıklama formatları için de çalışın.
  • Dosya yöneticilerinden sürükleyip bırakın.

Herhangi bir öneri?


Yeterli itibara sahipseniz bir ödül
AB

Görebildiğim kadarıyla, şu anda uygulanmakta olan yazıcı kuyruklarında sadece basit bir değişiklik gerektirir cups. İstediğiniz yazıcı kuyruğuna yazdırırsınız, ancak "serbest bırakmaya" karar verene kadar yazıcı işlerini "beklemeye" alırsınız. Tek gereken "beklemeye" düğmesi. Yoksa bir şey mi özlüyorum?
Jos

@Jos sürümüm system-config-printer-applet, yazdırma işlerini tutmam ve bırakmamın yanı sıra diğer yazıcılara da taşımama izin veriyor, ancak işi gönderdikten sonra yazdırma işlerinin sırasını değiştiremiyorum veya yazdırma seçeneklerini değiştiremiyorum. Ayrıca, bu noktaya kadar orijinal belgeye giden yol çoktan gitti.
Nathaniel M. Beaver

@AB Maalesef ödüller 75 internet puanı gerektiriyor ve ben de düşük bir 53 göstericiyim.
Nathaniel M. Beaver

Yanıtlar:


10

Yaptığım şey şu --- istediğin gibi çok yönlü değil, ama neredeyse tamam çalışıyor. Tüm yazıcılarınızı tanımlamanız ve ardından şu iki komut dosyasına ihtiyacınız vardır:

  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
    

Bunları yolunuza koymanız ~/binve (örneğin ) çalıştırılabilir yapmanız gerekir chmod +x. CAVEAT : Adlarında boşluk bulunan yazıcım yok. Bu durumda komut dosyaları test edilmez (ancak eminim ki kabuk komut dosyamızın gurularından biri komut dosyalarını bir flaşta düzeltir; -) ...)

Şimdi aşağıdakileri yapabilirsiniz:

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

İstediğiniz yerden yazdırabilirsiniz, yazıcı duraklatılır:

evince yazıcı

Sıranızı görebilirsiniz:

[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, yazdırma kuyrukları yeniden başlatmalarda kalıcıdır). Ve yazdırmak istediğinizde:

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

Kullanmanız lprmgerekirse bir işi kaldırabilirsiniz; lprbir belgeyi komut satırı aracılığıyla sıralamak için ve farklı "listeler" istiyorsanız, hiç kimse aynı yazıcıyı farklı adlarla birkaç kez tanımlamayı yasaklamaz.

Her yazıcıyı el ile de devam ettirebilirsiniz, bu sadece istemden çalıştırma meselesidir cupsenable <printername>.

Bu çözümle yapabileceğinizi sanmıyorum, aslında yazdırma seçeneklerini değiştiriyor --- bunun için belgeyi atlatmanız ve yeniden sıralamanız gerekecek.


2
Sebeplerin olabilecekken 1 İyi Ancak, dizinizi doldurma düzgün sınırlayıcı kullanarak daha basit yapılmış olabilir cutkısım: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Çeviriden kurtularak, kendinize zaman kazandıracaksınız tr. Bu, yalnızca ilk alanınıza ihtiyacınız olması şartıyla çalışır.
Cbhihe

1

Paketim (utanmaz fiş), duplexpr istediğiniz bazı şeyleri yapar ve kendi sürümünüzü yuvarlamada yararlı olabilecek bash işlevlerini içerir. (Bash olarak kodlanmıştır, bu yüzden değiştirilmesi kolay olmalı ve yapabilirsem yardımcı olacağım.)

Çift taraflı olmayan yazıcılarda çift taraflı yazdırmayı taklit etmek için tasarlanmıştır ve kendi basit yazdırma kuyruğu yönetimini uygular. Hem gui hem de cli arayüzleri vardır.

Mevcut sürüm sadece dupleks olarak yazdırılır ve sadece dupleks olmayan yazıcılarla çalışır, ancak dupleks öykünme yazılımı olmadan sadece yazıcı ve kuyruk yönetimi olan dupleks donanımlı yazıcıları işleyecek yeni bir sürüm bulunmaktadır. (Herkes benimle proje aracılığıyla doğrudan iletişime geçmek istiyorsa zaten çalışan bir komut dosyasının alfa sürümüne sahibim vb.)

Sistem geçerli varsayılan yazıcıya yazdırır, ancak dplx ve dupleks komut dosyaları lp'ye iletilen ek argümanları kabul eder ve lp'nin yazıcı ve diğer özellikler gibi anladığı tüm seçenekleri ayarlamak için kullanılabilir.

Sistem şu anda PDF, PostScript ve düz metin dosyalarını işler.

O olacak bir şey değil yapmak Dosya seçeneğine Print kullanarak oluşturulan baskı dosyalar içinde acroread. Bu dosyalar sadece lp ile çalışmaz ve sorunların ne olduğunu anlamak için yukarı akış milletlerinden herhangi birinin dikkatini çekemedim.

Şahsen, yazıcılarım mevcut olsa bile hemen hemen her şeyi "çevrimdışı" olarak yazdırıyorum (çoğu uygulamanın desteklediği Dosyaya Yazdır seçeneklerini kullanarak). Yaptığım şeye konsantre olmamı sağlıyor. Daha sonra, uygun bir kırılma noktasına ulaştığımda, toplu işler yazdırıyorum.

Yeniden oluşturmak zorunda kalmadan bir şeyin başka bir kopyasını yazdırmak istediğinizde de yazdırma kuyruğuna sahip olmak gerçekten güzel ve sıkışma veya toner bitmesi gibi yazıcı hatalarıyla uğraşmak için çok önemlidir.


Bu ilginç bir paket, ama şu anda birkaç pürüzlü kenarı var gibi görünüyor ve bir şeyler ters giderse bunu düzeltebileceğimden emin değilim. Bu arada, Github'a yüklemeyi düşündün mü?
Nathaniel M. Beaver

@bariumbitmap - 10 yılı aşkın bir süredir günlük olarak kullanıyorum (ilk yazdığımdan beri). Kararlı. Geliştirmede yeni bir versiyonum da var. Eğer kırırsanız veya ek özelliklere ihtiyacınız varsa ve benimle çalışmaya hazırsanız, düzeltirim. Git'i henüz öğrenemedim, bu yüzden az miktarda github kullanıyorum. Sourceforge çok iyi biliniyor.
Joe

0

Bu sorun için tam bir çözüm yok gibi görünüyor, ancak işte eklediğim .bashrc, Rmano'nun yukarıdaki cevabına benzeyen ve otomatik tamamlamanın ek rahatlığına sahip bir işlev .

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.