PROforma has it's own specific way look at pixels and pages, the two basic entities in this system.
Because not all devices are capable of changing their output (printers for example), PROforma uses a buffered approach. So instead of drawing on a page, all operators actually draw in a buffer, and this buffer can then be displayed on the actual page (using PFPageShow). However, such a buffer can be quite large (typically 1MB for a 300dpi mono A4 page), and there may not be enough memory available for the entire page. Therefore, an actual page can be split into several pieces, and transferring the buffer will only display part of the page.
So pages are built in passes. The client knows how many passes are necessary for each page and has to call the display operators for all visible objects on the page once for each pass. When transferring the buffer to the printer, PROforma immediately makes sure the buffer is ready for the next pass of that page, or, if this was the last pass of the page, it makes sure the buffer is ready for the first pass of the next page. The buffer is however not cleared. This is done to allow small changes to be made in the buffer without redrawing all the other stuff (which is only relevant if the page is produced in one pass and can be particularly useful for interactive use and mailmerging).
The buffered approach is actually taken one step further in PROforma. It
also applies to paths. Although all parameter about
how to draw the path have to be known in advance, the path is not actually
drawn while it is built. The path is only drawn when you call a command to do
so.
To be 100% correct, we must state that some device drivers (possibly in some
versions and with some parameters) may actually bypass the buffer(s). However,
this can only explain some 'unexpected' behaviour in some cases (like marks on
the page when the page or path is not drawn). It should never be assumed.
In fact you could consider the commands to draw a page or path as end of page
or end of path markers, they have to be there !
PROforma has it's own convention on pixels. It assumes that pixels are
rectangles, and that they are positioned between the grid lines.
In this picture you see the grid lines, the pixel centres, and the actual pixels. On the right, there is a filled triangle drawn. As you can see, pixels are only drawn when the centre lies inside the triangle. A boundary situation occurs when the edge of the triangle coincides with a pixel centre. In this case the edge is shifted to the right over in infinitely small amount.
This also means that areas which have a thickness of less than a pixel may
be (partly) invisible if no pixel centres fall inside the path.
In the picture you see a line which is less than a pixel wide (and not
hairline), and which pixels would be drawn.
The same rules apply to stroked paths. However when the linewidth is less than one pixel, the path will be drawn hairline. A hairline is a line with a uniform width of one pixel.
Unfortunately, the view that PROforma has on pixels is ideal and does not conform with most output devices (none probably) There are two differences possible.
For starters, some devices don't draw their pixels as PROforma does it, but at the actual crossing of the grid lines. This is no problem as it only means there is a shift of half a pixel for the entire page. This causes no problems at all.
On the other hand, pixels are usually round, and they often overlap. To make matters even worse, some printers don't even have a consistent pixel size. We will just explain what the problems are with a few types of devices.
These are the common monitors, and we are lucky. Monitors draw in white, which has the effect that white pixels are larger than black pixels. However, the difference in size is not too large. The average size of the dots is slightly bigger than the addressable resolution. This is quite a good approximation of the PROforma model.
Dot matrix printer have round dots which are always equal in size. Dots are
usually much larger than the resolution at which they are positioned. Although
this produces smoother results, it also meant than output is usually more black
than is intended. For instance the difference between a one or two pixel wide
line can be very small, even if this is a relatively big difference in user
coordinates.
Another problem often encountered in dot matrix printers is banding. This means that there is a regular repetition of lighter and darker horizontal bands. This is mainly caused by the use of ink ribbons. They are also used for printing text and therefore the area in the middle of the ribbon is used more than the top or bottom. The less used area produces darker dots. On the other hand the ribbon also rotates horizontally, and this may also cause a difference in darkness (some parts were used more than others).
This is generally speaking the same as a dot matrix printer. However, the ink is fluid now, and it is usually absorbed by the paper. This causes an additional problem as the size of the dots now also depends on the type of paper. The shape of each dot can also change, and this also depends on the paper (very local). Inkjet or bubblejet printer usually suffer a lot less of banding (unless one of the jets is blocked). A major advantage of inkjet printers is that they are very good at filling black regions, although the paper may bend because of the wet ink.
Laser printers either draw their page in black (most often) or in white (as copiers do). This has certain effects on the result (making it either darker or lighter), and pixels don't always have the same size (especially in corners, this is sometimes corrected or used by the printer (so called resolution enhancement).
Because of the technology used (toner which sticks to charged
particles) laser printers have got problems with small (or thin) areas (like
hairline paths, which fade away), and with large black areas (which become
lighter in the middle). On the other hand, laser printer have the highest real
resolution (smallest dots), and gives the highest quality output. Actually, a
300 dpi laser printer giver better, crisper output than a 300 or 360 dpi dot
matrix or inkjet printer.