K.3. IPP Rules

IPP Rules specify relations between IPP attributes.

K.3.1. SPConstraint

An SPConstraint rule specifies values of two incompatible IPP attributes, for example two-sided printing on transparency media. The rule is formatted like this:

*SPConstraint: <mnemonic>  \  1
   <attrib>/[!]<value>     \  2
   <attrib>/[!]<value>        3


The rule prefix and identifying <mnemonic>.


The first IPP attribute/value pair. An optional ! before a value negates it, and selects all other attribute values.


The second IPP attribute/value pair, that is incompatible with the first.

Some examples:

*SPConstraint: transparency-two-sided \
    media-type/transparency \

*SPConstraint: booklet-punch \
    org.savapage-finishings-booklet/!none \


SPConstraint is the IPP counterpart of the UIConstraints directive found in PPD files.

CUPS does not enforce constraints when printing. Constraints must be managed and resolved by the user interface, because there is usually no way to specify preferences or intentions for automatic resolution of constraints by the driver or other filters. From CUPS: Common Unix Printing System by Michael R. Sweet, Sams Publishing, 2002 (page 337).

SPConstraint rules are used by SavaPage to validate user input when specifying a print job.

K.3.1.1. Internal SPConstraint Rules

SavaPage has predefined rule sets. When activated, they are applied globally, independent of any PPDE file.

K.3.1.2. Booklet SPConstraint Set

This set is for org.savapage-finishings-booklet and must be activated by setting configuration property ipp.ext.constraint.booklet.enable to Y.

*SPConstraint: sp-booklet-number-up-1 \
    org.savapage-finishings-booklet/!none \

*SPConstraint: sp-booklet-number-up-4 \
    org.savapage-finishings-booklet/!none \

*SPConstraint: sp-booklet-number-up-6 \
    org.savapage-finishings-booklet/!none \

*SPConstraint: sp-booklet-number-up-9 \
    org.savapage-finishings-booklet/!none \

*SPConstraint: sp-booklet-one-sided \
    org.savapage-finishings-booklet/!none \

*SPConstraint: sp-booklet-rotate-180-on \
    org.savapage-finishings-booklet/!none \


When Media Cost is specified for Proxy Printers or Job Tickets supporting booklet finishing, activating this set is crucial for calculating the right cost for booklet print jobs. See Section, “Printer Costs” and Section K.5.1, “Job Ticket Media Options”.


When this set is activated, user choices will be restricted to number-up/2 and side/!one-sided. As this is correct for cost calculation, these options will probably not deliver the intended booklet. So, make sure to review the required IPP options for the booklet job, and use SPExtra rules to customize proxy printer instances where needed.