.. /* * This file is part of the SavaPage project . * Copyright (c) 2026 Datraverse B.V. * Author: Rijk Ravestein. * * SPDX-FileCopyrightText: (c) 2020 Datraverse B.V. * SPDX-License-Identifier: CC-BY-SA-4.0 * * For more information, please contact Datraverse B.V. at this * address: info@datraverse.com */ .. _app-ipp-ext: .. figure:: ../images/manual/savapage-logo-no-text-100px.png :width: 75px IPP Extensions ============== .. admonition:: |ADMONITION_TABLE_OF_CONTENTS| - :numref:`{number}. {name} ` - :numref:`{number}. {name} ` - :numref:`{number}. {name} ` Internet Printing Protocol (IPP) attributes and values are registered by IANA. See the `IANA site `__ or the `PWG site `__ for a full list. SavaPage uses two types of extensions: - *Internal* extensions, which are intrinsic to |PRODUCT_NAME|. - *External* extensions, as defined in implementation specific configuration files. .. _app-ipp-ext-internal: Internal IPP Extensions ----------------------- .. contents:: :depth: 1 :local: Internal IPP Extension attributes are *intrinsic*\ to |PRODUCT_NAME|. To distinguish them from IANA registrations, their names have a ``org.savapage-`` prefix. Attribute value extensions with “type2 keyword” syntax are ``int.`` prefixed. Attributes and values are summarized in the sections below. Attribute values are IANA registered, and the semantics can be found in the Reference documents. Attribute value ``int.`` extensions are described separately. .. _app-ipp-ext-internal-pdd-mapping: Internal IPP - PPD Mapping Extensions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. contents:: :depth: 1 :local: These Internal IPP extensions are used to map vendor specific PPD options to an independent common denominator. They are *never* send to CUPS as print job descriptor as such. .. _app-ipp-org.savapage-finishings-staple: org.savapage-finishings-staple ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Staple positions are specified with respect to portrait media orientation. See `RFC3806 `__. .. list-table:: Internal IPP Attribute: org.savapage-finishings-staple :width: 100% :header-rows: 1 * - Value - Name - Syntax - Reference * - 3 - none - 1setOf type2 enum - RFC8011 * - 20 - staple-top-left - 1setOf type2 enum - RFC8011 * - 21 - staple-bottom-left - 1setOf type2 enum - RFC8011 * - 22 - staple-top-right - 1setOf type2 enum - RFC8011 * - 23 - staple-bottom-right - 1setOf type2 enum - RFC8011 * - 24 - edge-stitch-left - 1setOf type2 enum - RFC8011 * - 25 - edge-stitch-top - 1setOf type2 enum - RFC8011 * - 26 - edge-stitch-right - 1setOf type2 enum - RFC8011 * - 27 - edge-stitch-left-bottom - 1setOf type2 enum - RFC8011 * - 28 - staple-dual-left - 1setOf type2 enum - RFC8011 * - 29 - staple-dual-top - 1setOf type2 enum - RFC8011 * - 30 - staple-dual-right - 1setOf type2 enum - RFC8011 * - 31 - staple-dual-bottom - 1setOf type2 enum - RFC8011 * - 32 - staple-triple-left - 1setOf type2 enum - PWG5100.1 * - 33 - staple-triple-top - 1setOf type2 enum - PWG5100.1 * - 34 - staple-triple-right - 1setOf type2 enum - PWG5100.1 * - 35 - staple-triple-bottom - 1setOf type2 enum - PWG5100.1 .. _app-ipp-org.savapage-finishings-punch: org.savapage-finishings-punch ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Punch positions are specified with respect to portrait media orientation. See `RFC3806 `__. .. list-table:: Internal IPP Attribute: org.savapage-finishings-punch :width: 100% :header-rows: 1 * - Value - Name - Syntax - Reference * - 3 - none - 1setOf type2 enum - RFC8011 * - 70 - punch-top-left - 1setOf type2 enum - PWG5100.1 * - 71 - punch-bottom-left - 1setOf type2 enum - PWG5100.1 * - 72 - punch-top-right - 1setOf type2 enum - PWG5100.1 * - 73 - punch-bottom-right - 1setOf type2 enum - PWG5100.1 * - 74 - punch-dual-left - 1setOf type2 enum - PWG5100.1 * - 75 - punch-dual-top - 1setOf type2 enum - PWG5100.1 * - 76 - punch-dual-right - 1setOf type2 enum - PWG5100.1 * - 77 - punch-dual-bottom - 1setOf type2 enum - PWG5100.1 * - 78 - punch-triple-left - 1setOf type2 enum - PWG5100.1 * - 79 - punch-triple-top - 1setOf type2 enum - PWG5100.1 * - 80 - punch-triple-right - 1setOf type2 enum - PWG5100.1 * - 81 - punch-triple-bottom - 1setOf type2 enum - PWG5100.1 * - 82 - punch-quad-left - 1setOf type2 enum - PWG5100.1 * - 83 - punch-quad-top - 1setOf type2 enum - PWG5100.1 * - 84 - punch-quad-right - 1setOf type2 enum - PWG5100.1 * - 85 - punch-quad-bottom - 1setOf type2 enum - PWG5100.1 .. _app-ipp-org.savapage-finishings-fold: org.savapage-finishings-fold ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: Internal IPP Attribute: org.savapage-finishings-fold :width: 100% :header-rows: 1 * - Value - Name - Syntax - Reference * - 3 - none - 1setOf type2 enum - RFC8011 * - 90 - fold-accordion - 1setOf type2 enum - PWG5100.1 * - 91 - fold-double-gate - 1setOf type2 enum - PWG5100.1 * - 92 - fold-gate - 1setOf type2 enum - PWG5100.1 * - 93 - fold-half - 1setOf type2 enum - PWG5100.1 * - 94 - fold-half-z - 1setOf type2 enum - PWG5100.1 * - 95 - fold-left-gate - 1setOf type2 enum - PWG5100.1 * - 96 - fold-letter - 1setOf type2 enum - PWG5100.1 * - 97 - fold-parallel - 1setOf type2 enum - PWG5100.1 * - 98 - fold-poster - 1setOf type2 enum - PWG5100.1 * - 99 - fold-right-gate - 1setOf type2 enum - PWG5100.1 * - 100 - fold-z - 1setOf type2 enum - PWG5100.1 .. _app-ipp-org.savapage-finishings-booklet: org.savapage-finishings-booklet ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. list-table:: Internal IPP Attribute: org.savapage-finishings-booklet :width: 100% :header-rows: 1 * - Keyword Value - Syntax - Reference * - none - type2 keyword - RFC8011 * - toleft-totop - type2 keyword - PWG5100.3 * - toright-tobottom - type2 keyword - PWG5100.3 Also see :ref:`Booklet Imposition ` .. important:: For the right booklet cost calculation, make sure to activate the :ref:`Booklet SPConstraint Set `. .. _app-ipp-org.savapage-finishings-jog-offset: org.savapage-finishings-jog-offset ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A finishing that shifts Each Set in the :ref:`output-bin ` from the previous one by a small amount which is device dependent (PWG5100.1). .. list-table:: Internal IPP Attribute: org.savapage-finishings-jog-offset :width: 100% :header-rows: 1 * - Value - Name - Syntax - Reference * - 3 - none - 1setOf type2 enum - RFC8011 * - 14 - EachSet - 1setOf type2 enum - PWG5100.1 .. _app-ipp-org.savapage-requesting-user-name: org.savapage-requesting-user-name ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The internal IPP extension ``org.savapage-requesting-user-name`` is the equivalent of IPP PRINT_JOB operation attribute ``requesting-user-name``. In the example below it is mapped to PPD Option ``VENRequestingUserName``. .. code-block:: text *VENRequestingUserName org.savapage-requesting-user-name .. tip:: ``org.savapage-requesting-user-name`` can be used to pass the value of ``requesting-user-name`` as option in a ``*JCLOpenUI`` section of a PPD file. .. _app-ipp-ext-internal-job: Internal IPP Job Extensions ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. contents:: :depth: 1 :local: These options specify actions performed on a single printed copy. Each option is prefixed with ``*SPJob/Copy:`` See :ref:`Job Copy Options `. .. _app-ipp-org.savapage-cover-front-type: org.savapage-cover-front-type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This attribute indicates whether front covers are wanted for a printed copy and which sides of the cover must contain print-stream pages. .. list-table:: Internal IPP Attribute: org.savapage-cover-front-type :width: 100% :header-rows: 1 * - Keyword Value - Syntax - Reference * - no-cover - type2 keyword - PWG5100.3 * - print-none - type2 keyword - PWG5100.3 * - print-front - type2 keyword - PWG5100.3 * - print-back - type2 keyword - PWG5100.3 * - print-both - type2 keyword - PWG5100.3 For example: .. callout:: .. code-block:: text *SPJob/Copy: org.savapage-cover-front-type \ *no-cover print-none print-front print-back print-both # <1> .. annotations:: :1: Option to select ``no-cover`` as default and four other keyword values. .. _app-ipp-org.savapage-cover-front-media-source: org.savapage-cover-front-media-source ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The IPP :ref:`media-source ` the cover is printed from. For example: .. callout:: .. code-block:: text *SPJob/Copy: org.savapage-cover-front-media-source \ *tray-3 tray-4 # <1> .. annotations:: :1: Option to select ``tray-3`` as default media source for the cover. org.savapage-back-front-type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This attribute indicates whether back covers are wanted for a printed copy and which sides of the cover must contain print-stream pages. .. list-table:: Internal IPP Attribute: org.savapage-cover-back-type :width: 100% :header-rows: 1 * - Keyword Value - Syntax - Reference * - no-cover - type2 keyword - PWG5100.3 * - print-none - type2 keyword - PWG5100.3 * - print-front - type2 keyword - PWG5100.3 * - print-back - type2 keyword - PWG5100.3 * - print-both - type2 keyword - PWG5100.3 Also see :ref:`org.savapage-cover-front-type `. .. _app-ipp-org.savapage-cover-back-media-source: org.savapage-cover-back-media-source ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The IPP :ref:`media-source ` the cover is printed from. Also see :ref:`org.savapage-cover-front-media-source `. .. _app-ipp-ext-internal-job-to-ppd: Mapping Internal IPP Job Options to PPD ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Internal IPP Job Copy options can be mapped to PPD with :ref:`SPExtra ` rules as illustrated in the example below. .. code-block:: text *SPExtra/org.savapage-cover-front-media-source/tray-3: cover-front-tray-3 \ org.savapage-cover-front-type/!no-cover \ *FrontCover/Yes \ *FrontCoverPrintTray/TRAY3 *SPExtra/org.savapage-cover-front-media-source/tray-4: cover-front-tray-4 \ org.savapage-cover-front-type/!no-cover \ *FrontCover/Yes \ *FrontCoverPrintTray/TRAY4 .. _app-ipp-ext-internal-job-costs: IPP Job Copy Costs ^^^^^^^^^^^^^^^^^^ Copy Cost is charged per job *copy*, and specified for a combination of ``SPJob/Copy`` and other (``media*``) attribute values. Each cost rule is prefixed with ``*SPJob/Copy/Cost:`` and formatted like this: .. callout:: .. code-block:: text *SPJob/Copy/Cost: \ # <1> /[!] ... \ # <2> /[!] ... \ # <3> .. annotations:: :1: Decimal point ```` and identifying ````. :2: One or more IPP ``/`` pairs of type ``SPJob/Copy``. An optional ``!`` before a value negates it, and selects all other attribute values. :3: Optionally one or more other IPP ``/`` pairs. For example: .. code-block:: text *SPJob/Copy/Cost: 0.0200 cost-cover-front-A4 \ org.savapage-cover-front-type/!no-cover \ media/iso_a4_210x297mm *SPJob/Copy/Cost: 0.0400 cost-cover-front-A3 \ org.savapage-cover-front-type/!no-cover \ media/iso_a3_297x420mm .. _app-ipp-ext-internal-jobticket: Internal IPP Job Ticket Extensions ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. contents:: :depth: 1 :local: These Internal IPP extensions are used in Job Ticketing Cost Rules. See :ref:`Job Ticket Extensions `. .. _app-ipp-org.savapage-finishings-ext: org.savapage-finishings-ext ^^^^^^^^^^^^^^^^^^^^^^^^^^^ This attribute represents a finishing action, on a set of pages (a copy), executed externally by an operator, on the printed output. .. list-table:: Internal IPP Attribute: org.savapage-finishings-ext :width: 100% :widths: 20 20 60 :header-rows: 1 * - Keyword Value - Syntax - Reference * - none - type2 keyword - RFC8011 * - laminate - type2 keyword - PWG5100.1 * - bind - type2 keyword - PWG5100.1 * - adhesive - type2 keyword - Candidate Standard PWG 5100.1-2014: “sheets are bound using glue or adhesive.” .. _app-ipp-org.savapage-cover-type: org.savapage-cover-type ^^^^^^^^^^^^^^^^^^^^^^^ .. caution:: This attribute is intended for externally printed Job Tickets only. The same PDF document must be printed twice with different page ranges: 1. The first page(s) are printed on a single cover page. The cost for this action is calculated according to the :ref:`Job Ticket Copy Cost Rules `. 2. The rest of the pages are printed on selected media. The cost for this action is calculated according to the :ref:`Job Ticket Media Cost Rules `. .. list-table:: Internal IPP Attribute: org.savapage-cover-type :width: 100% :widths: 20 20 60 :header-rows: 1 * - Keyword Value - Syntax - Reference * - no-cover - type2 keyword - PWG5100.3 * - int.printfront - type2 keyword - SavaPage Extension: a single-sided printed cover page. * - int.printboth - type2 keyword - SavaPage Extension: a double-sided printed cover page. For example: .. callout:: .. code-block:: text *SPJobTicket/Copy: org.savapage-cover-type \ *no-cover int.printfront int.printboth # <1> .. annotations:: :1: Option to select ``no-cover`` as default and two internal values. The color of the cover can be specified with :ref:`org.savapage-cover-type-color ` .. _app-ipp-org.savapage-cover-type-color: org.savapage-cover-type-color ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This attribute specifies the color of the :ref:`org.savapage-cover-type `. For example: .. callout:: .. code-block:: text *SPJobTicket/Copy: org.savapage-cover-type-color \ *white yellow orange red pink blue green # <1> .. annotations:: :1: Option to select ``white`` as default and several other IANA defined ``media-color`` values. .. _app-ipp-org.savapage-job-sheets: org.savapage-job-sheets ^^^^^^^^^^^^^^^^^^^^^^^ This attribute determines which Job start/end sheet(s), if any, must be printed with a Job. Contrary to the IPP ``job-sheets`` definition, where sheets are part of the job, ``org.savapage-job-sheets`` are printed as a *separate* job. In this way sheets can be printed from a different ``media-source`` with distinctive :ref:`org.savapage-job-sheets-media ` and ``media-color``. A job sheet is a single ``monochrome`` page with job detail information. .. list-table:: Internal IPP Attribute: org.savapage-job-sheets :width: 100% :widths: 20 20 60 :header-rows: 1 * - Keyword Value - Syntax - Reference * - none - type2 keyword - RFC8011 * - job-start-sheet - type2 keyword - PWG5100.3: “A job sheet MUST be printed to indicate the start of the job”. * - job-end-sheet - type2 keyword - PWG5100.3: “A job sheet MUST be printed to indicate the end of the job”. .. _app-ipp-org.savapage-job-sheets-media: org.savapage-job-sheets-media ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The IPP ``media`` for :ref:`org.savapage-job-sheets `. Multiple keyword values are allowed, like ``iso_a4_210x297mm``, ``iso_a3_297x420mm``, etc. .. _app-ipp-ext-internal-marker: Internal IPP Marker ~~~~~~~~~~~~~~~~~~~ .. contents:: :depth: 1 :local: These Internal IPP extensions are used to add a special marker to a print job. They are *never* send to CUPS as such, but translated by SavaPage to "real" IPP or CUPS options. IPP marker names have a ``org.savapage.int-`` prefix. .. _app-ipp-org.savapage.int-page-rotate180: org.savapage.int-page-rotate180 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ SavaPage creates IPP print jobs that are printed according to :ref:`LandscapeOrientation ` ``Minus90``. This is convenient most of the time. For example, when a landscape oriented PDF is 4-up printed, and ``staple-top-right`` and ``punch-dual-right`` are available as finishing. But, what if ``staple-top-left`` and ``punch-dual-left`` are the only options available? In that case a 180 degrees rotation of the "Finished-Page" is needed. This is where the ``org.savapage.int-page-rotate180`` boolean option comes in. This marker is added to each proxy printer as option to make the printed result "Rotate by 180 degrees", and translated by SavaPage to the proper CUPS ``orientation-requested`` and ``number-up-layout`` values. .. list-table:: Internal IPP Marker Attribute: org.savapage.int-page-rotate180 :width: 100% :widths: 20 20 60 :header-rows: 1 * - Keyword Value - Syntax - Description * - 0 - boolean - Do not rotate. * - 1 - boolean - Rotate by 180 degrees. .. note:: ``org.savapage.int-page-rotate180`` can be used in :ref:`SPConstraint ` rules.