Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 8 Jul 2000 14:01:05 -0700 (PDT)
From:      papowell@astart.com
To:        chuckr@picnic.mat.net, papowell@astart.com
Cc:        andrews@technologist.com, arch@FreeBSD.ORG, drosih@rpi.edu, imp@village.org, nik@FreeBSD.ORG, sheldonh@uunet.co.za, will@almanac.yi.org
Subject:   Re: Bringing LPRng into FreeBSD? - License Issues
Message-ID:  <200007082101.OAA26787@h4.private>

next in thread | raw e-mail | index | archive | help
I have been reviewing some of the postings that folks have sent on
this topic,  and I would like to provide some clarification about
printing.

I think that there is a bit of confusion about the overall issue
of printing.  This is probably due to the fact that most people
close their eyes to printing as soon as it is working for them,
and hope never to get involved with configuring it again.  A MOST
perceptive and reasonable attitude, given the horrible state of
printing.

Lets start at the back end.

What Gets Sent To The Printer

    Basically,  a stream of bytes.  The FORMAT of this stream of
  bytes is the critical issue.  Most printers usually support a
  limited number of formats that they recognize:
  
  PCL        - this is really text + control sequences
  PostScript - this is PostScript
  
  Now this is the 'basic' format.  In addition,  most printers
  require additional structure on this format,  or additional
  'support' for various things:
  
  PJL - Printer Job Language
     HP printers use this for 'metacontrol' of printers
  
  PostScript Document Structure Conventions
     How you will organize the PostScript
  
  PostScript PPD + Embedded Control Commands
    PostScript Printer Description files tell WHAT
    capabilities a printer has
    You use this to put commands into a PostScript file
    that will cause the printer to select the correct
    input bin, output bin, paper type, etc.

How Does It Get There
  You can send it over a communication channel -

   Serial Channel
   Parallel Channel
   Network Channel

  Each of these channels MAY have a protocol used to transmit documents
  of a specific format.  For example,  if you want to send 'binary PostScript'
  over a 7 bit serial channel,  then you need to use the 'TBCP' encoding
  for your PostScript job.

  Network Channels are REALLY fun, because you have not only the basic
  network level protocol, (TCP/IP, IPX, AppleTalk, etc.),  but also
  application protocols such as the 'Appsocket', 'Socket', RFC1179, and others.

  This is why just sending a file to the printer via 'cat' or 'netcat' may
  have some unexpected side effects.  Such as the file not getting printed :-).

Print Spooler or Manager

  This is effectively the interface between a user program that is generating
  a job to print and the actual device.  In some cases,  this is just
  'open /dev/lp0 and write to it' by the application.  But usually  it is
  a system service.

  For example,  the 'lpd' server and the 'lpr' client programs are the commonly
  used BSD UNIX print spooler,  'lpsched' and 'lp' on SystemV, and so forth.

  These system work by having the user or application use the client program
  send a copy of print job to the server program via a network connection
  (or copy it to a special spool queue directory).  The server then sends the
  job to the appropriate printer using the appropriate protocol on the appropriate
  interface or network address.

Format Conversion
  Many times print jobs are in a format not supported by a printer.  This
  means that Format conversion must be done on the print job.  You might
  also want the 'Make the printer do this' which are part of the print job
  or meta information to be preserved by the format conversion.

Application Print Job Generation
  This is the actual generation of the print job, i.e. - a string of
  bytes + meta information about the job.

  In many of the postings,  I noticed that people were referring to
  apsfilter, a2ps, etc.,  GhostScript, and other programs.  These are
  used in the printing process as FORMAT converters.

Where is the format conversion done?

  You can do it in the application program.   This is common.  For
  example,  a screen dump program will convert the raster image to
  PostScript, PBM, or some other format.  However,  many application
  programs produce only one output format, perhaps suitable for
  only one type of printer.  If the output is PostScript, then
  usually it is pretty simple and will print on almost all PostScript
  printers.  But not always.

  You can do it by having the application program send
  its output to the format converter, which then passes it to
  the print spooler.  This is where a2ps,  magicfilter,
  and other format conversion programs are used.  Usually
  these work by determining the input file type,  the desired
  output file format,  and then running a set of conversion
  programs on the file until the desired file format is
  produced.

  You can have the print spooler do the format conversion.
  This usually is done by having the print spooler call the
  a2ps, magicfilter, or formatconversion.  The benefit of this
  is that the print spooler usually has a better idea of the
  desired output format and can provide more information to the
  conversion process.  This usually (not always!) gives better
  conversion results.

Question:  Do I need format conversion?
Answer:    If your files are in the same basic format as your
  printer requires,  then you do not require format conversion.

Question:  But my printer does not understand PostScript and
  I want to print PostScript files!
Answer:    Then you will require a PostScript to printer compatible
  input converter.  GhostScript has support for a very wide variety
  of output formats.

Question:  Why is this so complicated?
Answer:  because there are a large number of choices at each point,
  and a large number of different applications generating output.
  And a very long set of legacy applications and formats.

Question:  What is a 'printer driver' and why doesn't UNIX have them?
Answer:  The 'print driver' that you are talking about is really
  a set of configuration information AND a set of conversion libraries
  that are used by application programs to generate output that is
  compatible with a device.  There is a well defined set of API's
  for these conversion routines,  and a well defined set of API's
  that allow the conversion routines to determine what capabilities
  printers have.

  Microsoft has changed the methods and APIs for doing printing at least
  4 times...  This has the benefit that they do not have to support
  legacy APIs,  and can update their printing stuff fairly easy by
  simply replacing everything each release.

Question:  Well,  why doesn't somebody do this for UNIX?
Answer:    This has been done several times,  but the problem is one
  of 'legacy' software and 'proprietary' interfaces.  Several attempts
  have been made to do this,  but this would require a lot of programs
  to be retrofitted with this capability.  In addition,  several of the
  proposed standards required the purchase or use of special libraries,
  etc., that did not sit well with various users.

Patrick Powell                 Astart Technologies,
papowell@astart.com            9475 Chesapeake Drive, Suite D,
Network and System             San Diego, CA 92123
  Consulting                   858-874-6543 FAX 858-279-8424 
LPRng - Print Spooler (http://www.astart.com)


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200007082101.OAA26787>