Skip to main content
Workforce LibreTexts

6.6: Page Description Languages

  • Page ID
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    Many page description languages (PDL) exist today; however, Printer Command Language (PCL) and PostScript are the most common and widely adopted. Each has its strengths, weaknesses, and jobs for which it is best suited. It is important to understand these differences and choose the method best suited to your particular printing requirements.


    PCL is a page description language developed by Hewlett-Packard (HP) and was originally used on HP impact and inkjet printers. PCL 3 was the first version to be used with a laser printer, the HP LaserJet, released in 1984, around the same time PostScript was introduced. The goal of PCL was to have an efficient printer control language that could be implemented consistently across HP’s printer line. Simple commands and functionality would not require expensive print controllers, making it very attractive for utility-level printing. Many other printer manufacturers implemented PCL for this reason. Commands are embedded at the beginning of the print job and set the parameters for the printer to use for the job. These commands remain set until a new value is assigned for the command or the printer is reset. If the printer does not support a specific command, it ignores it.

    When colour laser printing became available, PCL 5c was developed with similar goals. New commands were added to the existing command set, as was the case with all the predecessors, to add support for colour printing. This ensured backwards compatibility while minimizing development. When it came to colour, HP’s goal was to have colour on the printed page look the same as what was displayed on screen. There were many challenges to achieving this, so print quality adjustments were included to give users the ability to fine-tune the output. With the emergence and widespread adoption of the sRGB standard to define and describe colour on a display, the PCL colour command set could be simplified by adopting this standard for colour printing. Thus, HP’s goal could be achieved without the complexity and overhead of a full colour management system. Operating systems and applications, for the most part, have standardized how they display colour in sRGB, so this approach is the simplest way to achieve acceptable colour between display and print. PCL is most appropriate for general office use where a simple, low-cost print device that produces good quality colour is expected. It is not suitable, however, for a colour critical or print production environment where precision and full colour management is required.


    PostScript is a page description and programming language developed by Adobe that describes text, graphics, and images, and their placement on a page, independent of the intended output destination. The code created is in plain text that can be written and examined with a basic text editor. The output itself can either be to a printer, display, or other device possessing a PostScript interpreter, making it a device independent language. The interpreter processes the PostScript instructions to create a raster image the device can render. The interpreter is often referred to as a RIP or raster image processor for this reason. It is possible to write valid PostScript code from scratch, but it is impractical as page composition applications can either generate the PostScript code directly or can utilize a print driver, which can convert the page to the PostScript language.

    Since PostScript is a general-purpose programming language, it includes many elements that you wouldn’t associate specifically with printing such as data types (numbers, arrays, and strings) and control primitives (conditionals, loops, and procedures). It also has an interesting feature called dictionary, which stores information in a table consisting of a collection of key and value pairs. The values can be entered into the dictionary while the keys are used to reference the information needed. These features made possible documents that acted like an application which could generate pages dynamically from data directly on the printer itself. These printer-based applications were stored temporarily in memory or permanently in the printer’s hard drive, and triggered by a command in the print stream. These capabilities made variable data printing possible using PostScript and are still being used today for that purpose.

    The first printer to use PostScript was the Apple LaserWriter in 1985. The same day that Apple announced the LaserWriter, Aldus Corporation announced PageMaker, a page layout application developed to take advantage of the Apple Macintosh computer’s GUI (graphical user interface) and the PostScript PDL. This series of events is considered by many as the genesis of the desktop publishing revolution. In fact, the term desktop publishing is attributed to the founder of Aldus Corporation.


    Portable document format (PDF) is one of the most popular file formats for displaying and printing documents. When this format was released by Adobe in 1993, it shared many of the same concepts and components of PostScript. But where PostScript was designed primarily to provide device independent consistency in print output, PDF was focused on maintaining the visual appearance of a document onscreen, independent of the operating system displaying it. Over the years, PDF has expanded to more specific-use specifications for engineering, archiving, health care, universal access, and printing.

    PDF/X is a branch of PDF and an ISO standard that deals specifically with print. It was developed by the Committee for Graphic Arts Technologies Standards (CGATS). Table 6.5 shows the evolution of the standard.

    Table 6.5 Evolution of PDF
    Data source: Adobe Systems Inc, 2008, p. 4
    Preset Compatibility Settings Usage
    PDF/X-1a: 2001 Acrobat 4/PDF 1.3 • Convert RGB colour to CMYK (spot colors allowed)
    • Transparency flattened
    PDF/X-1a ensures that the files are ready for print production—fonts are embedded, colours must be CMYK or spot, layers and transparency are flattened. Note that there is no minimum resolution required for PDF/X.
    PDF/X-1a: 2003 Acrobat 5/PDF 1.4
    PDF/X-3: 2002 Acrobat 4/PDF 1.3 • Leave RGB and CIELab color unchanged (profiles allowed)
    • Transparency flattened
    PDF/X-3 has all the benefits of PDF/X-1a plus it allows colour-managed workflows.
    PDF/X-3: 2003 Acrobat 5/PDF 1.4
    PDF/X-4: 2008 Acrobat 7/PDF 1.6 • Leave RGB and CIELab colour unchanged (profiles allowed)
    • Live (unflattened) transparency
    • Layers allowed
    Has all the benefits of PDF/X-3 plus it allows live (unflattened) transparency and layers for versioning. Print workflows based on the Adobe PDF Print Engine will be able to process PDF/X-4 jobs natively, without flattening artwork or converting to PostScript.
    PDF/X-4p: 2008 Acrobat 7/PDF 1.6 Use PDF/X-4p when a required ICC profile is unambiguously identified and supplied separately.

    Submitting documents for print using one of these standards is highly recommended as it eliminates many of the causes of print issues and is a more reliable method for graphics file exchange.

    Digital Front End

    Digital front end (DFE) describes the combination of hardware and software that drives and manages a print device. Hardware is often custom built for this specific purpose and may have proprietary video interfaces that connect directly to the print engine. An operating system serves as the base for the software components of the DFE and is often Microsoft Windows based or a Linux or Unix variant. Although the Windows running on a DFE is much the same as its desktop counterpart, Linux- and Unix-based systems are often custom distributions that are compiled specifically for the DFE.

    One of the key components of a DFE is the raster image processor (RIP). The RIP refers to the software component that interprets the PDL and performs the function of rendering or rasterizing the complete instructions into an image or raster the print engine will reproduce. The term RIP is often used interchangeably with DFE. This may have been accurate in the past when a DFE really only performed the ripping function and little else. Modern DFEs, however, do much more. In fact, a DFE may contain multiple RIPs, and within those RIPs they can utilize the multi-threading and processing power of modern computer hardware and operating systems to process many pages or channels simultaneously. PostScript has been the defacto PDL in digital printing for many years but with the development of the PDF/X print standards and the subsequent release of the Adobe PDF Print Engine (APPE), a native PDF RIP, many DFEs now include both PostScript and APPE as their available RIP engines.

    ICC-based colour management workflow may be part of the RIP process or can be an independent component of the DFE. Different elements within a print file get processed through their respective channels in the colour management system. Common channels include CMYK, RGB, black, and named colours. The idea is to convert all colour elements into the colour gamut of the print engine’s colorants/paper combination. The conversion process can be complicated, but the basic concept is device dependent source colour spaces (CMYK, RGB, etc.) are converted to a device independent colour space, referred to the profile conversion space (PSC), then from the PSC to the output gamut defined in the output ICC profile. The idea is to take the source ‘recipe’ and define the visual appearance of it first. That is why it needs to convert to device independent colour space, which defines the visual appearance of colour. Once the visual appearance is defined, the ‘recipe’ for the specific output can be calculated.

    Systems that support named or spot colour rendering follow a similar process. The named colour is located in a look up table. The name must match perfectly, including punctuation, spaces, and case. Each named colour is defined in a device independent colour space, typically Lab. There is no calculation in this step. The last step is the same; Lab values are then converted via the output profile.

    There is one more calculation applied before passing the information through to the printer. Electrophotography is affected by rapid changes in humidity and temperature. The electrophotographic process relies on components that do become less effective over time and use. These factors all affect the colour output. Calibration should be performed on a regular basis to compensate for these variables. Calibration is a process of creating a correction curve to maintain consistent and repeatable print output. This correction curve is applied right after the conversion to output profile, ensuring output is consistent with what was defined in the output profile itself.

    In order to maintain all these aspects of the DFE, an intuitive and user-friendly interface is critical. The user interface includes many components. Here is where you would configure the DFE, find the status of the print device and consumables, view and process jobs and job queues, and examine and export job histories and logs. Many WYSIWYG tools are accessed via the user interface, such as those for workflow, imposition, complex job composition, paper libraries, spot colour refinement, the launching of external tools, and even interfaces into other systems such as web2print. DFEs are becoming more powerful and perform more than just the traditional RIP functions. As the digital print industry continues to evolve, DFEs will be called on to perform more duties and functions. User interfaces will need to evolve as well to maintain usability and stay intuitive.

    This page titled 6.6: Page Description Languages is shared under a CC BY 4.0 license and was authored, remixed, and/or curated by Graphic Communications Open Textbook Collective (BCCampus) via source content that was edited to the style and standards of the LibreTexts platform.