How Windows 3.11 Handled Multi-Page Laser Printing

Microsoft Windows 3.11 managed multi-page laser printing by combining the Graphics Device Interface (GDI), hardware-specific printer drivers, memory-saving banding techniques, and the Windows Print Manager spooler. By translating high-level graphical function calls into page description languages such as PCL and PostScript, Windows 3.11 coordinated page transitions, managed hardware memory constraints, and buffered print data to deliver multi-page documents without locking up the user interface.

The GDI and Print Job Delineation

At the software level, multi-page printing relied on the Windows Graphics Device Interface (GDI). Windows applications did not communicate directly with laser printers. Instead, they drew to a printer device context (DC) using standard GDI functions.

To delineate pages within a single job, the GDI relied on specific print control escapes and API calls:

  • STARTDOC: Informed the GDI and the spooler that a new document was beginning.
  • NEWFRAME (or NEXTBAND): Signaled the completion of a page. Calling NEWFRAME instructed the driver to finalize rendering for the active page, flush the data, and prepare a clean canvas for the subsequent page.
  • ENDDOC: Signaled that all pages were complete, allowing the printer subsystem to close the job and release resources.

Driver Translation to PCL and PostScript

Laser printers, such as the HP LaserJet series or Apple LaserWriters, required instructions in Page Description Languages (PDLs)—primarily Hewlett-Packard's PCL (Printer Command Language) or Adobe PostScript.

When an application called NEWFRAME, the printer driver converted the GDI drawing primitives into printer-specific page-ejection commands. For PCL printers, the driver inserted an ASCII Form Feed control character (\x0C) or a PCL reset sequence that commanded the laser engine to feed the current sheet of paper through the fuser and load the next sheet. For PostScript printers, the driver emitted the showpage operator, which rendered the current page description onto the physical medium and cleared the device's internal page dictionary for the next page.

Memory Optimization Through Banding

In the early 1990s, high-resolution laser printing (300 to 600 DPI) required significant memory. A full-page monochrome bitmap at 600 DPI required over 4 megabytes of RAM, which often exceeded the installed memory of both the host PC and the laser printer.

To support multi-page documents on constrained hardware, Windows 3.11 used a technique called banding:

  1. The printer driver divided a single page into several horizontal rectangular slices, known as bands.
  2. The GDI rendered only one band at a time into system RAM.
  3. The rendered slice was compressed and transmitted to the printer.
  4. Once all bands for a single page were transferred, the driver sent the page-ejection command.
  5. The memory buffer was recycled to begin processing the bands of the next page.

This process allowed multi-page documents of indefinite length to print reliably without encountering out-of-memory errors on either the computer or the printer.

Spooling via Print Manager

Windows 3.11 handled the output stream through the 16-bit Print Manager. When a multi-page job was initiated, the GDI wrote the processed printer commands into temporary spool files (.SPL) stored on the hard drive.

Print Manager then fed this data to the printer port (typically LPT1) in the background using cooperative multitasking idle loops. Spooling ensured that the application did not have to wait for the laser printer’s mechanical paper-handling cycle to complete between pages, returning control of the software back to the user while subsequent pages were still being fed and fused.