Software "Imprimir más tarde"

12

A veces, cuando estoy trabajando en mi computadora portátil, quiero poner en cola algunos documentos para imprimir más tarde, ya que no estoy conectado a una impresora en ese momento.

Sin embargo, las colas de impresora reales no están diseñadas para esto; inmediatamente intentan imprimir el documento, y de repente todos comienzan a imprimir tan pronto como me conecto a la red, que generalmente no es lo que quiero hacer. Además, a veces quiero cambiar el orden de los documentos en la cola, lo que no es muy fácil, especialmente una vez que algunos de ellos han comenzado a imprimir.

Además, a veces la impresión falla porque, por ejemplo, la impresora se queda sin papel o tóner, y quiero volver a imprimir el documento en una impresora diferente. Esto no es sencillo con eg CUPSo system-config-printer; Por lo general, tengo que regresar, volver a abrir el lector de PDF y comenzar de nuevo. Ninguno de los lectores de PDF que conozco le permite mantener una lista de documentos para imprimir más tarde, pero esta podría ser una característica oculta de un lector de PDF en algún lugar que no conozco.

De todos modos, esto es lo que quiero poder hacer:

  • Especifique una lista de archivos PDF que quiero imprimir.
  • Mantenga esa lista en el disco para que pueda cerrar la aplicación o reiniciar sin perder la lista completa.
  • Especifique las impresoras a las que quiero enviarlas por adelantado sin estar realmente conectado a esas impresoras en ese momento.
  • Especifique opciones de impresión como color, dúplex y número de copias.
  • Cambie esas asignaciones de impresora y opciones de impresión más tarde.
  • Espere hasta que presione un botón o ejecute un comando para imprimir realmente los documentos.
  • Mantenga una lista separada de los documentos que ya se han impreso, en caso de que la impresión no funcione o si quiero volver a imprimirlos más tarde.

Sé que podría hackear algo junto con un script de shell lpry una lista de rutas en un archivo de texto, pero no puedo evitar sentir que este problema ya se ha resuelto de una manera más robusta y elegante.

Puntos extra:

  • No requiera que los documentos estén abiertos en un lector de PDF. Quiero imprimirlos, no examinarlos, y no hay razón para que tengan que ser la misma aplicación.
  • Más de una lista
  • También funciona para Postscript, DjVu y otros formatos de descripción de página.
  • Arrastra y suelta desde los administradores de archivos.

¿Alguna sugerencia?

Nathaniel M. Beaver
fuente
Comienza una recompensa si tienes suficiente reputación;)
AB
Por lo que puedo ver, esto requeriría solo una simple modificación de las colas de impresoras implementadas actualmente por cups. Simplemente imprimirá en la cola de impresora deseada, pero pondrá los trabajos de la impresora "en espera" hasta que decida "liberarlos". El botón "en espera" es todo lo que se necesita. ¿O extraño algo?
Jos
@ Jos Mi versión de system-config-printer-appletme permite retener y liberar trabajos de impresión, así como moverlos a otras impresoras, pero no puedo cambiar el orden de los trabajos de impresión ni cambiar las opciones de impresión después de enviar el trabajo. Además, en ese punto, la ruta al documento original ya no existe.
Nathaniel M. Beaver
@AB Desafortunadamente, las recompensas requieren 75 puntos de Internet, y yo soy un humilde 53 puntero.
Nathaniel M. Beaver

Respuestas:

10

Lo que hago es lo siguiente: no es tan versátil como pediste, pero funciona casi bien. Necesita tener todas sus impresoras definidas, y luego necesita estos dos 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
    

Tienes que ponerlos en tu camino (por ejemplo ~/bin) y hacerlos ejecutables con chmod +x. CAVEAT : No tengo ninguna impresora con espacios en sus nombres. Los scripts no se prueban en ese caso (pero estoy seguro de que uno de los gurús de nuestro script de shell solucionará los scripts en un instante; -) ...)

Ahora puedes emitir:

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

Y puede imprimir desde donde quiera, la impresora se detendrá:

impresora de evince

Puedes ver tu cola:

[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, las colas de impresión son persistentes en todos los reinicios). Y cuando quieres imprimir:

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

Si lo usa lprm, puede eliminar un trabajo si lo necesita; lprpara poner en cola un documento a través de la línea de comandos, y si desea diferentes "listas", nadie prohíbe definir la misma impresora varias veces con diferentes nombres.

También puede reanudar cada impresora a mano, solo es cuestión de ejecutarla cupsenable <printername>desde el indicador.

Lo que no creo que pueda hacer con esta solución es cambiar las opciones de impresión después del hecho: deberá retirar y volver a colocar el documento para esto.

Rmano
fuente
2
1 Bueno, sin embargo, aunque es posible que tenga sus razones, poblar la matriz podría simplificarse utilizando el delimitador apropiado en la cutporción: cat /etc/printcap | cut -d "|" -f 1 | grep -v "#". Se ahorra algo de tiempo de ciclo al deshacerse de la traducción tr. Esto funciona siempre que solo necesite su primer campo.
Cbhihe
1

Mi paquete (plug descarado), duplexpr hace algo de lo que quieres e incluye funciones bash que pueden ser útiles para crear tu propia versión. (Está codificado en bash, por lo que debería ser relativamente fácil de modificar y ayudaré si puedo).

Está diseñado para emular la impresión dúplex en impresoras no dúplex e implementa su propia gestión de colas de impresión simple. Tiene interfaces gui y cli.

La versión actual solo imprime en dúplex y solo funciona con impresoras no dúplex, pero se está preparando una nueva versión que manejará las impresoras con hardware dúplex, que esencialmente es solo una impresora y gestión de colas sin el software de emulación dúplex. (Tengo una versión alfa disponible de un script que ya funciona si alguien quiere contactarme directamente a través del proyecto, etc.)

El sistema imprime en la impresora predeterminada actual, pero las secuencias de comandos dplx y dúplex aceptan argumentos adicionales que se pasan a lp y se pueden usar para establecer cualquier opción que lp entienda, como la impresora y otras propiedades.

El sistema actualmente maneja archivos PDF, PostScript y de texto plano.

Lo único que va a no hacer es imprimir los archivos que fueron creados utilizando la opción Imprimir a archivo desde dentro Acroread. Esos archivos simplemente no funcionan con lp y nunca he podido llamar la atención de ninguna de las personas aguas arriba para descubrir cuáles son los problemas.

Personalmente, imprimo casi todo "sin conexión" (usando las opciones Imprimir a archivo que admite la mayoría de las aplicaciones) incluso cuando mis impresoras están disponibles. Me ayuda a concentrarme en lo que estoy haciendo. Más tarde, cuando llego a un punto de interrupción adecuado, imprimo lotes de trabajos.

Tener una cola de impresión también es muy bueno cuando desea imprimir otra copia de algo sin tener que regenerarlo y es esencial para tratar los errores de la impresora, como atascos o quedarse sin tóner.

Joe
fuente
Ese es un paquete interesante, pero parece que tiene algunos bordes ásperos en este momento, y no estoy seguro de que pueda solucionarlo si algo sale mal. Por cierto, ¿has considerado subirlo a Github?
Nathaniel M. Beaver
@bariumbitmap: lo he estado usando diariamente durante más de 10 años (desde que lo escribí por primera vez). Es estable También tengo una nueva versión en desarrollo. Si lo rompe o necesita funciones adicionales y está dispuesto a trabajar conmigo, lo arreglaré. Todavía tengo que aprender git, así que hago un uso mínimo de github. Sourceforge es muy conocido.
Joe
0

No parece haber una solución completa para este problema, pero aquí hay una función que agregué a mi .bashrcque es similar a la respuesta de Rmano anterior, con la conveniencia adicional de autocompletar.

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
fuente