STANNIX Community


Manual: pbmtext

Pbmtext User Manual(1)				   General Commands Manual			      Pbmtext User Manual(1)

NAME
       pbmtext - render text into a PBM image

SYNOPSIS
       pbmtext	[-wchar]  [-font fontfile] [-builtin fontname] [-space pixels] [-lspace pixels] [-nomargins] [-width pixels]
       [-load-entire-font] [-verbose] [-dry-run] [-text-dump] [text]

       Minimum unique abbreviation of option is acceptable.  You may use double hyphens instead of single hyphen  to  denote
       options.	 You may use white space in place of the equals sign to separate an option name from its value.

DESCRIPTION
       This program is part of Netpbm(1).

       pbmtext	takes  the specified text, either a single line from the command line or multiple lines from standard input,
       and renders it into a PBM graphical image.

       The text rendered is all the non-option command line arguments, separated by spaces, except that if there are no non-
       option command line arguments, it is Standard Input.

       In the image, each line of input is a line of output.  Lines are
	 delimited by newline characters.

       The program renders any character in an input line that is not in the font
	 as a space.  Note that control characters usually aren't in the font, but
	 some fonts have glyphs for them.  The newline characters that delimit lines
	 in of Standard Input are not in any line.

       Tab characters are rendered as a number of spaces; any entry in the font
	 for the tab code point is irrelevant.	The number of spaces is such as to
	 create tab stops every 8 characters.  Note that this is not useful if the
	 font is proportional.

       The image is just wide enough for the longest line of text, plus margins, and just high enough to contain  the  lines
       of text, plus margins.

       The  left  and  right margins are twice the width of the widest character in the font; the top and bottom margins are
       the height of the tallest character in the font.	 But if the text is only one line, all the margins are half of this.
       You can use the -nomargins option to eliminate the margins.

       pbmtext renders left to right.  It cannot render vertically or right to left.

       pbmtextps does the same thing as pbmtext, but uses Ghostscript to generate the characters, which means  you  can	 use
       Postscript  fonts.   But	 it also means you have to have Ghostscript installed and it isn't as fast.  Also, pbmtextps
       generates only one line of text, whereas pbmtext can create multiple lines.

       pbmtext is meant for simple text.  If you're working with a document, you would be better off using a  document	for‐
       matting program to "print" to a Postscript file, then feeding that Postscript to pstopnm.

OPTIONS
       In  addition  to	 the  options common to all programs based on libnetpbm (most notably -quiet, see  Common Options ),
       pbmtext recognizes the following command line options:

       -wchar

	      By default, pbmtext takes a single-byte character stream as input.  When you specify -wchar, it  treats  input
	      text as a multibyte character stream encoded according to the current locale.  Normally, the user would supply
	      a BDF font file encoded in ISO-10646-1 with a -font option.

	      With -wchar, you cannot supply the text on the command line; it must be fed from standard input.

	      This option was new in Netpbm 10.82 (March 2018).

       -font

       -builtin
	      -builtin selects a font among those built into Netpbm.

	      -font  selects  a	 font that you supply yourself either as an X Window System BDF (Bitmap Distribution Format)
	      file or as a PBM file in a special form.

	      The default is the built in font "bdf."

	      "bdf" is Times-Roman 15 pixels high.  (That's about 14 point type printed at 75 dpi).

	      "fixed" is a built in fixed width font.

	      For information about other fonts, and how to make one of your own, see Fonts  below.

       -space pixels
	       Add pixels pixels of space between characters.  This is in addition to whatever space surrounding  characters
	      is built into the font, which is usually enough to produce a reasonable string of text.

	      pixels may be fractional, in which case the number of pixels added varies so as to achieve the specified aver‐
	      age.  For example -space=1.5 causes half the spaces to be 1 pixel and half to be 2 pixels.

	      pixels  may  be  negative	 to crowd text together, but the author has not put much thought or testing into how
	      this works in every possible case, so it might cause disastrous results.

       -lspace pixels
	       Add pixels pixels of space between lines.  This is in addition to whatever space above and  below  characters
	      is built into the font, which is usually enough to produce a reasonable line spacing.

	      pixels must be a whole number.

	      pixels  may  be  negative to crowd lines together, but the author has not put much thought or testing into how
	      this works in every possible case, so it might cause disastrous results.

       -nomargins
	      By default, pbmtext adds margins all around the image as described above.	 This option causes pbmtext  not  to
	      add any margins.

	      Note  that  there may still be space beyond the edges of the type because a character itself may include space
	      at its edges.  To eliminate all surrounding background, so the type touches all four edges of the	 image,	 use
	      pnmcrop.

       -width pixels
	      This specifies how much horizontal space the text is supposed to fit into.

	      If  the  input  is  one  line, pbmtext breaks it into multiple lines as needed to fit the specified width.  It
	      breaks it between characters, but does not pay attention to white space; it may break in the middle of a	word
	      and a line may begin or end with white space.

	      If  the  input is multiple lines, pbmtext assumes you already have line breaks where they make sense, and pbm‐
	      text simply truncates each line as needed to fit the specified width.

       -load-entire-font

	      When you use a BDF font, pbmtext will normally load from the font
		  only the characters needed for your text, not wasting time loading other
		  characters.  With this option, pbmtext will instead read the entire
		  font.	 It won't make any difference in the rendered output, but it lets
		  you check the integrity of the font file.

	      This option was new in Netpbm 10.91 (June 2020).	Before that, pbmtext always reads the entire font.

       -verbose
	      This makes pbmtext issue informtional messages about its processing.

       -dry-run

	      With this option, instead of outputting an image of the text, pbmtext just writes to Standard Output a message
	      telling the dimensions of the image it would have produced.

	      You can specify only one of -dry-run and -text-dump.

	      This option was new in Netpbm 10.75 (June 2016).

       -text-dump
	      This option causes pbmtext just to write to Standard Output the text in ASCII that  would	 be  rendered.	 The
	      output  reflects any text formatting, unprintable character substitution, tab expansion, etc.  It is for diag‐
	      nosing problems.	This option was new in Netpbm 10.82 (March 2018).

	      When -wchar is in effect, the output text will be in the encoding specified by the current locale.

	      You can specify only one of -dry-run and -text-dump.

	      This option was new in Netpbm 10.82 (March 2018).

USAGE
       Often, you want to place text over another image.  One way to do this is with ppmlabel.	For more flexible (but	com‐
       plex)  drawing  of  text	 on  an	 image, there is ppmdraw.  These do not give you the font options that pbmtext does,
       though.

       Another way is to use pbmtext to create an image containing the text, then use pamcomp to overlay the text image onto
       your base image.	 To make only the text (and not the entire rectangle containing it) cover the base image,  you	will
       need  to	 give pamcomp a mask, via its -alpha option.  You can just use the text image itself as the mask, as long as
       you also specify the -invert option to pamcomp.

       If you want to overlay colored text instead of black, just use ppmchange to change all black pixels to the  color  of
       your  choice before overlaying the text image.  But still use the original black and white image for the transparency
       mask.

       If you want the text at an angle, use pnmrotate on the text image (and transparency mask) before overlaying.

FONTS
       There are three kinds of fonts you an use with pbmtext:

       •      built in

       •      BDF

       •      PBM

   Built In Fonts
       There are two built in fonts: bdf and fixed.  You select these fonts with a -builtin option.

       bdf is the default when you specify no font information on the command line.  The naming reflects the  fact  that  it
       shares  many characteristics of BDF style fonts.	 When this font was implemented, pbmtext did not have the ability to
       read arbitrary BDF fonts specified by the -font option.	There is no external font file involved.

       bdf is encoded in ISO 8859-1 (Latin 1, 8-bit).  In addition to English it can handle  most  West	 European  languages
       (Spanish, French, German, Swedish ...)  This set lacks the Euro currency sign.

       fixed is ASCII (7-bit) only.

       While it is not an error to do so, you should not use the above built-in fonts with -wchar.

   BDF Font
       BDF  is an ancient font format that at one time was standard for the X Window System.  Now, you don't see it very of‐
       ten.  Until about 2024, you could find some BDF fonts on the Xfree86 web site.  Today, you can get the  full  package
       of the BDF fonts from XFree86 from the Netpbm web site .

   PBM Font
       To create a font as a PBM file (to use with the -font option), you just create a PBM image of the text matrix below.

       The first step is to display text matrix below on the screen, e.g. in an X11 window.

	   M ",/^_[`jpqy| M

	   /  !"#$%&'()*+ /
	   < ,-./01234567 <
	   > 89:;<=>?@ABC >
	   @ DEFGHIJKLMNO @
	   _ PQRSTUVWXYZ[ _
	   { \]^_`abcdefg {
	   } hijklmnopqrs }
	   ~ tuvwxyz{|}~  ~

	   M ",/^_[`jpqy| M

       Make sure it's a fixed width font -- This should display as a perfect rectangle.

       Also, try to use a simple display program.  Pbmtext divides this into a matrix of cells, all the same size, each con‐
       taining	one  character,	 so  it is important that whatever you use to display it display with uniform horizontal and
       vertical spacing.  Fancy word processing programs sometimes stretch characters in both directions to fit certain	 di‐
       mensions,  and that won't work.	Sometimes a display program scales a font to show a character larger or smaller than
       its natural size.  That too won't often work because the rounding involved in such scaling  causes  non-uniform	dis‐
       tances between characters.

       If you display the text matrix improperly, the usual symptom is that when you try to use the font, pbmtext fails with
       an  error  message telling you that the number of lines in the font isn't divisible by 11, or it can't find the blank
       band around the inner rectangle.	 Sometimes the symptom is that one of the characters displays with a  piece  of	 the
       character  that	is next to it in the matrix.  For example, "l" might display with a little piece of the "m" attached
       on its right.

       Do a screen grab or window dump of that text, using for instance xwd, xgrabsc, or  screendump.	Convert	 the  result
       into  a pbm file.  If necessary, use pamcut to remove anything you grabbed in addition to the text pictured above (or
       be a wimp and use a graphical editor such as Gimp).  Finally, run it through pnmcrop to make sure the edges are right
       up against the text.  pbmtext can figure out the sizes and spacings from that.

       There are some historical computer fonts, such as that used by the original IBM PC, in the form that you can  screen-
       grab  and  turn	into a PBM font file available from Stewart C Russell" (1).  There are fonts with various duodecimal
       digit glyphs at	treisara.deviantart.com .

       PBM fonts cannot be used with -wchar.

MULTI-BYTE INPUT
       In the past, English text was encoded in 7-bit ASCII.  8-bit and multibyte encodings were needed only for non-English
       languages.  This is not the case today.	As of this writing, 90% of all web pages are encoded in UTF-8.	 While	many
       of  them	 are  actually restricted to 7-bit ASCII, which is a subset of UTF-8, English text encoded in UTF-8 commonly
       employs "66 99" style quotation marks, which do not appear in ASCII.

       If your input text is UTF-8, you should use -wchar.  You may have to tweak the locale  setting.	 pbmtext  recognizes
       code points up to 65535.	 This is sufficient for the vast majority of text written in modern languages.

       In the default single-byte (or "narrow") character mode, pbmtext can handle 7-bit and 8-bit character sets.  Examples
       are  ASCII,  ISO	 8859 family, koi8-r/u and VISCII.  It is up to the user to supply a BDF file covering the necessary
       glyphs with the "-font" option.	The font file must be in the right encoding.

       pbmtext does not inspect the encoding of the font file.

LIMITATIONS
       If the text is from Standard Input, no line may be longer than 4999 characters.	If one is, the program	aborts	with
       an appropriate error message.

       If  the text is from Standard Input and contains a null character, the results are abnormal.  Lines may be truncated,
       and a single line may be considered multiple lines.  Normal text does not contain null characters, so  this  isn't  a
       big problem.

TIPS
       If  you	get garbled output, check the input text encoding and font file encoding.  When using -wchar, also check the
       current locale.

       To convert the encoding of a text file, use iconv or luit.

       To check the encoding of a BDF file, examine the CHARSET_REGISTRY line and the next line, which should be CHARSET_EN‐
       CODING:

	   $ grep -A1 CHARSET_REGISTRY font-a.bdf
	   CHARSET_REGISTRY "ISO8859"
	   CHARSET_ENCODING "1"

	   $ grep -A1 CHARSET_REGISTRY font-b.bdf
	   CHARSET_REGISTRY "ISO10646"
	   CHARSET_ENCODING "1"

       The latter is Unicode.  BDF files coded in ISO 16046-1 usually work  for	 Western  European  languages,	because	 ISO
       16046-1 expands ISO 8859-1 (also called "Latin-1") while maintaining the first 256 code points.	ISO 8859-1 itself is
       a superset of ASCII.  Run the above command and verify the necessary  glyphs are present.

       IMPORTANT: For input text, a different rule applies.  If you feed ISO 8859-1 text to pbmtext -wchar set up for UTF-8,
       the  output  will  be  garbled.	Unicode provides several encoding schemes and different ones are in effect for input
       text and font.  The difference between Unicode codepoint and the various encodings is a formidable  stumbling  block;
       beware of web pages that get the concept wrong.

       75%  of	the  BDF  files in the font collection available from the Netpbm website  are in ISO 10646-1.  Many have the
       Euro sign, Greek letters, etc., but they are placed at code points available to pbmtext only with -wchar.

       Before pbmtext had the -wchar option, one often had to produce a BDF file in an 8-bit encoding from a master BDF file
       encoded in ISO 10646-1.

       There are several programs that perform BDF encoding conversion.	 If you have the X Window  System  installed,  first
       look for ucs2any.  If you don't, you can download ucs2any.pl from Unicode fonts and tools for X11" (1).	This website
       has much useful information on fonts.

       Another converter is trbdf, included in the "trscripts" package, available in some GNU/Linux distributions.

       BDF files encoded in ISO 8859-2, ISO 8859-7, koi8-r, etc. are available from ISO 8859 Alphabet Soup" (1) and its sis‐
       ter  page The Cyrillic Charset Soup" (1).  Though the information is dated, these pages give a good overview of 8-bit
       character sets.

       To convert OTF or TTF font files to BDF, use otf2bdf by Mike Leisher or otftobdf (part of the libotf  package,  which
       is part of the  m17n  project).

SEE ALSO
       pbmtextps(1),  pamcut(1),  pnmcrop(1),  pamcomp(1),  ppmchange(1), pnmrotate(1), ppmlabel(1), ppmdraw(1), pstopnm(1),
       pbm(1), Pango , Cairo

AUTHOR
       Copyright (C) 1993 by Jef Poskanzer and George Phillips

DOCUMENT SOURCE
       This manual page was generated by the Netpbm tool 'makeman' from HTML source.  The master documentation is at

	      http://netpbm.sourceforge.net/doc/pbmtext.html

netpbm documentation					 29 May 2020				      Pbmtext User Manual(1)