[Printing-architecture] Coding the Common Printing Dialog and its interface - PPD and Foomatic extensions
Till Kamppeter
till.kamppeter at gmail.com
Fri Apr 25 10:19:50 PDT 2008
Hi,
here is my suggestion for part 1 of the specs, the extensions for PPDs:
1. Custom options/Advanced data types
-------------------------------------
We use the CUPS extensions for custom options, so that not only boolean
and enumerated choice options are posible but also more advanced datatypes:
- integer numbers
- real numbers - interpreted linearly or exponentially, for example for
color and brightness adjustments
- lengths in points - for example for margin widths
- strings - for example for user names and fax numbers
- passwords - numerical or alphanumerical
See section "Custom Options" on
http://www.cups.org/documentation.php/spec-ppd.html
2. Multi-language PPDs
----------------------
We use also the CUPS extensions for multi-language PPDs. This way a
print queue can be set up on a server and the users on the clients can
use different desktop languages and the printer options appear in their
languages.
See section "Globalized PPD Support" on
http://www.cups.org/documentation.php/spec-ppd.html
3. "Quick Presets" button support
---------------------------------
There are two possibilities to describe such buttons in the PPD file
(and we should support both for maximum flexibility):
a) One option in the PPD has to be selected to represent the quick
preset buttons in the default view of the OpenUsability printing dialog.
This option will not appear under the tags then, even if it is tagged
in the PPD. It must be an enumerated choice option where each choice
will make up one button. We will select it by using the following
keyword ONCE in the PPD file:
*OPQuickPresetsOption: PrintoutMode
In this example "PrintoutMode" is the option selected to make up the
buttons.
In Foomatic we could add the tag
<QuickPresets />
to one option XML file to select the appropriate option.
b) With special keywords we define each button and which options it
should set:
*OPQuickPresetsButton Document/Office Document: "Resolution=600dpi
MediaType=Plain"
*OPQuickPresetsButton Photo/Photo: "Resolution=1200dpi MediaType=Glossy"
...
Translations for the button texts are done as with option choices:
*de.OPQuickPresetsButton Document/Bürodokument: ""
*de.OPQuickPresetsButton Photo/Foto: ""
...
In Foomatic we could create an option with a new "quickpresets" option type.
The buttons have a little bit different meaning with a) and b).
In case a) always one button is selected, as each option of the PPD must
have a value. If the driver or the PPD is designed so that this option
sets several of the other options, there must either a quick preset
button for manual setting of the other options or each of the other
options must have an "Automatic", or "None" setting where the setting
from the quick preset buttons is used and its usual settings (this
latter case is the case for the "PrintoutMode" option in Foomatic PPDs.
Case a) makes the quick presets available in all dialogs, not only in
the OpenUsability one. The quick presets simply appear as an extra option.
In case b) clicking a button sets all options in the button's list to
the given values. After having clicked one can change the options
individually. Here no button would be shown as selected, or on each
option change (independent whether by button or individually) one checks
the option settings against the button's lists and shows each button
whose options are set as in its list pressed down. In case b) there will
be no option appearing in non-OpenUsability dialogs to represent the
quick preset buttons.
For legacy PPDs without special keywords for quick preset buttons we use
the "PrintoutMode" option, as this one does exactly this task in
Foomatic PPDs.
A second fallback could be to set standard options for the printout quality:
Button Settings
------------------------------------------------------------------
Draft Resolution=<Lowest Choice> Economode=On
Normal Resolution=<Second highest value> Economode=Off
High Quality Resolution=<Highest Value> Economode=Off
4. Option Tagging
-----------------
In the OpenUsability printing dialogs options are categorized by tags.
In contrary to groups an option can have more than one tag. The option
will be shown if any of the tags is selected. For example the Duplex
option can have a "Paper Handling" and "Resource Saving" tag. If either
of these is selected, the option will be shown.
In PPD options must be tagged to make this working. Let us define tags
and translations for their human-readable texts like this:
*OPOptionTag ResourceSaving/Resource Saving: ""
*de.OPOptionTag ResourceSaving/Resourcen sparen: ""
Let each option have this keyword to assign it with one or more tags:
*OPTagList Duplex: "ResourceSaving PaperHandling
Finishing"
*End
In Foomatic add a construction like this to each option XML file (into
the "<arg_execution>...</arg_execution>" section):
<tags>
<tag id="PaperHandling">
<en>Paper Handling</en>
<de>Papierhandhabung</de>
</tag>
<tag id="ResourceSaving">
<en>Resource Saving</en>
<de>Resourcen sparen</de>
</tag>
</tags>
5. Icons for options and choices
--------------------------------
Let us also give the possibility to add an icon to every human-readable
text item in the dialog: option names, choice names, tag names. ...
To not need to invent too many new keywords, let us simply add
"translations" with the language code "OPIcon" for option choices and
let them have the base-64-UU-encoded icon, either a PNG image or SVG
drawing as its code:
*OPIcon.InputSlot Auto: "begin-base64 644 InputSlot-Auto.png
iVBORw0KGgoAAAANSUhEUgAAAOAAAAC6CAMAAACA5rFCAAADAFBMVEX/////
/8z/zP//zMz/zGb/zDP/zAD/mWb/mTP/mQD/Zmb/MzPM///M/8zM/zPMzP/M
zMzMzJnMzGbMzDPMzADMmf/MmczMmZnMmWbMmTPMmQDMZjPMZgCZzP+ZzMyZ
...
4SfnV38C83lfZ0FU5/N58n1aZI2z2fxfwOTVfkPrH2h/Luv33J7bc3tuz+25
Pbfn9tye25+5/T9t163O+/ghTQAAAABJRU5ErkJggg==
===="
*End
For main keywords lets use
*OPIcon InputSlot: "begin-base64 644 InputSlot.png
iVBORw0KGgoAAAANSUhEUgAAAOAAAAC6CAMAAACA5rFCAAADAFBMVEX/////
..."
*End
And this is for the option tags:
*OPIcon.OPOptionTag ResourceSaving: "begin-base64 644 ResourceSaving.svg
..."
*End
For a manufacturer-specific picture (logo or so) let us use '*OPIcon
Manufacturer: "..."' and for a model-specific picture (image of the
printer or so) let us use '*OPIcon ModelName: "..."'.
What do you think about these specs for PPD extensions? Should we go
this way? Or is there something missing? Breaking Adobe specs? If all is
OK, we should start coding the dialog and the dialog interface based on
these extensions.
Till
More information about the Printing-architecture
mailing list