“Imprimir mais tarde”

12

Às vezes, quando estou trabalhando no meu laptop, quero enfileirar alguns documentos para impressão posterior, pois não estou conectado a uma impressora no momento.

No entanto, as filas de impressoras reais não são projetadas para isso; eles imediatamente tentam imprimir o documento, e todos de repente começam a imprimir assim que eu entro na rede, o que geralmente não é o que eu quero fazer. Além disso, às vezes eu quero alterar a ordem dos documentos na fila, o que não é muito fácil, especialmente quando alguns deles começaram a imprimir.

Além disso, às vezes, a impressão falha porque, por exemplo, a impressora fica sem papel ou toner e quero reimprimir o documento para uma impressora diferente. Isto não é simples com, e. CUPS ou system-config-printer ; Eu geralmente tenho que voltar, abrir o leitor de PDF e começar tudo de novo. Nenhum dos leitores de PDF que conheço permite manter uma lista de documentos para impressão posterior, mas isso pode ser um recurso oculto de um leitor de PDF em algum lugar que eu não conheço.

Enfim, aqui está o que eu quero ser capaz de fazer:

  • Especifique uma lista de PDFs que eu quero imprimir.
  • Mantenha essa lista no disco para que eu possa fechar o aplicativo ou reinicializar sem perder a lista inteira.
  • Especifique as impressoras para as quais desejo enviá-las antecipadamente, sem estar realmente conectado a essas impressoras no momento.
  • Especifique opções de impressão, como cor, duplex e número de cópias.
  • Altere as atribuições da impressora e as opções de impressão posteriormente.
  • Espere até pressionar um botão ou executar um comando para realmente imprimir o (s) documento (s).
  • Mantenha uma lista separada de documentos que já foram impressos, caso a impressão não funcione ou eu queira reimprimi-los mais tarde.

Eu sei que eu poderia hackear algo junto com um script de shell, lpr , e uma lista de caminhos em um arquivo de texto, mas não posso deixar de achar que esse problema já foi resolvido de maneira mais robusta e elegante .

Pontos de bônus:

  • Não exija que os documentos sejam abertos em um leitor de PDF. Eu quero imprimi-los, não procurá-los, e não há razão para que eles tenham que ser o mesmo aplicativo.
  • Mais de uma lista.
  • Trabalhe também nos formatos Postscript, DjVu e outros formatos de descrição de páginas.
  • Arrastar e soltar de gerenciadores de arquivos.

Alguma sugestão?

    
por Nathaniel M. Beaver 14.07.2015 / 09:51

3 respostas

9

O que eu faço é o seguinte --- não é tão versátil quanto você pediu, mas funciona quase bem. Você precisa ter todas as suas impressoras definidas e, então, você precisa desses dois 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
    

Você precisa colocá-los em seu caminho (por exemplo, ~/bin ) e torná-los executáveis com chmod +x . CAVEAT : Eu não tenho nenhuma impressora com espaços em seus nomes. Os scripts não são testados nesse caso (mas tenho certeza de que um dos gurus do nosso script de shell corrigirá os scripts em um flash; -) ...)

Agora, você pode emitir:

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

E você pode imprimir de onde quiser, a impressora será pausada:

Você pode ver sua fila:

[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, as filas de impressão são persistentes nas reinicializações). E quando você quiser imprimir:

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

Usando lprm , você pode remover um trabalho se precisar; lpr para enfileirar um documento via linha de comando, e se você quiser diferentes "listas", ninguém proíbe definir a mesma impressora várias vezes com nomes diferentes.

Você também pode retomar cada impressora manualmente; é só uma questão de executar cupsenable <printername> no prompt.

O que eu não acho que você possa fazer com essa solução é alterar as opções de impressão após o fato --- você terá que desenfileirar e reencarquivar o documento para isso.

    
por Rmano 14.07.2015 / 11:06
1

Meu pacote (plugue sem vergonha), duplexpr faz parte do que você quer e inclui funções bash que podem ser úteis na rolagem sua própria versão. (Está codificado no bash, então deve ser relativamente fácil de modificar e eu vou ajudar se eu puder.)

Ele foi projetado para emular a impressão duplex em impressoras não duplex e implementa seu próprio gerenciamento de fila de impressão simples. Tem interfaces de gui e cli.

A versão atual só imprime em duplex e funciona somente com impressoras não duplex, mas uma nova versão está em andamento, que tratará de impressoras com hardware duplex, que essencialmente é apenas gerenciamento de impressoras e filas sem o software de emulação duplex. (Eu tenho uma versão alfa disponível de um script que já funciona se alguém quiser entrar em contato diretamente comigo através do projeto, etc.)

O sistema imprime na impressora padrão atual, mas os scripts dplx e duplex aceitam argumentos adicionais que são passados para lp e podem ser usados para definir quaisquer opções que lp entenda, como impressora e outras propriedades.

O sistema atualmente lida com arquivos PDF, PostScript e arquivos de texto simples.

A única coisa que não será imprimir arquivos que foram criados usando a opção Print to File do dentro Acroread. Esses arquivos simplesmente não funcionam com lp e eu nunca fui capaz de chamar a atenção de qualquer um dos caras do upstream para descobrir quais são os problemas.

Pessoalmente, imprimo quase tudo "offline" (usando as opções Imprimir para arquivo que a maioria dos aplicativos suporta) mesmo quando as minhas impressoras estão disponíveis. Isso me ajuda a me concentrar no que estou fazendo. Mais tarde, quando chego a um ponto de interrupção adequado, imprimo lotes de tarefas.

Ter uma fila de impressão também é muito bom quando você deseja imprimir outra cópia de algo sem precisar regenerá-la e é essencial para lidar com erros de impressão, como congestionamentos ou falta de toner.

    
por Joe 16.07.2015 / 01:15
0

Não parece haver uma solução completa para este problema, mas aqui está uma função que adicionei ao meu .bashrc que é semelhante a Resposta de Rmano acima, com a conveniência adicional de autocomplete.

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

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