olás. já se deparou com o dilema de ter que imprimir algumas páginas de texto e acabar recorrendo ao X para fazer isso? ou mandar seu texto direto para o lpr
e perceber que ele saiu todo cortado? ou ainda, você tem poucas folhas disponíveis e quer espremer o texto pra caber nelas? seus problemas acabaram!
o mpage
(http://www.mesa.nl/pub/mpage/mpage-2.5.tgz) é um utilitário de linha de comando presente na maioria das distribuições de linux que converte texto para páginas em postscript
, a linguagem que as impressoras entendem, e tem diversas opções úteis que veremos agora.
a sintaxe é simples, sendo o texto convertido jogado na saída padrão e esta pode ser direcionada para o servidor de impressão:
$ mpage [OPÇõES] arquivo.txt | lpr
chamado sem opções, imprime no tamanho A4, com 4 páginas por folha. isso mesmo! quatro páginas colocadas numa só folha. daí o nome do programa "M(ultiple)Page". as opções -1, -2 -4 e -8 definem quantas páginas por folha serão impressas.
para definir o tamanho da folha, caso diferente de A4, a opção -b aceita os parâmetros A3, Letter ou Legal. também podemos mudar a orientação do papel com a opção -l, imprimindo como "paisagem", ou seja, com a folha deitada.
então para imprimir o arquivo de serviços da máquina (que tem mais de 300 linhas) numa só folha tamanho Letter, contendo oito mini-páginas:
$ mpage -8 -b Letter /etc/services | lpr
note que para oito páginas (bem como para duas), a orientação "paisagem" é escolhida automaticamente. adicionando a opção -a, vemos que as páginas são colocadas primeiro preenchendo a largura e depois a altura. e ainda, o -R começa o preenchimento a partir do pé da folha.
todas estas orientações automáticas e preenchimento confundem, então aqui vai uma tabela esperta que resume como ficarão dispostas as páginas. note que "ori." é a orientação, sendo | e - a representação da página: em pé ou deitada.
n° ori. normal -a -R -a e -R --------------------------------------------------------- 1 | 1 1 1 1 2 - 1 2 1 2 1 2 1 2 4 | 1 3 1 2 3 4 2 4 2 4 3 4 1 2 1 3 8 - 1 3 5 7 1 2 3 4 5 6 7 8 2 4 6 8 2 4 6 8 5 6 7 8 1 2 3 4 1 3 5 7
sabe esta linha separadora que está desenhada em volta das páginas? você pode tirá-la com a opção -o (de "outline"). e caso você não goste da fonte monoespaçada Courier
que é a padrão, pode utilizar outra com a opção -F. eu não aconselho, mas como tem gente que gosta...
$ mpage -8 -o -F Times /etc/services | lpr
outras opçõezinhas que podem ser úteis são o -H ("header") para incluir cabeçalho em todas as páginas (data, nome do arquivo e número da página) e o -s que define o número de espaços em branco que o TAB vai ocupar, o padrão é 8. outra que pode ajudar é o -c que concatena vários arquivos num só. então, num exemplo com cabeçalho, TAB de 4 espaços e juntando dois arquivos, temos:
$ mpage -8 -H -s 4 -c /etc/passwd /etc/services | lpr
calma que se ainda sobrou folhas na sua impressora temos as margens pra brincar. temos o -m para definir as margens da folha e o -M para as margens de cada página. a sintaxe é a mesma para ambas as opções e pode assustar numa primeira olhada.
o tamanho padrão de cada margem é de 20 pontos, ou seja, -m20
. note que NÃO podem haver espaços entre a opção e os seus argumentos! para especificar individualmente cada margem, temos as letras identificadoras rltb
, sendo:
r (right) direita l (left) esquerda t (top) superior b (bottom) inferior
então -m60rl40t10b
define tamanhos de: 60 pontos para margens direita e esquerda, 40 para o topo e 10 para o pé. variando os números das margens pode-se fazer coisas legais como centralizar o texto num quadrado no meio da página. cuidado para não confundir, pois o -m é a margem da folha, então independente se orientação está normal ou em paisagem, o topo é o topo.
mas como papel não é barato e ficar imprimindo cada teste desse também vai gastar tempo e tinta, vamos usar a cabeça, ou melhor, o linux. lembra que o mpage gera um arquivo em postscript para a impressora? então basta pegar um dos bilhares de visualizadores de postscript existentes e ver como ficará a impressão:
$ mpage -8 -H -m60rl40t10b -F Times /etc/services > arquivo.ps
$ meu-visualizador arquivo.ps
$ lpr arquivo.ps
infelizmente, os visualizadores bons são todos para X... o único que conheço pro console é o gs -sDEVICE=vgalib
, que vem no pacote do ghostscript
(http://www.cs.wisc.edu/~ghost), mas ele apenas lhe dá "uma idéia" de como o arquivo ficará &:) nesse mesmo pacote tem o gv
(para eca-X) que quebra o galho.