Some efforts are being made to improve the driver software used to send printing jobs to the printer. There are several difficulties that need to be addressed. An overview of these issues follows.

Sub-Project Goals Edit

Color Space Conversion Edit

A monitor generates images in the additive color space. Adding different proportions of red, green, and blue light (the additive primary colors) allows for any hue to be generated. Scaling the intensity of the light allows for varying levels of brightness. Adding or subtracting an equal level of intensity from each color component changes the saturation of color.

A printer, on the other hand, operates in the subtractive color space. It is starting with a bright background (white paper) and forms colors by attenuating (reducing the intensity) of different frequencies of light. The subtractive primary colors are cyan, magenta, and yellow. Cyan is the color observed when red light is removed from a white light source. In the same way green absorption gives magenta, and blue absorption gives yellow.

To convert between these two types of colors is a non-trivial task, and the printing industry has worked very hard to ensure printed documents accurately reflect on-screen appearance. Thus, modern printers and printer drivers conduct these transformations without user intervention.

Thus, it is one goal of the SHArK HAcK team to circumvent this conversion, most likely by writing our own printer driver routines.

Multi-layered printing Edit

It has been observed by SHArKers utilizing the spray pyrolysis method that the performance of the ternary metal oxide combination depends upon the order in which the metals are deposited. Despite the differences in processes, perhaps similar results may be observed if the metal nitrate solutions are deposited in a particular order. Thus, an approach which allows for layered printing may prove useful.

One-shot printing Edit

Users of the printer system often print the pattern multiple times to achieve the desired level of thickness and to ensure uniform coverage on the plate. A driver could be authored which could allow these criteria to be met with only a single printer pass, depending on printer capabilities.

A method is already available which reduces the amount of user intervention required, by automating the submission of printer jobs to the printer. The user must, however, reinsert the CD tray for each successive pass.

Collected Knowledge Edit


The Appliance Printing Development Kit is HP's open-source effort to bring printer drivers to mobile and embedded devices. It provides a minimal framework, written in C++, for sending data to the printer.

The D5460 uses the 'DJGenericVIP' APDK Device Class (source).


The HPIJS driver was written to interface ghostscript to HP printer devices via IJS. The code is based on the APDK. Information regard how to use this is available here. More hints about printing to a CD/DVD on Ubuntu's HP documents legal combinations of several settings here.


The HPILP is an open-source effort by HP to bring printer device drivers to the Linux platform. It seems to be based upon the APDK.

Linux Workflow Edit

PNG → PDF Edit

Use cups-pdf. Print from the GIMP, and set the resolution appropriately.

PDF → PS Edit

Use pdf2ps.

PS → PCL Edit

Use GhostScript:

gs -dSAFER -sDEVICE=ijs -sIjsServer=hpijs -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="HP Photosmart D5460 Printer" -DIjsUseOutputFD -sOutputFile=file.pcl -DNOPAUSE --

More details about using the CD/DVD tray are here.

PCL Data Stream Format Edit

Representing Colors Edit

When the Configure Raster Data command is:

[ESC]*g20W 0x06 0x1F 0x00 0x02 0x0258 0x0258 0x90 0x00 0x01 0x01 0x0258 0x0258 0x0A 0x01 0x20 0x01

(which is the default when using the Linux HPIJS driver), it appears that the MSB in each byte, and every 4th byte, carries no data. The data follows a pattern of:









Where a..g are the same value (0 or 1) in this series, and the literal 0s or 1s create a repeating pattern in the bitstream.