<html>
<!-- SECTION: Specifications -->
<head>
-<title>CUPS PPD Extensions</title>
-<meta name="keywords" content="Specifications">
-<meta name="creator" content="Mini-XML v2.7">
+ <title>CUPS PPD Extensions </title>
+ <meta name="keywords" content="Specifications">
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+ <meta name="creator" content="Mini-XML v2.7">
<style type="text/css"><!--
BODY {
font-family: lucida grande, geneva, helvetica, arial, sans-serif;
</table></div>
<h2 class="title">Contents</h2>
<ul class="contents">
-<ul class="subcontents">
<li><a href="#SYNTAX">PPD File Syntax</a></li>
<li><a href="#AUTOCONFIG">Auto-Configuration</a><ul class="subcontents">
-<li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
-<li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
-<li><a href="#OID">OIDMainKeyword</a></li>
+ <li><a href="#APAutoSetupTool">APAutoSetupTool</a></li>
+ <li><a href="#QUERYKEYWORD">?MainKeyword</a></li>
+ <li><a href="#OID">OIDMainKeyword</a></li>
</ul></li>
<li><a href="#PROFILES">Color Profiles</a><ul class="subcontents">
-<li><a href="#cupsColorProfile">cupsColorProfile</a></li>
-<li><a href="#cupsICCProfile">cupsICCProfile</a></li>
-<li><a href="#APCustom">Custom Color Matching Support</a></li>
+ <li><a href="#cupsColorProfile">cupsColorProfile</a></li>
+ <li><a href="#cupsICCProfile">cupsICCProfile</a></li>
+ <li><a href="#APCustom">Custom Color Matching Support</a></li>
</ul></li>
<li><a href="#CONSTRAINTS">Constraints</a><ul class="subcontents">
-<li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
-<li><a href="#cupsUIResolver">cupsUIResolver</a></li>
+ <li><a href="#cupsUIConstraints">cupsUIConstraints</a></li>
+ <li><a href="#cupsUIResolver">cupsUIResolver</a></li>
</ul></li>
<li><a href="#I18N">Globalized PPD Support</a></li>
<li><a href="#OPTIONS">CUPS 1.3/Mac OS X 10.6Custom Options</a></li>
<li><a href="#RASTERPS">Writing PostScript Option Commands for Raster Drivers</a></li>
<li><a href="#MEDIA">Media Keywords</a><ul class="subcontents">
-<li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
-<li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
-<li><a href="#cupsMinSize">cupsMinSize</a></li>
-<li><a href="#cupsMaxSize">cupsMaxSize</a></li>
+ <li><a href="#cupsMediaQualifier2">cupsMediaQualifier2</a></li>
+ <li><a href="#cupsMediaQualifier3">cupsMediaQualifier3</a></li>
+ <li><a href="#cupsMinSize">cupsMinSize</a></li>
+ <li><a href="#cupsMaxSize">cupsMaxSize</a></li>
</ul></li>
<li><a href="#ATTRIBUTES">General Attributes</a><ul class="subcontents">
-<li><a href="#cupsBackSide">cupsBackSide</a></li>
-<li><a href="#cupsCommands">cupsCommands</a></li>
-<li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
-<li><a href="#cupsFax">cupsFax</a></li>
-<li><a href="#cupsFilter">cupsFilter</a></li>
-<li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
-<li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
-<li><a href="#cupsIPPReason">cupsIPPReason</a></li>
-<li><a href="#cupsLanguages">cupsLanguages</a></li>
-<li><a href="#cupsManualCopies">cupsManualCopies</a></li>
-<li><a href="#cupsMarkerName">cupsMarkerName</a></li>
-<li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
-<li><a href="#cupsModelNumber">cupsModelNumber</a></li>
-<li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
-<li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
-<li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
-<li><a href="#cupsPreFilter">cupsPreFilter</a></li>
-<li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
-<li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
-<li><a href="#cupsVersion">cupsVersion</a></li>
+ <li><a href="#cupsBackSide">cupsBackSide</a></li>
+ <li><a href="#cupsCommands">cupsCommands</a></li>
+ <li><a href="#cupsEvenDuplex">cupsEvenDuplex</a></li>
+ <li><a href="#cupsFax">cupsFax</a></li>
+ <li><a href="#cupsFilter">cupsFilter</a></li>
+ <li><a href="#cupsFilter2">cupsFilter2</a></li>
+ <li><a href="#cupsFlipDuplex">cupsFlipDuplex</a></li>
+ <li><a href="#cupsIPPFinishings">cupsIPPFinishings</a></li>
+ <li><a href="#cupsIPPReason">cupsIPPReason</a></li>
+ <li><a href="#cupsIPPSupplies">cupsIPPSupplies</a></li>
+ <li><a href="#cupsLanguages">cupsLanguages</a></li>
+ <li><a href="#cupsManualCopies">cupsManualCopies</a></li>
+ <li><a href="#cupsMarkerName">cupsMarkerName</a></li>
+ <li><a href="#cupsMarkerNotice">cupsMarkerNotice</a></li>
+ <li><a href="#cupsModelNumber">cupsModelNumber</a></li>
+ <li><a href="#cupsPJLCharset">cupsPJLCharset</a></li>
+ <li><a href="#cupsPJLDisplay">cupsPJLDisplay</a></li>
+ <li><a href="#cupsPortMonitor">cupsPortMonitor</a></li>
+ <li><a href="#cupsPreFilter">cupsPreFilter</a></li>
+ <li><a href="#cupsPrintQuality">cupsPrintQuality</a></li>
+ <li><a href="#cupsSNMPSupplies">cupsSNMPSupplies</a></li>
+ <li><a href="#cupsVersion">cupsVersion</a></li>
</ul></li>
<li><a href="#MACOSX">Mac OS X Attributes</a><ul class="subcontents">
-<li><a href="#APDialogExtension">APDialogExtension</a></li>
-<li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
-<li><a href="#APHelpBook">APHelpBook</a></li>
-<li><a href="#APICADriver">APICADriver</a></li>
-<li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
-<li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
-<li><a href="#APPrinterPreset">APPrinterPreset</a></li>
-<li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
-<li><a href="#APScannerOnly">APScannerOnly</a></li>
-<li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
+ <li><a href="#APDialogExtension">APDialogExtension</a></li>
+ <li><a href="#APDuplexRequiresFlippedMargin">APDuplexRequiresFlippedMargin</a></li>
+ <li><a href="#APHelpBook">APHelpBook</a></li>
+ <li><a href="#APICADriver">APICADriver</a></li>
+ <li><a href="#APPrinterIconPath">APPrinterIconPath</a></li>
+ <li><a href="#APPrinterLowInkTool">APPrinterLowInkTool</a></li>
+ <li><a href="#APPrinterPreset">APPrinterPreset</a></li>
+ <li><a href="#APPrinterUtilityPath">APPrinterUtilityPath</a></li>
+ <li><a href="#APScannerOnly">APScannerOnly</a></li>
+ <li><a href="#APScanAppBundleID">APScanAppBundleID</a></li>
</ul></li>
<li><a href="#HISTORY">Change History</a></li>
+</ul>
<h2 class='title'><a name='SYNTAX'>PPD File Syntax</a></h2>
<p>The PPD 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 [<a href="http://tools.ietf.org/html/rfc5234" target="_blank">RFC5234</a>] defines the general format of lines in a PPD file:</p>
<p>CUPS supports several methods of auto-configuration via PPD keywords.</p>
-<h3><span class='info'>Deprecated</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
+<h3><span class='info'>Mac OS X 10.5</span><a name='APAutoSetupTool'>APAutoSetupTool</a></h3>
<p class='summary'>*APAutoSetupTool: "/LibraryPrinters/vendor/filename"</p>
-<p>This deprecated keyword defines a program that sets the default option choices. It is run when a printer is added from the <var>Add Printer</var> window or the <var>Nearby Printers</var> list in the <var>Print</var> dialog.</p>
+<p>This Mac OS X keyword defines a program that sets the default option choices. It is run when a printer is added from the <var>Add Printer</var> window or the <var>Nearby Printers</var> list in the <var>Print</var> dialog.</p>
<p>The program is provided with two arguments: the printer's device URI and the PPD file to be used for the printer. The program must write an updated PPD file to stdout.</p>
-<blockquote><b>Note:</b>
-
-<p>This keyword is deprecated. New printer drivers SHOULD provide a CUPS command filter and support the "AutoConfigure" command. Alternately, drivers MAY use the <a href="#OID">SNMP OID</a> keywords to configure network printers or <a href="#QUERYKEYWORD">PostScript query keywords</a> to configure PostScript printers.</p>
-
-</blockquote>
<p>Examples:</p>
<pre class='command'>
<p>Examples:</p>
<pre class='command'>
-<em>*% Specify a profile for printing at 360dpi on all media types</em>
+<em>*% Specify a profile for printing at 360dpi on all media types</em>
*cupsColorProfile 360dpi/-: "1.0 1.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
-<em>*% Specify a profile for printing at 720dpi on Glossy media</em>
+<em>*% Specify a profile for printing at 720dpi on Glossy media</em>
*cupsColorProfile 720dpi/Glossy: "1.0 2.5 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
-<em>*% Specify a default profile for printing at all other resolutions and media types</em>
+<em>*% Specify a default profile for printing at all other resolutions and media types</em>
*cupsColorProfile -/-: "0.9 2.0 1.0 0.0 -0.2 -0.4 1.0 0.0 -0.2 0.0 1.0"
</pre>
<p>Examples:</p>
<pre class='command'>
-<em>*% Specify a profile for CMYK printing at 360dpi on all media types</em>
+<em>*% Specify a profile for CMYK printing at 360dpi on all media types</em>
*cupsICCProfile CMYK..360dpi/360dpi CMYK: "/Library/Printers/vendor/Profiles/foo-360-cmyk.icc"
-<em>*% Specify a profile for RGB printing at 720dpi on Glossy media</em>
+<em>*% Specify a profile for RGB printing at 720dpi on Glossy media</em>
*cupsColorProfile RGB.Glossy.720dpi/720dpi Glossy: "/Library/Printers/vendor/Profiles/foo-720-glossy-rgb.icc"
-<em>*% Specify a default profile for printing at all other resolutions and media types</em>
+<em>*% Specify a default profile for printing at all other resolutions and media types</em>
*cupsICCProfile ../Default: "/Library/Printers/vendor/Profiles/foo-default.icc"
</pre>
<p>Examples:</p>
<pre class='command'>
-<em>*% Specify that 2-sided printing cannot happen on transparencies</em>
+<em>*% Specify that 2-sided printing cannot happen on transparencies</em>
*cupsUIConstraints transparency: "*Duplex *MediaType Transparency"
-<em>*% Specify that envelope printing cannot happen from the paper trays</em>
+<em>*% Specify that envelope printing cannot happen from the paper trays</em>
*cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
*cupsUIConstraints envelope: "*PageSize Env10 *InputSlot Tray1"
*cupsUIConstraints envelope: "*PageSize EnvDL *InputSlot Tray2"
<em>*% Specify an installable option constraint for the envelope feeder</em>
*cupsUIConstraints: "*InputSlot EnvFeeder *InstalledEnvFeeder"
-<em>*% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi</em>
+<em>*% Specify that photo printing cannot happen on plain paper or transparencies at 1200dpi</em>
*cupsUIConstraints photo: "*OutputMode Photo *MediaType Plain *Resolution 1200dpi"
*cupsUIConstraints photo: "*OutputMode Photo *MediaType Transparency *Resolution 1200dpi"
</pre>
<p>Examples:</p>
<pre class='command'>
-<em>*% Specify the options to change for the 2-sided transparency constraint</em>
+<em>*% Specify the options to change for the 2-sided transparency constraint</em>
*cupsUIResolver transparency: "*Duplex None *MediaType Plain"
<em>*% Specify the options to change for the envelope printing constraints. Notice
*% manual feed first, then we change the page size...</em>
*cupsUIResolver envelope: "*InputSlot EnvFeeder *InputSlot ManualFeed *PageSize Letter"
-<em>*% Specify the options to change for the photo printing constraints</em>
+<em>*% Specify the options to change for the photo printing constraints</em>
*cupsUIResolver photo: "*OutputMode Best *Resolution 600dpi"
</pre>
<p>Examples:</p>
<pre class='command'>
-<em>*% Base JCL key code option</em>
+<em>*% Base JCL key code option</em>
*JCLOpenUI JCLPasscode/Key Code: PickOne
*OrderDependency: 10 JCLSetup *JCLPasscode
*DefaultJCLPasscode: None
*JCLPasscode 3333: "@PJL SET PASSCODE = 3333<0A>"
*JCLCloseUI: *JCLPasscode
-<em>*% Custom JCL key code option</em>
+<em>*% Custom JCL key code option</em>
*CustomJCLPasscode True: "@PJL SET PASSCODE = \1<0A>"
*ParamCustomJCLPasscode Code/Key Code: 1 passcode 4 4
*ParamCustomWatermarkText Text: 1 string 0 32
-<em>*% Base PostScript gamma/density option</em>
+<em>*% Base PostScript gamma/density option</em>
*OpenUI GammaDensity/Gamma and Density: PickOne
*OrderDependency: 10 AnySetup *GammaDensity
*DefaultGammaDensity: Normal
*GammaDensity Dark/Darker: "<</cupsReal1 1.1/cupsReal2 1.5>>setpagedevice"
*CloseUI: *GammaDensity
-<em>*% Custom PostScript gamma/density option</em>
+<em>*% Custom PostScript gamma/density option</em>
*CustomGammaDensity True: "<</cupsReal1 3 -1 roll/cupsReal2 5 -1>>setpagedevice"
*ParamCustomGammaDensity Gamma: 1 curve 0.1 10
*ParamCustomGammaDensity Density: 2 real 0 2
<p>Examples:</p>
<pre class='command'>
-<em>*% Flip the page image for the back side of duplexed output</em>
+<em>*% Flip the page image for the back side of duplexed output</em>
*cupsBackSide: Flipped
-<em>*% Rotate the page image for the back side of duplexed output</em>
+<em>*% Rotate the page image for the back side of duplexed output</em>
*cupsBackSide: Rotated
</pre>
<p>Example:</p>
<pre class='command'>
-<em>*% Specify the list of commands we support</em>
+<em>*% Specify the list of commands we support</em>
*cupsCommands: "AutoConfigure Clean PrintSelfTestPage ReportLevels com.vendor.foo"
</pre>
<p>Example:</p>
<pre class='command'>
-<em>*% Always send an even number of pages when duplexing</em>
+<em>*% Always send an even number of pages when duplexing</em>
*cupsEvenDuplex: true
</pre>
<p>Examples:</p>
<pre class='command'>
-<em>*% Standard raster printer driver filter</em>
+<em>*% Standard raster printer driver filter</em>
*cupsFilter: "application/vnd.cups-raster 100 rastertofoo"
-<em>*% Plain text filter</em>
+<em>*% Plain text filter</em>
*cupsFilter: "text/plain 10 texttofoo"
-<em>*% Pass-through filter for PostScript printers</em>
+<em>*% Pass-through filter for PostScript printers</em>
*cupsFilter: "application/vnd.cups-postscript 0 -"
</pre>
+<h3><a name='cupsFilter2'>cupsFilter2</a></h3>
+
+<p class='summary'>*cupsFilter2: "source/type destination/type cost program"</p>
+
+<p>This string keyword provides a conversion rule from the given source type to the printer's native format using the filter "program". If a printer supports the source type directly, the special filter program "-" may be specified. The destination type is automatically created as needed and is passed to the filters and backend as the FINAL_CONTENT_TYPE value.</p>
+
+<p>Examples:</p>
+
+<pre class='command'>
+<em>*% Standard raster printer driver filter</em>
+*cupsFilter2: "application/vnd.cups-raster application/vnd.foo 100 rastertofoo"
+
+<em>*% Plain text filter</em>
+*cupsFilter2: "text/plain application/vnd.foo 10 texttofoo"
+
+<em>*% Pass-through filter for PostScript printers</em>
+*cupsFilter2: "application/vnd.cups-postscript application/postscript 0 -"
+</pre>
+
<h3><span class='info'>Deprecated</span><a name='cupsFlipDuplex'>cupsFlipDuplex</a></h3>
<p class='summary'>*cupsFlipDuplex: boolean</p>
*End
</pre>
+<h3><span class='info'>CUPS 1.5</span><a name='cupsIPPSupplies'>cupsIPPSupplies</a></h3>
+
+<p class='summary'>*cupsIPPSupplies: boolean</p>
+
+<p>This keyword tells the IPP backend whether it should report the current marker-xxx supply attribute values. The default value is <code>True</code>.
+
+<p>Example:</p>
+
+<pre class='command'>
+<em>*% Do not use IPP marker-xxx attributes to report supply levels</em>
+*cupsIPPSupplies: False
+</pre>
+
<h3><span class='info'>CUPS 1.2/Mac OS X 10.5</span><a name='cupsLanguages'>cupsLanguages</a></h3>
<p class='summary'>*cupsLanguages: "locale list"</p>
<p>Example:</p>
<pre class='command'>
-<em>*% Specify Canadian, UK, and US English, and Candian and French French</em>
+<em>*% Specify Canadian, UK, and US English, and Candian and French French</em>
*cupsLanguages: "en_CA en_UK en_US fr_CA fr_FR"
</pre>
<p>Example:</p>
<pre class='command'>
-<em>*% Tell the RIP filters to generate the copies for us</em>
+<em>*% Tell the RIP filters to generate the copies for us</em>
*cupsManualCopies: true
</pre>
<p>Example:</p>
<pre class='command'>
-<em>*% Specify an integer for a driver-specific model number</em>
+<em>*% Specify an integer for a driver-specific model number</em>
*cupsModelNumber: 1234
</pre>
*cupsPortMonitor socket/AppSocket Printing: "tbcp"
*cupsPortMonitor usb/USB Printing: "none"
-<em>*% Specify a printer-specific port monitor for an Epson USB printer</em>
+<em>*% Specify a printer-specific port monitor for an Epson USB printer</em>
*cupsPortMonitor usb/USB Status Monitor: "epson-usb"
</pre>
<p class='summary'>*cupsPreFilter: "source/type cost program"</p>
<p>This string keyword provides a pre-filter rule. The pre-filter
-program will be inserted in the conversion chain immediately
+program will be inserted in the conversion chain immediately
before the filter that accepts the given MIME type.</p>
<p>Examples:</p>
<p>Example:</p>
<pre class='command'>
-<em>*% Specify a CUPS 1.2 driver</em>
+<em>*% Specify a CUPS 1.2 driver</em>
*cupsVersion: "1.2"
</pre>
<em>*% Rotate the back side images</em>
*cupsBackSide: Rotated
-<em>*% Don't swap the top and bottom margins for the back side</em>
+<em>*% Don't swap the top and bottom margins for the back side</em>
*APDuplexRequiresFlippedMargin: false
</pre>