Como imprimir arquivos PDF ou Postscript na impressora diretamente da linha de comando

3

Eu posso imprimir do Inkscape para minha impressora de rede configurada pelo CUPS. Eu gostaria de fazer o mesmo diretamente da linha de comando do shell, conforme fornecido pela resposta link . Mas quando eu tento isso no meu sistema Ubuntu, depois de converter os arquivos SVG para PDF ou Postscript usando o Inkscape, enviá-lo para lpr fornece o erro mostrado abaixo no painel frontal da impressora (a Xerox 6180MFP):

Os comandos que estou tentando usar são:

inkscape --without-gui --export-pdf=test_file.pdf test_file.svg
pdftops test_file.pdf test_file.ps
lpr -P Xerox-6180MFP-D -l test_file.ps

O que preciso fazer na minha configuração do CUPS para ativá-lo? O que o Inkscape está fazendo nos bastidores para imprimir com êxito na impressora, que não consigo fazer na linha de comando lpr ?

Para referência, aqui está uma essência do meu arquivo de configuração atual do CUPS: link

Saída de lpstat -t :

scheduler is running
no system default destination
device for Xerox-6180MFP-D: socket://192.168.1.20
device for Xerox-6180MFP-D/double-sided: socket://192.168.1.20
device for Xerox-6180MFP-D/single-sided: socket://192.168.1.20
Xerox-6180MFP-D accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
Xerox-6180MFP-D/double-sided accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
Xerox-6180MFP-D/single-sided accepting requests since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D/double-sided is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST
printer Xerox-6180MFP-D/single-sided is idle.  enabled since Sat 04 Mar 2017 05:36:44 PM PST

Captura de tela da página da minha impressora em http://localhost:631/printers/Xerox-6180MFP-D

EDIT # 1

Em resposta a um comentário em Como imprimir arquivos PDF ou PostScript na impressora diretamente da linha de comando :

Aqui está o script que usei para executar o lpr com e sem a opção -l (mostrada abaixo sem ele):

cd /tmp
qrencode -v 1 -t svg -o some_small_text.qrcode.svg -l L "some small text"
inkscape --without-gui --export-pdf=some_small_text.qrcode.pdf some_small_text.qrcode.svg
# setsid evince some_small_text.qrcode.pdf >/dev/null 2>&1 &
pdftops some_small_text.qrcode.pdf some_small_text.qrcode.ps
lpr -P Xerox-6180MFP-D some_small_text.qrcode.ps

Aqui está uma essência do arquivo Postscript gerado a partir da chamada acima para qrencode:

link

O erro "Load Tray" me leva a acreditar que preciso especificar mais algumas coisas para o comando lpr ou modificar algumas das opções. De alguma forma, o Inkscape é capaz de comunicar suas necessidades a partir do diálogo de impressão que requer que eu interaja, e é que eu desejo replicar a partir da linha de comando lpr .

EDIT # 2

Eu corri lpr sem opções e recebi:

$ echo stuff | lpr
lpr: Error - no default destination available.

EDIT # 3

Eu resolvi parcialmente o enigma de onde vem o erro "Load Tray 1 (MPT) ... 76x127mm" no painel frontal da impressora. Quando abri a GUI do Inkscape e examinei as propriedades no arquivo .svg gerado pelo comando qrencode mostrado acima, vejo:

Observe a largura e a altura. Quando tentei imprimir usando a GUI, recebi o mesmo erro "Load Tray 1 (MPT) ... 76x127mm"! Então, eu selecionei "US Letter" da seção Page Size e tentei imprimi-lo na impressora, e funcionou sem problemas.

Portanto, aparentemente, o que está acontecendo é que a impressora está vendo esse arquivo postscript pequeno (em largura e altura) e assumindo que precisa selecionar uma bandeja de envelope de 3 x 5 polegadas. Acredito que, ao olhar a página 69 do link que tem:

Portanto, estou um pouco mais perto da resposta à minha pergunta original. Agora só preciso de uma maneira de escolher a Origem do papel ou alterar o tamanho na linha de comando. Eu olhei para a página inkscape man, e não é óbvio quais opções são aquelas com as quais eu deveria brincar. Ou talvez este seja um tipo de operação imagemagick / convert.

    
por bgoodr 05.03.2017 / 02:59

1 resposta

2

Isso é o que eu tive que fazer:

cd /tmp
qrencode -v 1 -t svg -o some_small_text.qrcode.svg -l L "some small text"
sed 's%<svg width="[^"]*" height="[^"]*" viewBox="[^"]*"%<svg width="8.5in" height="11in" viewBox="0 0 203.94463 263.92834"%g' < some_small_text.qrcode.svg > some_small_text.qrcode.us-letter.svg
inkscape --without-gui --export-pdf=some_small_text.qrcode.us-letter.pdf some_small_text.qrcode.us-letter.svg
lpr -P Xerox-6180MFP-D some_small_text.qrcode.us-letter.pdf

A chave é que eu tive que alterar os atributos width , height e viewBox do elemento svg para corresponder ao que o Inkscape faz quando você seleciona US Letter. Os valores usados para o viewBox permanecem um mistério para mim. Depois que fiz isso, o PDF resultante, quando enviado para a impressora, manteve a impressora feliz.

Isso não é exatamente o que eu queria, pois nessa abordagem, tenho que usar sed para modificar os atributos. Eu preferiria encontrar uma maneira de usar o Inkscape para fazer isso no svg diretamente. Eu vejo que o Inkscape tem uma opção -verb e um verbo chamado DialogDocumentProperties no link mas Não é aparente como selecionar o tamanho da "Carta dos EUA" usando essa opção.

    
por bgoodr 06.03.2017 / 07:12