120 likes | 239 Vues
This guide provides a comprehensive overview of the HP Printer Control Language (PCL) and its capabilities, focusing on escape sequences used in printing graphics. PCL employs specific ASCII control codes starting with the escape character (0x1B), allowing for commands like cursor positioning and resolution settings. It explains how to mix document text with PCL commands within a text file, submit via Linux, and manage printer modes, including switching to raster graphics mode. This introduction includes practical examples, making it ideal for developers looking to utilize PCL for printing applications.
E N D
Printing Graphics An introduction to capabilities of the HP Printer Control Language
Escape-sequences • The PCL language employs some special sequences of ASCII control-codes, known as ‘escape’ sequences (since they begin with the code for the escape-key: 0x1B) • The character-sequence ‘\e’ may be used to generate this special non-printable byte • The punctuation-symbols, numerals, and alphabetic characters that follow specify a specific command to the HP laser printer
Printer Communication • An application that wishes to do printing can create a textfile containing a mixture of document text and PCL commands • This text file is then ‘submitted’ to the printer using a Linux command (e.g., ‘lpr’) • The printer recognizes commands by the occurrence of an ‘escape’ code
Initilization • Printer initialization command has format: ESC E • Example: fprintf( prn, “\eE” ); // This statement writes the initialization // command to a file whose file-pointer is // the ‘prn’ variable
Dots-per-inch • Setting print resolution for raster graphics is done with the following command: ESC * t # R • Here the ‘#’ symbol denotes a numeric parameter that specifies the number of dots-per-inch (i.e., the pixel resolution) • Possible choices are: 75, 100, 150, 300
Set the Cursor Position • Set the cursor’s Y-coordinate: ESC * p # Y • Set the cursor’s X-coordinate: ESC * p # X • Example: If dots-per-inch equals 300, then fprintf( prn, “\e*p%dY\e*p%dX”, 150, 150 ); places the cursor a half-inch from margins
Set the Compression Mode • Here is the command that specifies the type of raster data-compression used: ESC * b # M • The possible numeric parameters are: • 0: unencoded (no compression) • 1: run-length encoding • 2: tagged image file format (TIFF) • 3: delta row compression
Enter Raster Graphics Mode • The printer’s default mode is ‘text’ mode • To switch into raster graphics mode, the following command is issued: ESC * r # A • Here the ‘#’ symbol specifies the type of cursor-positioning that is used: • 1 means use current cursor position • 0 means use the printer’s left margin
Sending Raster Data • Here is the command for sending raster graphics data to the printer: ESC * b # W • Here the ‘#’ symbol stands for a numeric parameter that specifies the number of bytes of raster data that follows the ‘W’ • Then the cursor moves to the next row
Leaving Raster Graphics Mode • To exit from raster graphics mode, the following command is used: ESC * r B • This command switches the printer back to its normal ‘text’ mode, and it is issued after the final row of raster graphics data is sent
End-of-Page • The PCL language is ‘page oriented’, and once a page’s description is complete, the printer should eject that page • The ‘form-feed’ command ‘\f’ can be sent to the printer to eject the completed page: fprintf( prn, “\f” );
Our ‘wavprint.cpp’ demo • We have posted an application program that prints certain Waveform Audio files, using the printer’s PCL raster graphics commands • So far it only works with 8-bit non-stereo data-format • To avoid wasting paper and toner, it only prints the first page of the waveform