|
From: Michael S. <mi...@ea...> - 2001-12-27 00:04:07
|
On Wednesday 26 December 2001 04:16 pm, Mark Hamzy wrote:
> ...
> of from the software printer driver. I need to reread all the IPP
> documentation. However, if each printer driver is an IPP server, can
> it handle that? Also, it defines the contents of the job as a block
Yes. It can also handle multiple printers using the same "server"
but using different URIs. More specifically, each printer is an
object, which can be mapped to one or more actual servers.
> of binary data. There are many steps in going from high level calls
> to the printer control language that a printer driver and operating
> system need.
No, it defines the print data as a typed block of data, which can
be "application/octet-stream" (auto-sense the type) or a specific
format identified by MIME type.
In the case of CUPS, we figure out the file type and then determine
which filter(s) need to be run to make a printable version of it.
The MIME type database is loaded at runtime from one or more config
files, and the PPD files for printers supplement this information
via the cupsFilter attributes. Finally, the filtered print data is
piped into a backend process which communicates with the printer.
> ...
> language. For example, there is another subgroup that is talking
> about printer capabilities. That should be included in what makes up
> a printer driver. Also, drivers need to have translatable resources
> such as form names that can be used to build a graphical
> representation of itself. Should there be many different pieces of
> software to install or protocols to
> speak to be able to handle each of these?
Again, in the case of CUPS we use PPD files with extra attributes
(which are ignored by Windows and MacOS clients) that define the
available capabilities, options, conflicts, and data for the driver
and filters that determine what the driver ends up getting.
Ultimately, you *really* want a static snapshot of what a driver can
do. This ideally should be a data file that can be read by a driver/
filter (using a standard API of course) to handle any printer/job
specific setup. For devices whose options depend on, say, what kind
of ink cartridge is installed, a background driver process can monitor
the printer and update the static snapshot as needed (and obviously
any driver would need to reject/stop a job that won't print on the
current configuration)
> ...
> The capabilities subgroup needs to query the printer driver at
> runtime and not though a static file (like a PPD). Also, I believe
> that applications will want to be able to select between different
> print paths based on the printer's capabilities.
This isn't Windows or OS/2. Applications will almost universally
produce PostScript until another format is universally supported.
Also, many PostScript apps already support PPD files, so it makes
sense to try to support it (even if you add your own extended
attributes which the standard apps ignore)
Also, trying to get printer drivers and applications to talk to
each other directly is a mistake. It doesn't scale. Better to
have the driver maintain a snapshot of the current configuration
than to introduce potentially long round-trip times which may
require UI intervention ("your printer is not connected or turned
off") or have to be postponed because the device is busy.
> ...
> A GUI application will need to query the printer driver for its
> strings as well as hints as to how to display the information.
Again, a *static* file makes this a lot easier. I'm not 100%
happy that the PPD spec only allows a single language right now,
but others have suggested a common translation catalog that covers
common options...
> ...
> While inkjets may not need acceleration, there are other printers
> that do. It is much more efficient to transfer a high level call like
> drawing a rounded box than it is to transfer a bitmap image of that
> box. Some examples of high level languages are: HP-GL/2, PCL6, and
> even Postscript. Should there be two different code paths for
> printing to an inkjet printer vs printing to a Postscript printer?
HP-GL/2 is a waste of time. There are too many special cases and
too many differences in appearance between models (even within HP
models).
PCL 6 is an option, but can be handled by existing software like
Ghostscript without requiring the application to know about it.
PostScript, with all its weaknesses, is still the defacto standard
printing format for UNIX apps. Any printing solution will have to
support it to be accepted, which is why CUPS includes a version
of GNU Ghostscript for non-PS printers, and why we use PPDs.
> ...
> One example of reducing data that is sent to the printer driver is to
> use device fonts that are resident in the printer. To achieve
> WYSIWYG printing,
> an application will have to query the printer driver for its font
> metrics.
The printer driver is not the right place for this; the printing
system needs to manage fonts, and provide an API for drivers to
register/retrieve them.
> ...
> something that the operating system should store and tell the
> application and printer driver.
The application should no nothing about what driver is being used,
just what capabilities the printer has...
--
______________________________________________________________________
Michael Sweet, Easy Software Products mi...@ea...
Printing Software for UNIX http://www.easysw.com
|