Free software operating systems have often been accused of having pessimal printing support. Recent infrastructure improvements have largely solved the plumbing problem. But adding print support to applications is still painful. Generally, rendering code must be duplicated which often leads to inconsistencies between display and print output.
The cairo graphics library is designed to provide high-quality print output with the same API used for rendering to a display. The initial approach toward implementing printing support was to prioritize output fidelity over memory or bandwidth requirements yielding an implementation that achieves consistent print quality through reuse of image-based rendering code. Or we were just lazy and it was easy that way. Either way, it was a pig.
This paper will discuss recent progress in cairo's printing backends as they develop into first-class citizens. Generating efficient, high-quality print output is complicated because PostScript has an imaging model fundamentally more limited than that of cairo. This and other challenges will be presented along with our solutions.
Presented at linux.conf.au 2005 on 2005-04-22.