Logiciel "Print it later"

12

Parfois, lorsque je travaille sur mon ordinateur portable, je souhaite mettre en file d'attente quelques documents à imprimer plus tard, car je ne suis pas connecté à une imprimante à ce moment-là.

Cependant, les files d'attente d'imprimante réelles ne sont pas conçues pour cela; ils essaient immédiatement d'imprimer le document, et tous commencent soudainement à imprimer dès que j'arrive sur le réseau, ce qui n'est généralement pas ce que je veux faire. De plus, je souhaite parfois changer l'ordre des documents dans la file d'attente, ce qui n'est pas très facile, en particulier une fois que certains d'entre eux ont commencé à imprimer.

De plus, l'impression échoue parfois car, par exemple, l'imprimante manque de papier ou de toner et je souhaite réimprimer le document sur une autre imprimante. Ce n'est pas simple avec par exemple CUPSou system-config-printer; Je dois généralement revenir en arrière, rouvrir le lecteur PDF et recommencer. Aucun des lecteurs PDF que je connais ne vous permet de conserver une liste de documents à imprimer plus tard, mais cela pourrait être une fonctionnalité cachée d'un lecteur PDF quelque part que je ne connais pas.

Quoi qu'il en soit, voici ce que je veux pouvoir faire:

  • Spécifiez une liste de PDF que je souhaite imprimer.
  • Conservez cette liste sur le disque pour que je puisse fermer l'application ou redémarrer sans perdre la liste entière.
  • Spécifiez les imprimantes auxquelles je veux les envoyer à l'avance sans être réellement connectées à ces imprimantes à ce moment-là.
  • Spécifiez les options d'impression comme la couleur, le recto verso et le nombre de copies.
  • Modifiez ces affectations d'imprimante et ces options d'impression ultérieurement.
  • Attendez que j'appuie sur un bouton ou que j'exécute une commande pour réellement imprimer le (s) document (s).
  • Conservez une liste séparée des documents qui ont déjà été imprimés, au cas où l'impression ne fonctionnerait pas ou si je souhaite les réimprimer plus tard.

Je sais que je pourrais pirater quelque chose avec un script shell lpret une liste de chemins dans un fichier texte, mais je ne peux m'empêcher de penser que ce problème a déjà été résolu de manière plus robuste et élégante.

Points bonus:

  • N'exigez pas que les documents soient ouverts dans un lecteur PDF. Je veux les imprimer, pas les parcourir, et il n'y a aucune raison pour que ce soit la même application.
  • Plus d'une liste.
  • Fonctionne également pour Postscript, DjVu et d'autres formats de description de page.
  • Glissez-déposez depuis les gestionnaires de fichiers.

Aucune suggestion?

Nathaniel M. Beaver
la source
Commencez une prime si vous avez assez de réputation;)
AB
Pour autant que je puisse voir, cela ne nécessiterait qu'une simple modification des files d'attente d'imprimante telles qu'elles sont actuellement implémentées par cups. Vous imprimeriez simplement dans la file d'attente d'imprimante souhaitée, mais mettriez les travaux d'imprimante en attente jusqu'à ce que vous décidiez de les "libérer". Le bouton "en attente" suffit. Ou est-ce que je manque quelque chose?
Jos
@Jos Ma version de system-config-printer-appletme permet de suspendre et de libérer des travaux d'impression ainsi que de les déplacer vers d'autres imprimantes, mais je ne peux pas modifier l'ordre des travaux d'impression ni modifier les options d'impression après avoir soumis le travail. De plus, à ce stade, le chemin d'accès au document d'origine a disparu depuis longtemps.
Nathaniel M. Beaver
@AB Malheureusement, les primes nécessitent 75 points Internet, et je suis un modeste pointeur de 53 points.
Nathaniel M. Beaver

Réponses:

10

Ce que je fais est le suivant --- ce n'est pas aussi polyvalent que vous l'avez demandé, mais cela fonctionne presque bien. Vous devez avoir toutes vos imprimantes définies, puis vous avez besoin de ces deux scripts:

  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
    

Vous devez les mettre sur votre chemin (par exemple ~/bin) et les rendre exécutables avec chmod +x. CAVEAT : Je n'ai pas d'imprimante avec des espaces dans leurs noms. Les scripts ne sont pas testés dans ce cas (mais je suis sûr que l'un des gourous de notre script shell va réparer les scripts en un clin d'œil; -) ...)

Maintenant, vous pouvez émettre:

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

Et vous pouvez imprimer où vous voulez, l'imprimante sera mise en pause:

imprimante de evince

Vous pouvez voir votre file d'attente:

[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, les files d'attente d'impression sont persistantes lors des redémarrages). Et quand vous voulez imprimer:

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

L' utilisation que lprmvous pouvez supprimer un emploi si vous avez besoin; lprpour mettre en file d'attente un document via la ligne de commande, et si vous voulez des "listes" différentes, personne n'interdit de définir plusieurs fois la même imprimante avec des noms différents.

Vous pouvez également reprendre chaque imprimante à la main, il suffit de lancer à cupsenable <printername>partir de l'invite.

Ce que je ne pense pas que vous puissiez faire avec cette solution, c'est de changer les options d'impression après coup --- vous devrez retirer la file d'attente et re-mettre en file d'attente le document pour cela.

Rmano
la source
2
+1 Bon, cependant, alors que vous pouvez avoir vos raisons, peuplant votre tableau pourrait être rendu plus simple en utilisant le séparateur approprié dans la cutpartie: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Vous vous épargnez du temps de cycle en vous débarrassant de la traduction tr. Cela fonctionne à condition que vous n'ayez besoin que de votre premier champ.
Cbhihe
1

Mon package (plug sans vergogne), duplexpr fait ce que vous voulez et inclut des fonctions bash qui peuvent être utiles pour rouler votre propre version. (Il est codé en bash, il devrait donc être relativement facile à modifier et je vous aiderai si je le peux.)

Il est conçu pour émuler l'impression recto verso sur des imprimantes non duplex et implémente sa propre gestion de file d'attente d'impression simple. Il a des interfaces gui et cli.

La version actuelle n'imprime qu'en recto verso et ne fonctionne qu'avec des imprimantes non duplex, mais une nouvelle version est en préparation qui gérera les imprimantes avec du matériel recto verso qui consiste essentiellement en une gestion des imprimantes et des files d'attente sans le logiciel d'émulation recto verso. (J'ai une version alpha d'un script qui fonctionne déjà si quelqu'un veut me contacter directement via le projet, etc.)

Le système imprime sur l'imprimante par défaut actuelle, mais les scripts dplx et duplex acceptent des arguments supplémentaires qui sont passés à lp et peuvent être utilisés pour définir toutes les options que lp comprend telles que l'imprimante et d'autres propriétés.

Le système gère actuellement les fichiers PDF, PostScript et texte brut.

La seule chose qu'il ne faire est d'imprimer des fichiers qui ont été créés à l' aide l'option Imprimer du fichier de l' intérieur Acroread. Ces fichiers ne fonctionnent tout simplement pas avec lp et je n'ai jamais réussi à attirer l'attention des gens en amont pour comprendre quels sont les problèmes.

Personnellement, j'imprime presque tout "hors ligne" (en utilisant les options Imprimer dans un fichier prises en charge par la plupart des applications) même lorsque mes imprimantes sont disponibles. Cela m'aide à me concentrer sur ce que je fais. Plus tard, lorsque j'atteins un point d'arrêt approprié, j'imprime des lots de travaux.

Avoir une file d'attente d'impression est également très agréable lorsque vous souhaitez imprimer une autre copie de quelque chose sans avoir à la régénérer et c'est essentiel pour faire face aux erreurs d'imprimante comme les bourrages ou à court de toner.

Joe
la source
C'est un paquet intéressant, mais on dirait qu'il a quelques bords rugueux en ce moment, et je ne suis pas sûr que je serais en mesure de le réparer si quelque chose tournait mal. Au fait, avez-vous envisagé de le télécharger sur Github?
Nathaniel M. Beaver
@bariumbitmap - Je l'utilise quotidiennement depuis plus de 10 ans (depuis que je l'ai écrit). C'est stable. J'ai également une nouvelle version en développement. Si vous le cassez ou avez besoin de fonctionnalités supplémentaires et que vous souhaitez travailler avec moi, je le corrigerai. Je n'ai pas encore appris git, donc je fais un usage minimal de github. Sourceforge est très bien connu.
Joe
0

Il ne semble pas y avoir de solution complète à ce problème, mais voici une fonction que j'ai ajoutée à ma .bashrcqui est similaire à la réponse de Rmano ci-dessus, avec la commodité supplémentaire de la saisie semi-automatique.

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
la source