Print / Page-Description / Printer-Control DSLs Family Index


type: language-family-index family: print-page-description languages_catalogued: 28 tags: [language-reference, family-index, print-page-description, postscript, pdf, pcl, afp, ipds, xps, jdf, zpl, escpos, icc, ipp, ppd]

Print / Page-Description / Printer-Control — Family Index

Family overview

Print / page-description / printer-control languages are the device-facing layer of the print stack: the byte stream that actually arrives at a printer (or print spool, or RIP, or imposition system) and tells it what marks to put on what substrate. They are emphatically not authoring languages — authors write LaTeX, Word, InDesign, or Typst (see document-typesetting); those tools then produce the device-facing artifact (PostScript, PDF, PCL, AFP) that this family describes. The split matters because the design constraints are completely different: authoring languages optimise for human ergonomics and revision; page-description languages optimise for deterministic rendering, device independence, and (sometimes) interpreter cost on cheap embedded hardware.

The family’s foundational document is PostScript (Adobe, 1984), a stack-based, postfix, Turing-complete language that John Warnock and Chuck Geschke designed at Adobe after leaving Xerox PARC — and that turned Adobe into a printer-licensing empire for fifteen years. PostScript is literally a programming language in the Forth tradition (see forth-and-concatenative) — it has procedures, dictionaries, loops, and conditionals; a real PostScript file can compute its own content at print time. PDF (Adobe, 1993; ISO 32000 since 2008; current ISO 32000-2:2020 a.k.a. PDF 2.0, last reviewed and confirmed in 2026) is most cleanly understood as “PostScript with the program already executed and the result frozen as an object tree” — declarative where PostScript was imperative, and consequently cheap to render and easy to search/cache/edit.

In parallel, HP’s PCL (Printer Command Language, ~1984) carved out the cheap-laser-printer market: escape-code-driven, modest, and free of licensing fees. PCL 5 became the office workhorse; PCL 6 / PCL XL (introduced with the LaserJet 4000 series in 1995) is the modern object-oriented binary version and remains HP’s preferred enterprise PDL as of 2026. IBM’s mainframe stack (AFP, MO:DCA, IPDS) is the print world most desktop users never see — and yet every utility bill, bank statement, insurance EOB, and tax document printed at scale in the US and EU passes through it. XPS (XML Paper Specification) was Microsoft’s mid-2000s attempt to compete with PDF; it lost commercially but lives on inside Windows print pipelines as the spool format. Specialty fragmented worlds round out the family: ZPL (Zebra) is essentially uncontested in barcode/shipping labels; ESC/POS (Epson) is the de facto receipt-printer standard with Star Micronics, Citizen, Bixolon and others as parallel dialects; HPGL survives in CAD pen-plotter workflows.

Underneath everything colour-related sits the ICC profile ecosystem — ICC.1 v4 (currently ICC.1:2022, profile version 4.4.0.0) is the long-stable workhorse and ICC.2 / iccMAX (ICC.2:2023, published as ISO 20677) is the extensible next-generation alternative. Above the page-description layer, JDF / XJDF (CIP4) describe entire print-shop workflows in XML — not what to put on the page but which presses, plates, finishing steps, and substrates a job should flow through. And IPP (Internet Printing Protocol, currently PWG 5100.12-2024 with IPP Everywhere v2.0 in stable-draft as of April 2026) is the transport+attribute language that Microsoft is now mandating as Windows’ default printing path, replacing legacy V3/V4 drivers.

In our deep library

None of these page-description / printer-control DSLs have standalone deep-library notes; they live entirely in the Tier 3 encyclopedic layer. Heavy cross-references:

  • document-typesetting — the authoring sibling. TeX, LaTeX, Typst, Pollen, ConTeXt, troff, and the Markdown/AsciiDoc world all eventually compile down to a member of this family (almost always PDF, sometimes PostScript). The two families are inverses: typesetting languages optimise for the writer; page-description languages optimise for the printer.
  • forth-and-concatenativePostScript is a stack-based concatenative language, a direct sibling of Forth, Joy, and Factor. Operators consume from and push to an operand stack; dup, exch, pop, roll are all there. This is the family’s most surprising cross-reference.
  • api-description — IPP defines its operations and attributes via PWG schemas, JDF/XJDF are XML-Schema-described, PPD files are tagged schema-conformant ASCII. The boundary between “print-control DSL” and “print-API description” blurs here.
  • notation-spec — PostScript, PDF, PCL XL, AFP MO:DCA, ZPL II, ESC/POS, and ICC profiles all have rigorous formal specifications (frequently ISO standards). These are notation specs as much as they are languages.
  • assembly-and-encoding — PCL XL and IPDS structured fields are binary opcode-stream encodings closer to bytecode than to text; AFP records are tag-length-value structured fields.
  • embedded-firmware — printer firmware is the interpreter for these languages. A laser printer is, in effect, a special-purpose CPU + PostScript/PCL virtual machine + raster image processor (RIP).
  • codec-and-dsp — image compression inside PDF/PostScript/PCL (DCT/JPEG, JBIG2, CCITT G4, JPEG 2000, Flate) lives at the family boundary.

Tier 3 family table — Page-description core

Language / DSLFirst appearedOriginTypeStatus (2026)URL
PostScript (Level 1)1984Adobe (John Warnock, Chuck Geschke)Stack-based concatenative; Turing-complete; ASCII or binary-tokenised; full programming languageLegacy / niche; PostScript 3 (1997) is still the current spec but new printer designs target PDF directly. Heavy use only in pre-press and Ghostscript-backed pipelineshttps://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf
PostScript Level 21991AdobeAdded colour separation, forms, patterns, composite fontsLargely superseded; subsumed by PostScript 3https://www-cdf.fnal.gov/offline/PostScript/PLRM2.pdf
PostScript 31997AdobeCurrent PostScript spec; smooth shading, DeviceN, in-RIP trappingStill the current spec but no new revisions; PDF has been Adobe’s strategic focus since ~2005https://www.adobe.com/jp/print/postscript/pdfs/PLRM.pdf
Encapsulated PostScript (EPS)1987AdobeSingle-page, single-bounding-box PostScript subset for embedding inside other documentsLegacy but ubiquitous in pre-press archives; modern workflows prefer PDF-embedded artworkhttps://www-cdf.fnal.gov/offline/PostScript/5002.EPSF_Spec.pdf
PDF (ISO 32000-1)1993 (Adobe), ISO 2008Adobe → ISO TC 171Declarative object-tree; PostScript-derived imaging model; cross-reference-table file structureSuperseded by 32000-2 but still widely produced/consumedhttps://www.iso.org/standard/51502.html
PDF 2.0 (ISO 32000-2:2020)ISO 2017, revised 2020ISO TC 171 / PDF AssociationAdds black-point compensation, soft masks improvements, improved tagged-PDF, removes proprietary Adobe-ismsCurrent standard (reviewed and confirmed in 2026); Amendment 1.2 in committee drafthttps://www.iso.org/standard/75839.html
XPS (XML Paper Specification)2006 (Microsoft); Ecma-388 (2009); ISO/IEC 29500-1MicrosoftZIP container of XML page parts; fixed-layout document modelLegacy; Microsoft itself is deprecating the XPS Viewer; lives on inside Windows print spoolhttps://learn.microsoft.com/en-us/windows/win32/printdocs/xps-document
OpenXPS / OXPS2009Ecma / MicrosoftOpen-standards variant of XPS published as Ecma-388; used by Windows 8+ spoolLegacy; same trajectory as XPShttps://www.ecma-international.org/publications-and-standards/standards/ecma-388/

Tier 3 family table — PDF subsets / archival

Language / DSLFirst appearedOriginTypeStatus (2026)URL
PDF/X-1a (ISO 15930-1, -4)2001ISO TC 130Print-production PDF subset; all fonts embedded, CMYK only, no transparencyStill widely required by older RIPs and ad-delivery workflowshttps://www.iso.org/standard/29061.html
PDF/X-3 (ISO 15930-3, -6)2002ISO TC 130PDF/X-1a + colour-managed (allows ICC, LAB, RGB tagged with profiles)Legacy but still accepted by many magazineshttps://www.iso.org/standard/39940.html
PDF/X-4 (ISO 15930-7:2010)2010ISO TC 130Based on PDF 1.6; first PDF/X to allow live transparency, layers, JPEG 2000The current de facto print-production standard as of 2026https://www.iso.org/standard/55843.html
PDF/X-6 (ISO 15930-9:2020)2020ISO TC 130Based on PDF 2.0; black-point compensation, modern output intents; ISO/CD 15930-9.3 Edition 2 in draftActive but limited adoption — most RIPs still validated against X-4https://www.iso.org/standard/77103.html
PDF/A-1 (ISO 19005-1:2005)2005ISO TC 171Based on PDF 1.4; long-term archival; no encryption, no external refs, all fonts embeddedStill required by many government archiveshttps://www.iso.org/standard/38920.html
PDF/A-2 (ISO 19005-2:2011)2011ISO TC 171Based on PDF 1.7; adds transparency, JPEG 2000, layersCommon archival targethttps://www.iso.org/standard/50655.html
PDF/A-3 (ISO 19005-3:2012)2012ISO TC 171PDF/A-2 + arbitrary-file attachments (e.g. embedded XML invoices — basis of ZUGFeRD/Factur-X)Active, especially for e-invoicinghttps://www.iso.org/standard/57229.html
PDF/A-4 (ISO 19005-4:2020)2020ISO TC 171Based on PDF 2.0; collapses A/B/U conformance levels; adds PDF/A-4e (engineering) and PDF/A-4f (attachments)Current archival target as of 2026https://www.iso.org/standard/71832.html
PDF/UA-1 (ISO 14289-1:2014)2012, rev 2014ISO TC 171Accessibility-conformant tagged PDFCurrent; PDF/UA-2 (based on PDF 2.0) published 2024https://www.iso.org/standard/64599.html

Tier 3 family table — Printer-control layers

Language / DSLFirst appearedOriginTypeStatus (2026)URL
PCL 5 (Printer Command Language)1990 (PCL 5), HP introduced PCL in 1984 with the LaserJetHPASCII + escape-code stream; HP-GL/2 subset for vector; widely clonedLegacy office workhorse; HP still ships PCL 5 drivers but no new developmenthttps://developers.hp.com/hp-printer-command-languages-pcl/doc/pcl-5
PCL 6 / PCL XL1995 (LaserJet 4000)HPBinary, object-oriented PDL optimised for Windows GDI; tokenised opcodesActive — HP’s “fully supported and preferred” enterprise PDL as of 2026https://developers.hp.com/hp-printer-command-languages-pcl/doc/hp-pcl6-pcl-xl
PJL (Printer Job Language)~1990HPPlain-text job-control headers wrapping PCL/PostScript payload; @PJL SET RESOLUTION etc.Active — almost every HP-compatible printer still speaks PJLhttps://developers.hp.com/hp-printer-command-languages-pcl/doc/printer-job-language
AFP (Advanced Function Presentation) / MO:DCA1984 (AFP), MO:DCA-P 1990sIBM, now stewarded by AFP ConsortiumStructured-field binary records; device-independent page modelActive in mainframe / volume transactional print; MO:DCA Reference 10th Edition is currenthttps://afpcinc.org/wp-content/uploads/2017/12/MODCA-Reference-09.pdf
IPDS (Intelligent Printer Data Stream)1987IBM, AFP ConsortiumBidirectional MO:DCA transport; printer reports state back to hostActive, paired with AFP in mainframe environmentshttps://www.afpconsortium.org/uploads/1/1/8/4/118458708/ipds-reference-11.pdf
HPGL / HPGL/21977 (HPGL), 1990 (HPGL/2)HPVector pen-plotter command language; two-letter mnemonics (PU, PD, PA)Niche-active in CAD plotting, large-format printers, vinyl cuttershttps://developers.hp.com/hp-printer-command-languages-pcl/doc/hp-gl2
IBM Printer DDS1980sIBM (System/3x → AS/400 → IBM i)Data Description Specification for printer files; column-based mainframe form layoutLegacy but still in production AS/400 / IBM i shopshttps://www.ibm.com/docs/en/i/7.5?topic=dds-printer-files

Tier 3 family table — Specialty (label / receipt / plotter)

Language / DSLFirst appearedOriginTypeStatus (2026)URL
ZPL II (Zebra Programming Language)1990s (ZPL II)Zebra TechnologiesASCII caret-prefixed command stream (^FO, ^BC, ^FS); thermal-label-printer DSLActive and dominant; current Programming Guide P1134473-10EN Rev A (Oct 2025 / Apr 2026 copyright)https://docs.zebra.com/us/en/printers/software/zpl-pg/zpl-ii,-zbi-2,-set-get-do,-mirror,-wml-programming-guide.html
EPL / EPL2 (Eltron Programming Language)1990sEltron (acquired by Zebra 1998)Older Zebra-family label DSL; line-oriented commandsLegacy — Zebra still supports it on older printers but new development is ZPL IIhttps://www.zebra.com/us/en/support-downloads/knowledge-articles/ait/eltron-programming-language.html
DPL (Datamax Programming Language)1990sDatamax-O’Neil (now Honeywell)Competitor label-printer DSLActive in Honeywell label-printer linehttps://aiditbarcode.com/datamax-class-series-programming-language-reference-manual/
TSPL / TSPL2 (TSC Printer Programming Language)1990sTSC Auto IDCompetitor label-printer DSL; BASIC-like syntaxActive in TSC label printershttps://www.tscprinters.com/en/support/tspl
ESC/P 21992 (ESC/P 2; ESC/P from 1981)EpsonReceipt + dot-matrix printer escape-code languageActive for receipt printers; foundation for ESC/POShttps://files.support.epson.com/pdf/general/escp2ref.pdf
ESC/POS~1990sEpsonESC/P variant optimised for POS receipt printers; ESC + GS prefixed commands; cash drawer kick, cutter, barcodeThe de facto receipt-printer standard — supported by virtually every POS thermal printerhttps://download4.epson.biz/sec_pubs/pos/reference_en/escpos/
Star Micronics receipt DSL / StarPRNT1990sStar MicronicsESC/POS-compatible mode + native Star command setActive — Star is the #2 receipt-printer vendor after Epsonhttps://starmicronics.com/support/Mannualfolder/StarPRNT_CM_EN.pdf
Citizen / Bixolon receipt DSLs1990sCitizen Systems, BixolonMostly ESC/POS-compatible with vendor extensionsActive, nichehttps://www.bixolon.com/_upload/info/Command%20Manual_thermal_english_Rev_1_03.pdf

Tier 3 family table — Print-workflow / JDF / PPD / ICC / IPP

Language / DSLFirst appearedOriginTypeStatus (2026)URL
JDF (Job Definition Format)2001CIP4XML print-job ticket; full workflow description (prepress, press, postpress)Legacy but still deployed; 1000-page spechttps://www.cip4.org/print-automation/jdf
XJDF (Exchange JDF / JDF 2.0)2018CIP4Simplified 440-page XML interchange format; replaces full JDF for new integrationsCurrent CIP4 recommendationhttps://www.cip4.org/Books_Slides/articles/xjdf-exchange-job-definition-format-copy
JMF (Job Messaging Format)2001CIP4XML messaging companion to JDF; job-status eventsLegacy alongside JDFhttps://www.cip4.org/
XJMF (Exchange JMF)2018CIP4Simplified messaging companion to XJDFCurrenthttps://www.cip4.org/print-automation/jdf
CUPS PPD (PostScript Printer Description)1993 (Adobe), in CUPS since late 1990sAdobe → CUPSTagged ASCII driver-capability files (*Default, *OpenUI); originally just for PostScript printers, extended by CUPSActive in CUPS but deprecated by Apple; macOS now prefers IPP Everywherehttps://www.cups.org/doc/spec-ppd.html
IPP (Internet Printing Protocol)1999 (RFC 2910), PWG-stewarded sinceIETF → PWGHTTP-based attribute-based printing protocol; the attribute set itself is a DSLCurrent — PWG 5100.12-2024 (IPP/2.x Fourth Edition); Microsoft mandating IPP as Windows default starting 2026https://www.pwg.org/ipp/
IPP Everywhere2013, v2.0 stable-draft April 2026PWGDriverless-printing profile of IPPActive; v2.0 (EVE) in stable draft as of 30 April 2026https://www.pwg.org/ipp/everywhere.html
ICC.1 v4 profile format1994 (ICC founded), v4 in 2001, current ICC.1:2022International Color ConsortiumBinary colour-profile format; PCS = CIELAB / CIEXYZ; tag-basedCurrent — profile version 4.4.0.0; recommended for almost all usehttps://www.color.org/v4spec.xalter
ICC.2 / iccMAX2016 preliminary, ICC.2:2023 finalICC; also ISO 20677Next-generation extensible profile format; spectral / material connection spaces; multi-process elementsActive alternative for advanced cases; not a replacement for ICC.1 v4https://www.color.org/iccmax/
CIP3 PPF (Print Production Format)1995CIP3 (predecessor to CIP4)PostScript-based pre-press DSL for ink-zone settings, register marks, cutting dataLegacy — superseded by JDF/XJDF but still found in older press control panelshttps://www.cip4.org/print-automation/cip3-ppf

Notable threads

  • PostScript is Forth-with-graphics. This is the most surprising thing about the family. A .ps file is a real program: it has variables, dictionaries, procedures, control flow, and arithmetic; it executes on a stack-based virtual machine inside the printer. Adobe’s design choice — make the file format a programming language — was simultaneously brilliant (infinite expressiveness, device independence) and expensive (every printer needed a full interpreter, and bugs in user PostScript could literally hang printers for hours). The cross-reference to forth-and-concatenative is not metaphorical; PostScript belongs in the Forth family tree, alongside Joy and Factor. This is also why Adobe could licence the interpreter to printer OEMs at premium prices for fifteen years — implementing a full PostScript Level 2/3 interpreter is genuinely hard.

  • PDF ate PostScript’s lunch by freezing the program output. A PDF file is what a PostScript program would have produced if you ran it once — a flat object tree of content streams, fonts, images, and resources, addressable by a cross-reference table at the end of the file. No loops, no conditionals, no interpreter state. This makes PDF cheap to render (just walk the tree), cheap to cache (no side effects), cheap to search (text is already extracted), and cheap to edit (replace an object, update the xref). PDF 1.0 shipped in 1993; PDF became ISO 32000 in 2008; the current standard is ISO 32000-2:2020 (PDF 2.0), which was reviewed and confirmed in 2026 and now has Amendment 1.2 in committee draft. The transition was not Adobe’s accident — Adobe deliberately built PDF as PostScript’s evolutionary replacement.

  • PCL won the cheap-laser-printer market by being unencumbered. HP shipped LaserJets without paying Adobe’s PostScript licence fee, undercut Apple LaserWriters by hundreds of dollars, and made PCL 5 the office workhorse for two decades. PCL 6 / PCL XL (introduced 1995, still HP’s preferred enterprise PDL in 2026) replaced the escape-code text stream with a tokenised binary opcode stream that maps almost directly onto Windows GDI primitives — faster to generate from a Windows driver, faster to RIP, smaller on the wire. The PCL → PCL XL evolution is essentially “PostScript-style imaging model + bytecode encoding” — a credible PostScript competitor without the licence fee.

  • AFP/IPDS is the print stack most desktop users never see. Every monthly utility bill, bank statement, credit-card statement, insurance EOB, and pension notice mailed in volume in the US and EU goes through IBM’s AFP (Advanced Function Presentation) → MO:DCA → IPDS pipeline. AFP was designed for high-volume transactional print — variable data, bidirectional printer reporting (IPDS lets the printer tell the host “I jammed on page 1,247 — please reprint from there”), and resource management at industrial scale. The Mixed Object Document Content Architecture Reference is on its 10th Edition, stewarded by the AFP Consortium after IBM externalised the standards work. If you have ever opened a credit-card statement, you have read AFP output.

  • XPS lost commercially but lives on inside Windows. Microsoft’s 2006 attempt to dethrone PDF — XPS (XML Paper Specification), then OpenXPS / OXPS standardised as Ecma-388 — failed to gain traction in the marketplace; Adobe’s PDF ecosystem was already universal, and XPS offered no compelling user-visible advantage. But XPS quietly persisted as the internal Windows print-spool format: when an app prints, the Windows print subsystem renders to an XPS spool file before converting to whatever the printer speaks. Microsoft deprecated the XPS Viewer in Windows 10 but the format remains structurally important. As of 2026, Microsoft is also moving to make IPP / IPP Everywhere the default print path, with V3/V4 third-party drivers being deprecated from Windows Update starting January 2026 — a separate but related modernisation.

  • ZPL’s quiet dominance in labels. Almost every shipping label, warehouse bin tag, prescription label, and product barcode printed in 2026 is ZPL II. Zebra Technologies essentially owns the thermal-barcode-printer market; the ZPL II Programming Guide (P1134473-10EN Rev A, copyright April 2026) is the active reference. Competitors exist — Datamax (DPL, now Honeywell), TSC (TSPL/TSPL2), and SATO — but ZPL II is the lingua franca; even non-Zebra label printers often offer a ZPL-emulation mode because integrators write to ZPL and expect any printer to render it.

  • Receipt-printer ecosystem fragmentation, anchored by ESC/POS. Epson’s ESC/POS (and its ancestor ESC/P 2) is the de facto receipt-printer standard. Star Micronics has its own native StarPRNT command set but ships ESC/POS-compatible mode on every printer; Citizen, Bixolon, Custom, and SNBC do the same. The result: POS-system developers write to ESC/POS as the lowest-common-denominator, configure printer-specific quirks (paper-cut behaviour, cash-drawer-kick pin, font set) per-driver, and accept that no two ESC/POS implementations agree on edge cases. Receipt printers are also surprisingly stateful — text styles persist until reset, which has caused production bugs at every POS company.

  • ICC profiles are the colour-management substrate under everything. Every colour-managed pipeline — PDF/X-4, PDF/X-6, PostScript 3, modern PCL, AFP, printer drivers, display profiles, camera profiles, scanners — uses ICC profiles to map between device-dependent colour spaces (CMYK, RGB, scanner native, camera raw) and a device-independent profile-connection space (CIELAB or CIEXYZ). ICC.1 v4 (current ICC.1:2022, profile version 4.4.0.0) is the long-stable workhorse; ICC.2 / iccMAX (ICC.2:2023, also published as ISO 20677) is the next-generation extensible alternative for spectral colour, material connection spaces, and multi-process elements — useful for textile, packaging, and HDR work but not a replacement for v4 in mainstream print.

  • JDF/XJDF describes shops, not pages. JDF (Job Definition Format) and its 2018 successor XJDF (Exchange JDF, sometimes called JDF 2.0) are XML languages that describe an entire print-shop workflow: this PDF gets preflighted with these settings, imposed onto these plates, printed on this press with these ink-zone settings (often via legacy CIP3 PPF), then folded/stitched/trimmed on this finishing line. The original JDF spec is ~1000 pages; XJDF is a deliberately slimmer ~440-page interchange-only redesign. Most production shops in 2026 run both in parallel — XJDF for new MIS-to-press integrations, legacy JDF tickets for older equipment that does not speak XJDF yet. JMF / XJMF are the companion messaging formats (job status, alerts).

Citations