banner ; no meu sistema é chamado printerbanner
. Eu estava indo para um link para uma página man, mas não consigo encontrar um, seja online ou no meu HD ...
printerbanner
imprime o texto de lado, para permitir strings muito longas, parece não ter uma opção para imprimir normalmente.
Exemplos (cortesia de slm)
$ banner ken
# # ####### # #
# # # ## #
# # # # # #
### ##### # # #
# # # # # #
# # # # ##
# # ####### # #
Vários argumentos são impressos em linhas separadas:
$ banner one two
####### # # #######
# # ## # #
# # # # # #
# # # # # #####
# # # # # #
# # # ## #
####### # # #######
####### # # #######
# # # # # #
# # # # # #
# # # # # #
# # # # # #
# # # # # #
# ## ## #######
Obrigado por esses exemplos, slm. Meu printerbanner
imprime de lado, assim:
printerbanner -w 64 ken
## ##
############################################
############################################
############################################
############################################
## ####
########
###########
########## ###
## ########### ### ##
############# ####
########## ###
######## ##
######
###
##
########
################
####################
######################
#### ## ####
## ## ###
## ## ##
## ## ##
## ## ##
# ## ###
# ## ###
## ## #######
### ############
## ##########
########
## ##
##########################
##########################
##########################
##########################
## ###
##
###
###
###
## ####
##########################
##########################
#########################
######################
##
Aqui está um exemplo do programa PostScript produzido pela versão atual do script Bash que mencionei nos comentários. Desculpe pela falta de destaque da sintaxe, mas o destaque feito para lang-ps ou lang-postscript é horrível.
demo.ps
%!PS-Adobe-3.0
%%BoundingBox: 0 0 1024 768
%%Title: (TextLine)
%%Pages: 1 1
%%Creator: PSTextLine by PM 2Ring
%%Creationdate: 2014.11.07 13:30:51
%%EndComments
16 dict begin
%Use ISO Latin 1 font encoding
/ISOLatin{
dup length dict begin
{1 index /FID ne {def}{pop pop}ifelse}forall
/Encoding ISOLatin1Encoding def
currentdict
end
/IsoL1 exch definefont
}bind def
%Show string centred on the page and scaled to fill the page
/ShowCentred{
0 0 moveto
%Get string's bounding box.
dup
false charpath
flattenpath pathbbox
newpath
%Stack - Left Bottom Right Top
/y1 exch def /x1 exch def
/y0 exch def /x0 exch def
%Calculate new font scale
currentfont
/sx XM Margin sub x1 x0 sub div def
/sy YM Margin sub y1 y0 sub div def
/Scale sx sy le {sx}{sy}ifelse def
Scale scalefont setfont
%Calculate coordinates that will shift the centre of the box to the page centre
XM x0 x1 add Scale mul sub 2 div
YM y0 y1 add Scale mul sub 2 div
moveto
show
}bind def
%%Page: 1 1
gsave
/XM 1024 def
/YM 768 def
%Twice the X & Y margins
/Margin 16 def
/Times-Roman findfont
ISOLatin
72 scalefont setfont
(Unix & Linux)
ShowCentred
grestore
showpage
end
%%PageTrailer
%%Trailer
%%EOF
Ele deve ser exibido corretamente com qualquer visualizador PostScript, por exemplo, okular
. Para mostrá-lo com o utilitário ImageMagick / GraphicsMagick display
:
display -geometry 1024x768 -density 72 demo.ps
Aumente o parâmetro de densidade (por exemplo, tente 300) para melhorar a qualidade da imagem renderizada. Você pode mostrar a imagem em uma janela de pano de fundo usando a opção display
-backdrop
; use Control-Q para fechar a janela.
Você pode modificar a string de texto (Unix & Linux)
em demo.ps; o programa calculará automaticamente o tamanho de fonte correto para usar.
Para converter demo.ps para PDF, você poderia usar o utilitário ImageMagick / GraphicsMagick convert
convert -page 1024x768 demo.ps demo.pdf
Mas provavelmente é mais rápido (e com saída mais compacta) usar
ps2pdfwr -g1024x768 -r72 demo.ps demo.pdf
Finalmente, aqui está o script Bash sobre o qual eu estava falando anteriormente. Execute-o sem argumentos ou um argumento de -h
para uma mensagem de ajuda; -hh
imprime ajuda extra.
PSTextLine
#!/usr/bin/env bash
#Generate a Postscript file that prints a line of text that fills the screen
#Written by PM 2Ring 2014.11.01
#Posted to http://unix.stackexchange.com/a/164977/88378
bold(){ echo -e "\x1b[1m$*\x1b[0m"; }
help1()
{
cat << EOF
Display a single line of text at the largest scale that fits within the screen (or requested size).
This script generates a Postscript program which performs the scaling calculation and sets the text
in the requested font. The Postscript file is then displayed using the ImageMagick / GraphicsMagick
utility $(bold display), which should be installed on most modern Linux systems.
$(bold Usage:)
$(basename "$0") [-h] [-bden] [-f fontname] [-g geometry] [-m margin] [-q quality] [-s savename.ps] [-t text] text...
Options may be given in any order.
$(bold Options:)
-h : print this Help & exit. -hh prints extra help.
-b : disable the use of a Backdrop window.
-d : disable Display of the text.
-e : disable backslash Escaping of the text string.
-n : use Normal encoding instead of the default ISO Latin1 encoding.
-f : the name of the Font, either a PostScript or system font. Default = 'Times-Roman'
-g : Geometry, in WIDTHxHEIGHT format. If not given, the current default screen size is used.
-m : left & right (&/or top & bottom) Margin (in pixels) around text bounding box. Default = 8
-q : rendering Quality. Default quality = 1.0
-s : Save PostScript. Use $(bold '-s -') to save to stdout.
-t : the Text to display.
EOF
}
help2()
{
cat << EOF
By default, $(bold display) shows the text in a backdrop window. You can use Control-Q to close
$(bold display) windows, or use a right mouse click to bring up a context menu.
See the $(bold display) documentation for further information.
$(bold Text)
Multiple -t text options may be given, they will be joined together with an intervening space.
Any arguments specified after the options will be added to the text, so there is no need to quote
the text string, but it will be necessary to use -- to terminate the options section if any of the
subsequent text words begin with a - dash.
$(bold Font)
The font name must conform to the PostScript naming convention,
in particular, it cannot contain spaces. So if a font you'd like to use does
have spaces in its name try dropping the spaces or replacing them with a - dash.
$(bold Quality)
The quality setting is essentially an internal scaling factor for the $(bold display) utility.
The default quality setting of 1.0 is reasonably fast, but the outline of the text may look
jagged, especially with short text strings. Lower quality settings may be a little faster,
but the outline can look quite blurry; settings lower than 0.2 are virtually unusable.
High quality settings take longer to render but can look quite good; 2.0 should be
adequate for most purposes, 4.0 takes quite a while to render but looks great; higher settings
take even longer but the improved quality is unlikely to be noticeable.
$(bold Save)
Normally, the PostScript program generated by this script is simply piped into the $(bold display)
utility, but you may save it to a file. This allows you to show (or print) the rendered text
with other PostScript utilities. If you wish, you can edit the PostScript program by hand,
to change the font, text, page size, etc, as the text scaling calculations are performed within the
PostScript program.
To display the file "savename.ps" with okular:
okular savename.ps
To display it with GhostScript in a 1024x768 window:
gs -sDEVICE=x11alpha -dBATCH -g1024x768 -r72 savename.ps
$(bold Escape)
By default, this program prefixes all backslashes $(bold '\') and parentheses $(bold '()') in
the text string with a backslash to convert the string to PostScript form.
You can disable this behaviour using the $(bold '-e') option.
The PostScript language uses backslash as an escape character, and it uses parentheses instead
of quotes to enclose strings; any unmatched parentheses in a string must be backslash escaped
(but matched parentheses are ok). PostScript understands various other standard C escape sequences,
including character codes represented by backslashed octal sequences, but it does not understand
hexadecimal escape sequences.
Please see a PostScript reference for further information.
$(bold Encoding)
By default, this program uses the ISO Latin 1 encoding for text, but you can use PostScript's
Normal encoding vector by specifying the $(bold '-n') option. This program does not support
Unicode text.
EOF
}
Usage()
{
help1
[[ $showhelp -gt 1 ]] && help2
exit "$1"
}
#Get args from command line
Getargs()
{
showhelp=0
backdrop="-backdrop"
display=True
escape=True
encoding=ISOLatin
font=Times-Roman
geometry=""
margin=8
quality=1.0
text=""
savename=""
while getopts ':hbdenf:g:m:q:t:s:' opt; do
case $opt in
h)
showhelp=$((showhelp+1))
;;
b)
backdrop=""
;;
d)
display=False
;;
e)
escape=False
;;
n)
encoding=""
;;
f)
font=$OPTARG
;;
g)
geometry=$OPTARG
;;
m)
margin=$OPTARG
;;
q)
quality=$OPTARG
;;
s)
savename=$OPTARG
;;
t)
text="$text $OPTARG"
;;
?)
bold "Bad option -$OPTARG"; Usage 1
;;
esac
done
shift "$((OPTIND-1))" # Shift off the options and optional --.
text="$text $*"
}
[[ $# = 0 ]] && Usage 0
Getargs "$@"
[[ $showhelp -gt 0 ]] && Usage 0
#Get current default screen dimensions if no geometry is specified
[[ -z $geometry ]] && geometry="$(xdpyinfo | awk '/dimensions:/{print $2}')"
#Trim leading & trailing spaces from the text.
read -rd '' text <<< "$text"
#Escape backslashes and parentheses
[[ $escape = True ]] && text="$(sed 's/[\()]/\&/g' <<< "$text")"
#Allow '-' as a synonym for /dev/stdout for output file
[[ $savename = - ]] && savename=/dev/stdout
# cat << EOF
# $(bold Args)
# backdrop=<$backdrop>
# display=<$display>
# encoding=<$encoding>
# font=<$font>
# geometry=<$geometry>
# margin=<$margin>
# quality=<$quality>
# text=<$text>
# savename=<$savename>
#
# EOF
[[ -z $text ]] && { bold "No text found!"; Usage 1; }
[[ $display = False && -z $savename ]] &&
{ bold "No PostScript output or display requested!"; Usage 1; }
#Extract screen width & height from geometry string
IFS='x' read xm ym <<< "$geometry"
#Convert quality to density; the nominal density is 72 pixels per inch
density=$(bc <<< '72*'"$quality")
#Generate the PostScript file
read -rd '' postscript <<PSEOF
%!PS-Adobe-3.0
%%BoundingBox: 0 0 $xm $ym
%%Title: (TextLine)
%%Pages: 1 1
%%Creator: PSTextLine by PM 2Ring
%%Creationdate: $(date +'%Y.%m.%d %X')
%%EndComments
%%BeginProlog
16 dict begin
%Use ISO Latin 1 font encoding
/ISOLatin{
dup length dict begin
{1 index /FID ne {def}{pop pop}ifelse}forall
/Encoding ISOLatin1Encoding def
currentdict
end
/IsoL1 exch definefont
}bind def
%Show string centred on the page and scaled to fill the page
/ShowCentred{
0 0 moveto
%Get string's bounding box.
dup
false charpath
flattenpath pathbbox
newpath
%Stack - Left Bottom Right Top
/y1 exch def /x1 exch def
/y0 exch def /x0 exch def
%Calculate new font scale
currentfont
/sx XM Margin sub x1 x0 sub div def
/sy YM Margin sub y1 y0 sub div def
/Scale sx sy le {sx}{sy}ifelse def
Scale scalefont setfont
%Calculate coordinates that will shift the centre of the box to the page centre
XM x0 x1 add Scale mul sub 2 div
YM y0 y1 add Scale mul sub 2 div
moveto
show
}bind def
%%EndProlog
%%Page: 1 1
%%PageBoundingBox: 0 0 $xm $ym
gsave
/XM $xm def
/YM $ym def
%Twice the X & Y margins
/Margin $((2 * margin)) def
/$font findfont
$encoding
72 scalefont setfont
($text)
ShowCentred
grestore
showpage
end
%%PageTrailer
%%Trailer
%%EOF
PSEOF
[[ -n $savename ]] && echo >"$savename" "$postscript"
[[ $display = True ]] &&
display $backdrop -geometry "$geometry" -density "$density" PS:- <<< "$postscript"
# gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$savename" -g"$geometry" -r72 - <<< "$postscript"
# display $backdrop -geometry "$geometry" -density "$density" "$savename"