Scope

Identification

This document describes the PostScript Printer Description (PPD) file format and the supported extensions for the Common UNIX Printing System ("CUPS") Version 1.2. It should be used in conjunction with the Adobe PostScript Printer Description File Format Specification, Version 4.3 when creating PPD files for CUPS.

Document Overview

This CUPS PostScript Printer Description File Specification document is organized into the following sections:

PPD File Syntax

PostScript Printer Description ("PPD") files describe the capabilities of each printer and are used by CUPS to support printer-specific features and intelligent filtering.

The PPD file format is described in Adobe TechNote #5003: PostScript Printer Description File Format Specification Version 4.3.

The format is text-based and uses lines of up to 255 characters terminated by a carriage return, linefeed, or combination of carriage return and line feed. The following ABNF definition [RFC2234] defines the general format of lines in a PPD file:

    PPD-FILE = HEADER +(DATA / COMMENT / LINE-END)

    HEADER   = "*" 0x50.50.44.2D.41.64.6F.62.65 ":"   ; *PPD-Adobe:
               *WSP DQUOTE "4.3" DQUOTE LINE-END

    COMMENT  = "*%" *TCHAR LINE-END

    DATA     = "*" 1*KCHAR [ WSP 1*KCHAR [ "/" 1*TCHAR ] ] ":"
               1*(*WSP VALUE) LINE-END

    VALUE    = 1*TCHAR / DQUOTE 1*SCHAR DQUOTE

    KCHAR    = ALPHA / DIGIT / "_" / "." / "-"

    SCHAR    = LINE-END / WSP / %x21 / %x23-7E / %xA0-FF

    TCHAR    = %x20-7E / %xA0-FF

    LINE-END = CR / LF / CR LF

General Attributes

cupsFilter

This string attribute provides a conversion rule of the form:

    source/type cost program

The destination type is assumed to the printer's type. If a printer supports the source type directly the special filter program "-" may be specified.

cupsFlipDuplex

This boolean attribute notifies the RIP filters that the destination printer requires an upside-down image for the back page. The default value is false.

cupsManualCopies

This boolean attribute notifies the RIP filters that the destination printer does not support copy generation in hardware. The default value is false.

cupsModelNumber

This integer attribute specifies a printer-specific model number. This number can be used by a filter program to adjust the output for a specific model of printer.

cupsProtocol

This optional attribute describes which binary communication protocol to use when printing binary PostScript data. The strings "None", "BCP", and "TBCP" are recognized, corresponding to no encoding, BCP, and TBCP respectively.

cupsVersion

This required attribute describes which version of the CUPS IDD was used for the PPD file extensions. Currently it must be the string "1.0", "1.1", or "1.2".

Custom Options

Color Profiles

cupsColorProfile

This string attribute specifies a color profile of the form:

    *cupsColorProfile Resolution/MediaType: "density gamma m00 m01 m02 m10 m11 m12 m20 m21 m22"

The Resolution and MediaType values may be "-" to act as a wildcard. Otherwise they must match one of the Resolution or MediaType attributes defined in the PPD file.

The density and gamma values define gamma and density adjustment function such that:

    f(x) = density * xgamma

The m00 through m22 values define a 3x3 transformation matrix for the CMY color values. The density function is applied after the CMY transformation:

    | m00 m01 m02 |
    | m10 m11 m12 |
    | m20 m21 m22 |

cupsICCProfile

This attribute specifies an ICC color profile of the form:

    *cupsICCProfile ColorModel.MediaType.Resolution/Description: "filename"

The ColorModel, MediaType, and Resolution keywords specify a selector for color profiles. If omitted, the color profile will match any option keyword for the corresponding main keyword.

The Description specifies human-readable text that is associated with the color profile. The filename portion specifies the ICC color profile to use; if the filename is not absolute, it is loaded relative to the /usr/share/cups/profiles directory.

Customizing the Profile Selection Keywords

The ColorModel, MediaType, and Resolution keywords can be reassigned to different main keywords, allowing drivers to do color profile selection based on different parameters. The cupsICCQualifier1, cupsICCQualifier2, and cupsICCQualifier3 attributes define the mapping from selector to main keyword:

    *cupsICCQualifier1: MainKeyword
    *cupsICCQualifier2: MainKeyword
    *cupsICCQualifier3: MainKeyword

The default mapping is as follows:

    *cupsICCQualifier1: ColorModel
    *cupsICCQualifier2: MediaType
    *cupsICCQualifier3: Resolution

I18N Support

CUPS 1.2 and higher adds support for PPD files containing multiple languages by following the following rules:

  1. The LanguageVersion is English
  2. The LanguageEncoding is ISOLatin1
  3. Main and option keywords may not exceed 34 characters, which is a subset of what the Adobe PPD spec allows.
  4. Translations are specified using a locale prefix of the form "ll" or "ll_CC." where "ll" is the 2-letter ISO language code and "CC" is the 2-letter ISO country code
  5. Translation strings are encoded using UTF-8.
  6. Main keywords are translated using any of the following forms:

    *ll.Translation MainKeyword/translation text: ""
    *ll_CC.Translation MainKeyword/translation text: ""

  7. Option keywords are translated using any of the following forms:

    *ll.MainKeyword OptionKeyword/translation text: ""
    *ll_CC.MainKeyword OptionKeyword/translation text: ""

The following example shows how a fictional Foobar Laser 9999 PPD file would be localized for English, French, and German:

    *LanguageVersion: English
    *LanguageEncoding: ISOLatin1
    *ModelName: "Foobar Laser 9999"
    *fr_FR.Translation ModelName/La Foobar Laser 9999: ""
    *de_DE.Translation ModelName/Foobar LaserDrucken 9999: ""
    ...
    *OpenUI *InputSlot/Paper Source: PickOne
    *OrderDependency: 10 AnySetup *InputSlot
    *DefaultInputSlot: Auto
    *fr_FR.Translation InputSlot/Papier source: ""
    *de_DE.Translation InputSlot/Papiereinzug: ""
    *InputSlot Auto/Default: "<>setpagedevice"
    *fr_FR.InputSlot Auto/Par Defaut: ""
    *de_DE.InputSlot Auto/Standard: ""
    *InputSlot Manual/Manual Feed: "<>setpagedevice"
    *fr_FR.InputSlot Manual/Manuel mecanisme de alimentation: ""
    *de_DE.InputSlot Manual/Manueller Einzug: ""
    *CloseUI: *InputSlot

Change History

Changes in CUPS 1.2

Changes in CUPS 1.1