Appendix K. PPD Extensions

Table of Contents

K.1. PPD to IPP Mappings
K.1.1. Mapping PPD to IPP
K.1.2. Mapping PPD to IPP Extensions
K.1.3. Restricting Standard Options
K.2. PPD Rules
K.2.1. Generic PPD Rules
K.2.2. Custom PPD Rules
K.3. IPP Rules
K.3.1. SPConstraint
K.4. Job Ticket Extensions
K.4.1. Job Ticket Media Options
K.4.2. Job Ticket Sheet Options
K.4.3. Job Ticket Copy Options
K.4.4. Job Ticket Set Options
K.5. Tips and Tricks
K.5.1. Fast Print A4 and Letter to Single Tray
K.6. proxy-print.log

Vendor specific PPD option keywords are generally not mapped to IPP attributes by CUPS. That's why we do not get IPP attributes for finishings (staple, punch, fold, booklet) or collating delivered, when we ask CUPS for an IPP printer description. To bridge this gap we built our own mapping by means of a so-called PPD Extension .ppde file. With this mapping we are able to identify printer capabilities based on IPP and feed CUPS the vendor specific PPD options as IPP attributes when sending a print job. When printing, these IPP disguised PPD options are neatly applied by CUPS in the context of the PPD driver, so the right PostScript / PCL snippets are injected in the spool file.

PPD Extension files reside in the /opt/savapage/server/custom/cups/ directory. An annotated type-model-version.ppde.template file is installed there for your convenience. The .ppde file can be linked to a Proxy Printer. See Section 4.8.2, “Edit Proxy Printer”. When linked, the mapped PPD options will appear in the Printer Settings Dialog.


When the content of a PPD Extension File, assigned to any Proxy Printer, is changed, you must Synchronize the Proxy Printers to take those changes into effect.


PPD Extensions is an advanced feature. Please consult your SavaPage Community Representative before implementing.

K.1. PPD to IPP Mappings

The PPDE file holds mappings of original PPD file options to their IPP attribute and values counterparts. Mapped IPP attributes and values can either be IANA registered, or Internal SavaPage Extensions. This is the syntax:

*VENOption IppAttribute                  1
*VENOption *VENOptionValue-1 IppValue-1  2
*VENOption *VENOptionValue-n IppValue-n


VENOption must be replaced by its PPD equivalent (the VEN prefix stands for vendor specific).


VENOption / VENOptionValue pairs, whose values must be copied from the vendor PPD.

IppValue is the IPP value equivalent. The optional asterix * prefix of VENOptionValue tells if the value is the default. The IppValue must be unique in the VENOption set, while the VENOptionValue can be used more than once. In this way different IPP values can be mapped to the same PPD value.


VENOption / VENOptionValue pairs are relevant for IPP attributes that have keyword, enum or boolean syntax, because their values are confined to a predefined set. These pairs are not needed for IPP attributes that have unconfined values, because of their integer, name, or text syntax.

K.1.1. Mapping PPD to IPP

IANA IPP attributes available for mapping are presented in the sections below.

K.1.1.1. copies

*VENCopies copies

K.1.1.2. media-source

*VENMediaSource media-source
*VENMediaSource *VENAuto auto 
*VENMediaSource VENTop top
*VENMediaSource VENMiddle middle
*VENMediaSource VENBottom bottom
*VENMediaSource VENBypassTray by-pass-tray
*VENMediaSource VENManual manual
*VENMediaSource VENTray1 tray-1
# tray-2 ... tray-10

K.1.1.3. media-type

*VENMediaType media-type
*VENMediaType *VENPaper paper 
*VENMediaType VENTransparency transparency
*VENMediaType VENLabels labels
*VENMediaType VENLetterhead letterhead

K.1.1.4. output-bin

*VENOutputBin output-bin
*VENOutputBin *VENAuto     auto
*VENOutputBin VENBottom    bottom
*VENOutputBin VENCenter    center
*VENOutputBin VENTop       top
*VENOutputBin VENFaceDown  face-down
*VENOutputBin VENFaceUp    face-up
*VENOutputBin VENLargeCap  large-capacity
*VENOutputBin VENLeft      left
*VENOutputBin VENMiddle    middle
*VENOutputBin VENRear      rear
*VENOutputBin VENSide      side
*VENOutputBin VENStacker1  stacker-1
# stacker-2 ... stacker-5
*VENOutputBin VENTray1 tray-1
# tray-2 ... tray-5

K.1.1.5. print-color-mode

*VENPrintColorMode print-color-mode
*VENPrintColorMode *VENMonochrome monochrome 
*VENPrintColorMode VENColor       color

K.1.1.6. print-scaling

Since CUPS does not map the IPP print-scaling attribute to vendor PPD values, SavaPage falls back to the CUPS fit-to-page boolean attribute to scale documents by default. Value true scales the document up or down to fit the selected media. Value false preserves the physical size of the printed document and crops any content outside the selected media.

You can override this behavior by a custom vendor mapping, as shown below.

*VENPrintScaling print-scaling
*VENPrintScaling *VENFit fit
*VENPrintScaling VENNone none

See Section 3.5.1, “Page Scaling”.

K.1.1.7. sheet-collate

*VENCollate sheet-collate
*VENCollate *VENCollated  collated
*VENCollate VENUncollated uncollated

When sheet-collate is not mapped, SavaPage generates a single PDF and applies a one-copy print. The PDF is a concatenation of the requested number of copies with pages arranged in the right collate order.

K.1.1.8. sides

*VENSides sides
*VENSides VENOneSided          one-sided
*VENSides *VENTwoSidedLongEdge two-sided-long-edge
*VENSides VENTwoSidedShortEdge two-sided-short-edge

K.1.2. Mapping PPD to IPP Extensions

PPD Options can be mapped to Internal IPP Extensions. For example:

*VENStapleOption org.savapage-finishings-staple  1
*VENStapleOption *VENNone       3  2
*VENStapleOption VENTopLeft    20  3
*VENStapleOption VENBottomLeft 21  4


VENStapleOption is mapped to org.savapage-finishings-staple.


VENNone value of VENStapleOption is mapped to IPP enum value 3 (none). The asterix * tells this options is the default.


VENTopLeft value of VENStapleOption is mapped to IPP enum value 20 (staple-top-left).


VENBottomLeft value of VENStapleOption is mapped to IPP enum value 21 (staple-bottom-left).

K.1.3. Restricting Standard Options

Standard CUPS/IPP options, like number-up, are independent of PPD, and available for all printers types. The values of these options can be restricted with PPDE syntax. Below are examples for options currently supported by SavaPage.

K.1.3.1. number-up

For example, option number-up can be restricted to values 1 (default), 2 and 4 like this:

*number-up number-up
*number-up *1 1
*number-up 2 2
*number-up 4 4