Skip to content
Go to file


Failed to load latest commit information.
Latest commit message
Commit time

CircleCI CodeCov Maven Central Core Docs PDL Docs Kotlin ktlint

JIPP: A Java-compatible IPP library

This project includes:

  • jipp-core is an IPP parser/builder for IPP packets.
  • jipp-pdls converts rasterized documents into common page description languages (PCLm and PWG-Raster).
  • jprint shows how jipp-core can be used to send a document to a printer.
  • jrender shows how jipp-pdl can be used to convert a PDF to PCLm or PWG-Raster.

jipp-core features:

  • Supports construction of IPP servers, clients, routers, gateways, etc.
  • Common operations and attributes available for use.
  • Can be extended to support new operations and attributes.
  • Can be used over any transport (typically HTTP).
  • Includes a pretty-printer for human-readable IPP packet display.
  • Kotlin users can access a type-safe packet building DSL

What could I do with this?

  • Scan and show available printers on your network to your users.
  • Implement an Android Print Service.
  • Test IPP clients or IPP printers in interesting ways.
  • Experiment with alternative IPP transports.
  • Implement a cloud-based print server or client.

The API is Java-compatible but implemented in Kotlin.


  1. Add the current version of JIPP to your project
dependencies {
    compile 'com.hp.jipp:jipp-core:0.7.9'
    compile 'com.hp.jipp:jipp-pdl:0.7.9' // Only needed if transforming PDLs
  1. Create an IppClientTransport or IppServerTransport (see example
  2. Use the transport to send and receive IppPacket objects, e.g.:
URI uri = URI.create("");
IppPacket printRequest = IppPacket.printJob(uri)
transport.sendData(uri, new IppPacketData(printRequest, new FileInputStream(inputFile)));

Sample Applications


Demonstrates a simple print engine. To run:

# build the app
./gradlew jprint:build

# unzip in the current directory
unzip -o ./sample/jprint/build/distributions/jprint-*.zip

# Use IPP to print a file to the supplied HTTP/IPP endpoint.
# (The printer must natively support the supplied file type.)
jprint-*/bin/jprint -p sample.pdf ipp://


An example of rendering a PDF to PWG-Raster or PCLm. To run:

# build the app
./gradlew jrender:build

# unzip in the current directory
unzip -o ./sample/jrender/build/distributions/jrender-*.zip

# Convert a PDF-file to PWG-Raster.
jrender-*/bin/jrender sample.pdf sample.pwg

# Convert a PDF-file to PCLm.
jrender-*/bin/jrender sample.pdf sample.pclm

API Maturity

Until 1.0, APIs may still be changed in non-backwards-compatible ways. See for more details.


jipp-core's only dependencies are JDK 8+ and the current Kotlin runtime.


To build, run ./gradlew build.

A full build of this project requires python (2.x) and dot to generate dependency graphs.