Como fazer engenharia reversa em uma impressora / trabalho de impressão CUPS?

4

Eu tenho problema de qualidade com impressão em PDF local (CUPS) vs. Google Cloud Printing. (O GCP é melhor, com o CUPS eu recebo tamanho errado, caracteres errados, fontes erradas. Então, eu quero saber o que o CUPS faz!)

A impressora pode lidar com alguns formatos nativamente: application / pdf (≥ 1.0, ≤ 1.7), imagem / jpeg, imagem / tiff, imagem / pwg-raster

Eu adicionei a impressora ao CUPS de maneiras diferentes ao longo dos meses, e também a usei como 'driverless', onde o CUPS detecta a impressora na própria rede local.

Em todos os casos, imprime PDF com erros; não inteiramente, mas tornando a impressão inútil para mim. O que acontece: a página é ampliada em ~ 30%, a partir da página 2 ou 3, as fontes se misturam, os caracteres se transformam em símbolos, os parágrafos são impressos em negrito, etc ...

Os mesmos PDFs ficam ótimos se impressos pelo Google Cloud Print na mesma impressora. Alimentando diretamente a impressora, um pendrive com o PDF é igualmente excelente. - Quero ter os mesmos bons resultados com a impressão do meu computador!

Minhas perguntas são:

  • Eu quero saber qual pipeline cada impressora CUPS aceita na minha máquina antes de enviá-la para a impressora real. Ele detecta o formato? Como? Será que vai reconverter para PDF novamente? Qual PPD será usado? Que outras decisões o pipeline está tomando e quais conversões?
  • De um trabalho de impressão passado, quero saber: O que o CUPS detectou? Quais conversões isso fez? Onde posso buscar as saídas intermediárias geradas?

Eu não encontrei um bom ponto de entrada para a depuração / engenharia reversa do CUPS até agora (com as minhas perguntas em mente) ...

    
por Robert Siemer 17.07.2018 / 15:00

1 resposta

0

Sua pergunta não especifica o sistema operacional com o qual você está trabalhando. Minha resposta é para o Debian 9.6 e para uma Kyocera FS-1350DN conectada à rede, que é especificada para lidar com “Impressão direta do PDF”. Não deve não ser necessário que os cups mexam com arquivos PDF.

Para descobrir, você precisa habilitar a depuração de copos. Infelizmente, cupsctl --debug-logging (como root) falhou com a mensagem de erro cupsctl: Forbidden . Depois de definir LogLevel debug no arquivo /etc/cups/cupsd.conf e reiniciar o cupsd, enviei um trabalho de impressão com lpr scale.pdf . O arquivo continha gráficos de linhas de um programa CAD (sem escala de cinza) e impresso com escala de 100%.

As linhas relevantes (300 totalmente para o trabalho) em / var / log / cups / error_log lêem:

⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Request file type is application/pdf.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] 3 filters for job:
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftopdf (application/pdf to application/vnd.cups-pdf, cost 66)
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftops (application/vnd.cups-pdf to application/vnd.cups-postscript, cost 100)
D [11/Dec/2018:17:50:02 +0100] [Job 319] - (application/vnd.cups-postscript to printer/fs1350, cost 0)
⋮
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter /usr/lib/cups/filter/pdftopdf (PID 16570)
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter /usr/lib/cups/filter/pdftops (PID 16571)
I [11/Dec/2018:17:50:02 +0100] [Job 319] Started backend /usr/lib/cups/backend/socket (PID 16572)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] pdftops - copying to temp print file \"/tmp/040bb5c158ce7\"
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16570 (/usr/lib/cups/filter/pdftopdf) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] 319 h scale.pdf 1 \'finishings=3 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf\'
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Running command line for gs: gs -q -dNOPAUSE -dBATCH -dSAFER -dNOMEDIAATTRS -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r1200 -dCompressPages=false -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c \'save pop\' -f /tmp/040bb5c158ce7
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter gs (PID 16577)
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started post-processing (PID 16578)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] Started filter pstops (PID 16579)
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] %!PS-Adobe-3.0
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%BoundingBox: 0 0 595 842
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%HiResBoundingBox: 0 0 595.00 842.00
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%Creator: GPL Ghostscript 920 (ps2write)
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%LanguageLevel: 2
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%CreationDate: D:20181211175002+01\'00\'
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%Pages: 1
D [11/Dec/2018:17:50:02 +0100] [Job 319] %%EndComments
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16577 (gs) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16578 (Post-processing) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16579 (pstops) exited with no errors.
⋮
D [11/Dec/2018:17:50:02 +0100] [Job 319] PID 16571 (/usr/lib/cups/filter/pdftops) exited with no errors.
⋮

A linha contendo - (application/vnd.cups-postscript to printer/fs1350, cost 0) informa que cups está usando o pós-processador (também conhecido como driver de impressora) /etc/cups/ppd/fs1350.ppd. Outra visão do mesmo processo pode ser obtida com o ps -command. Um trecho da saída de

while true ; do date +'%N'>> log; ps axSfu | fgrep -v grep | egrep '^lp[[:space:]]|/usr/sbin/cupsd' >> log ; done

que é

⋮
root     15796  0.1  0.1 171440  8536 ?        Ssl  17:49   0:00 /usr/sbin/cupsd -l
lp       16571  0.0  0.0  77632  5728 ?        S    17:50   0:00  \_ fs1350 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp       16577  0.0  0.2 129760 20836 ?        R    17:50   0:00  |   \_ gs -q -dNOPAUSE -dBATCH -dSAFER -dNOMEDIAATTRS -sDEVICE=ps2write -sOUTPUTFILE=%stdout -dLanguageLevel=3 -r1200 -dCompressPages=false -dCompressFonts=false -dNoT3CCITT -dNOINTERPOLATE -c save pop -f /tmp/040bb5c158ce7
lp       16578  0.0  0.0  77632   924 ?        S    17:50   0:00  |   \_ fs1350 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp       16579  0.0  0.0  75424  5288 ?        S    17:50   0:00  |   \_ fs1350 319 h scale.pdf 1 finishings=3 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
lp       16572  0.0  0.0  79792  5900 ?        S    17:50   0:00  \_ socket://fs1350.xxxx.xxxx.xxx 319 h scale.pdf 1 finishings=3 number-up=1 job-uuid=urn:uuid:045216b6-e2e0-34ee-50af-36c3bdbdc04f job-originating-host-name=192.168.0.2 date-time-at-creation= date-time-at-processing= time-at-creation=1544547002 time-at-processing=1544547002 document-name-supplied=scale.pdf
⋮

nos informa que cups chama o pré-filtro (pdftops, PID 16571, nomeado fs1350 aqui) e o back-end (PID 16572, denominado socket: //fs1350.xxxx.xxxx.xxx aqui). O prefilter invoca gs . Como todo o processamento leva menos de 0,2 s, faz sentido coletar a saída em um arquivo. O date +'%N' está lá apenas para ter uma ideia do tempo.

A escala indesejada por evince (que escrevi no meu comentário) foi porque evince→Print→Print Setup→Scale→100% foi silenciosamente substituído por evince→Print→Page Handling→Fit to Printable Area . Portanto, verifique seus clientes de impressão com muito cuidado.

Infelizmente, esta não é toda a história. Para ignorar as xícaras e usar o recurso "Impressão direta de PDF" da impressora, enviei o arquivo diretamente: nc fs1350.xxxx.xxxx.xxx 9100 < scale.pdf . Após mais de 10 minutos de processamento, a impressora enviou o papel.

Impressãobrutausandonetcat,osdígitosrefletemotamanhoemmm.

Impressãousandolpr→cups

Imagem de bitmap do arquivo (1200 dpi)

Independentemente da configuração da impressora “Override A4 / LT”, a escala da impressão não processada é de 97,7%, enquanto a escala da impressão lpr → cups está correta. Há um pequeno ganho de ponto para a impressão em bruto, enquanto a impressão lpr → cups é um pouco escassa.

Diminuir o tamanho da página do desenho antes da impressão crua ampliou a escala.

    
por 08.12.2018 / 15:35