Hewlett-Packard created the PCL printer command language to provide an economical and efficient way for application programs to control a range of printer features across a number of printing devices. HP has evolved both the definition and implementations of the PCL printer language to provide the optimal price and performance balance. PostScript, which does allow more graphic effects, imposes a daunting price in elaborate computing hardware and slow speed. ASCII, while fast, does not allow even basic forms elements to be represented. PCL 5 represents a new breakthrough in price/performance leadership, with features selected in direct response to customer requests.
The PCL printer language commands are compact codes (preceded by a special character called the escape character which tells the printer to interpret them as commands rather than data to be printed) that are embedded in the print-job data stream. This approach minimizes both data transmission and computing overhead.
When entering or discussing PCL codes, be aware that the commands are case-sensitive (lower-case and upper-case letters are NOT equivalent as they are in DOS commands) and be sure to distinguish between such character pairs as the lower-case letter l and the digit 1 (one) or the upper-case letter O and the digit 0 (zero.) Because the PCL language is so extremely compact, it has no redundant elements and does not tolerate errors.
This control code causes the printer to reset the printing position to the left margin of the current page.
This control code causes the printer to advance to the next line as defined by the lines-per-inch setting. Many older computer systems automatically send this code at the end of each print line. Some computer systems count the number of line feeds that have been issued and inject a Form Feed after a certain set number, assuming that the printhead has arrived at the bottom of the form. This procedure can cause problems with pagination in lasers or inkjets, since the printable page length in these printers is different from that of the older impact printers. Also, since these older computers do not recognize printhead positioning commands often used with laser printers, it is possible to have printed many more Line Feeds than would normally be possible and still be on the same page.
This code ejects the current page from the printer. If a macro has been enabled for overlay using the esc4X PCL command, the form will be added to the page after receiving the Form Feed code but before the page is actually ejected. The PCL command esc&l0H can also be used to eject a page.
This special code, often written esc or <Esc>, identifies the beginning of a PCL command.
Commands ("escape sequenmces") consist of two or more characters. The first character is always the ASCII escape character, identified by the esc symbol. esc is a special control code which identifies the subsequent string of characters as a printer command. As the printer monitors incoming data from a computer, it is "looking" for this character. When this character appears, the printer reads it and its associated characters as a command to be performed and not as data to be printed.
Two-character escape sequences consist of the escape character and one capital letter. For example:
escE
will reset the printer.
Parameterized escape sequences have the following form:
esc X y # Z
where
X is the Parameterized Character, which can be one of: ! " # $ % & ' ( ) * + , - . / (each of these characters represents one family of commands.) For example, the ( character is associated with commands that control font selection.
y is the Group Character, which can be any lower-case letter from a to z or one of { | } ~ (each of these characters specifies the group of command in the current family.) For example, if the parameterized character is & representing control commands, then the l group character would indicate a job control command, and a f group character would indicate a macro control command.
# is the Value Field, a positive or negative number optionally including a fractional portion.
Z is the Parameter Character, which completes the PCL command. For example esc&l 8D sets the line spacing to 8 lines per inch. Several value fields and parameter characters can be repeated in one command if they are all from the same group specified by the parameterized character and the group character, by changing all but the last parameter character to lower-case. For example esc&f123y4X specifies that macro number 123 will be used AND that it is to be overlaid when the page is ejected.
HP-GL/2 codes are vector-graphic commands which cause the laser printer to function a plotter. These commands can be recorded in a macro only on the HP LaserJet 4 and above.
See also:
Questions:
Hi,
I'm converting PDF's to PCL file format for printing directly to a printer. Do you have any advice for how to minimize or control the file size or quality of a PCL file? Or is the PCL file format inherently an inefficient language? Would reducing the embedded fonts or file size of the PDF help?
James Newton replies: The inefficiency you see is more likely the result of the printer driver or software you are using to convert the PDF's. Try changing any settings in the driver related to subsituting fonts. Ensure the PDFs are not just images and were actually made from text, lines, etc... PCL is less efficient with curves and angles. If your files have a lot of that, it could explain the problem.
Will two back-to-back Esc-E commands to a LaserJet Series 5000 with internal JetDirect card cause a blank sheet of paper to be ejected?James Newton of MassMind replies: This is up to the printer. The second Esc-E does define the end of a page with no data on it at all, and a (really dumb) printer could choose to see that as something that should trigger a blank page. Some printers have a setting to print or suppress the printing of blank pages.
I'm having trouble with a blank sheet of paper coming out of my LaserJet printers after a job is completed. The job is initiated by a 20-year-old mainframe program, distributed via an old RSCS mainframe system but printed on a brand-new IP addressed printer with a JetDirect internal card. Lots of different people here with lots of different silos of expertise have opinions.
The application ends the file with Esc-E and then I've been told that the RSCS printer routine adds another Esc-E to the byte stream. Does that have any relevance to the spurious form feed? There is no ^L character in the output.
The identical output works fine in other printers at other facilities. This is the first time we've tried printing at the new facility, though, so I'm having trouble figuring out what is different.
Thanks in advance.
Hi... My name is Alexandre and I live in Brazil. I have to create a report, but I want to use special characters such as "á, é, ó, ã, â, í, ç". Those characters are included in the brasilian alphabet. But everytime I try to print them, instead of appearing them, appears "¥, µ, ¶, §, |".
I´m using the 12U (PC-850) symbol set, which applies to my country. What am I doing wrong ??
I hope you can solve my problem.
James Newton replies: Are you sure that the font you are trying to use is available in your printer and in that symbol set? Print a font list from the printer and verify that it is available.
We are using TSO to generate reports which are printed out on a Kyocera printer (using Prescribe language to format the pages and control page-sizes, orientation, drawing logos and framing the pages). We would like to use our PCL5 (or even PCL6) HP printer for this work in future (to facilitate higher volumes of output). Is there a programming guide (an dwhich escape characters do I use) for converting th ereports to run properly in PCL5 (or PCL6)?
Many Thanks in advance
James Newton replies: I'm not aware of any documentation for migrating from Prescribe to PCL but the PCL5 Technical Reference should help.
Hola, estoy escribiendo desde México D.F. y tengo una pregunta. Conozco un poco de secuencias de escape para las impresoras Xerox, sin embargo, la empresa en la que estoy quiere migrar a PCL para hacer nuestra impresión independiente del modelo de la impresora. Quisiera saber si existe un libro, manual o documento para empezar a entender este lenguaje del PCL, donde se puede crear un archivo de este tipo y como enviarlo a la impresora para ir probando mi avance hacia un cambio de formatos. Por ser un concepto nuevo para su servidor, no he encontrado más que partes complementarisa al lenguaje PCL pero nada que me lleve desde el inicio probando algunas funciones básicas hasta algunas avanzadas para después lograr una migración completa.
As roughly translated by bablefish:
Hello, I am writing from Mexico D.F. and I have a question. I know a little sequences of escape for the Xerox printers, nevertheless, the company in which I am wants to migrate to PCL to make our impression independent of the model of the printer. It wanted to know how if a book exists, or document manual to begin to understand this language of the PCL, where a file of this type and like sending it to the printer can be created to be proving my advance towards a change of formats. Being a new concept for its servant, I have not found more than parts complementarisa to language PCL but anything that takes from the beginning proving some basic functions to me to some outposts later to obtain a complete migration.'
Answer: The "PCL 5 Printer Language Technical Reference Manual" from Hewlett
Packard. Roughly translated as "El manual de referencia técnico de
la lengua de la impresora de PCL 5 de Hewlett Packard. " HP part number
5961-0976 As of 20020626 this was available for the cost of shiping
only at
http://www.hp.com/pond/cdrom/prodselect/pclpjl.html
James Newton replys:
Good question. It depends on how reliable you want to be and how "nice" the PCL is.You could just look for form feed characters, ( see ASCII printer codes ) but binary data in a PCL font download and or image could easily contain a form feed that would through off your count. So you have to parse the PCL (see Parsing PCL ) and skip over anything with a W as the last character of the command. (there are some exceptions, see PCL Language ) But the printer would eject a page under other circumstances... An esc E or any page formatting command after data is printed to a page, when a line feed is sent when the cursor is past the page bottom, and probably other "bad" PCL situations that I don't know yet.
In summary, simple but unreliable page counting is easy. Page counting that handles most PCL jobs takes some parsing work but isn't that hard. Absolutly accurate page counting is very difficult or maybe impossible with out the source code for the firmware in the printer.
I need to find the PCL parameter sequence (ASCII text form: i.e. "<Esc> blah blah blah") for activating a Postnet Barcode font. I'm trying to "peek" into multiple PCL files, and determine the presence or absence of a Postnet Barcode, without having to actually view each file with a PCL viewer. Perhaps there is a PCL viewer which will read & compile statistics (i.e. fonts, number of pages, etc.) on PCL files? Can anyone help? Thanks in advance.
Answer: You just need to find the escape sequence that activates the font. Print a font list from the front panel of any printer that has the barcode font installed.