Skip to content

HPInc/jipp

Folders and files

NameName
Last commit message
Last commit date
Nov 15, 2021
May 10, 2017
Nov 3, 2023
Aug 9, 2024
Apr 29, 2024
Apr 29, 2024
May 30, 2018
Aug 9, 2024
Apr 15, 2018
Aug 9, 2024
Aug 9, 2024
Dec 22, 2016
Dec 22, 2016
Jul 17, 2019

Repository files navigation

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.

Usage

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

Sample Applications

jprint

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://192.168.1.102:631/ipp/print

jrender

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 HISTORY.md for more details.

Dependencies

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

Building

To build, run ./gradlew build.

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