This printer language was introduced by HP. There are several version of PCL and here are those listed starting with PCL5:
PCL5 de facto standard.
PCL5e enhanced version since HP LaserJet Series 5.
PCL5c enhanced version of PCL5e including color commands.
PCL6 often called PCL-XL, this is a complete new printer language and is not at all compatible with PCL5.
You can determine the used printer language by having a look into the data stream's PJL header:
@PJL ENTER LANGUAGE=####
#### can be:
PCL = PCL5, PCL5e, PCL5c
PCLXL = PCL6
For usage of most of ELP's features (like Forms management and printer handling (ELP_Command) ) the data stream must be encoded in PCL5, PCL5e or PCL5c.
For a complete reference manual search the web (or on the HP website) for "PCL5 technical reference manual". You should find a PDF document named "bpl13210.pdf".
Hint: Install Notepad++ on your PC/Server to have a great editor for looking at ELP configuration files and data streams.
Instead of ESC sign Hex 1B or ASCII 27, the alternative FREE-ESCAPE functionality can be used as well.
ELP does use some own internal PCL sequences which are described here.
PCL6 Data streams.
PCL6 data streams, also named PCL-XL are totally different from PCL5. You can look at them as 2 independent printer languages. Usually PCL6 Data streams are not touched at all by ELP, with those 2 exceptions:
a) The first read block bytes (size defined by ELP_MAX_BUFFER), usually the pjl header part of the data stream is also performed on all Search_xxx commands.
b) As then ELP falls into the Passthrough mode, the ELP command section [Passthrough] is read first direct after ELP discovered that it is a PCL6 data stream. If you need to perform further changes on the data stream, at least the searched rules can be kept activated using this additional rule:
; this rule is only interpreted when ELP falls into passthrough mode
; This rule is only interpreted when ELP falls into passthrough mode
; Otherwise a real passthrough with the exception of a) is performed.
ELP helps to initialize your ASCII data stream
The ELP_Command generator offers the possibility to initialize ASCII data streams coming without any printer initialization. Whatever is in that field, it will be inserted right at the very beginning of the data stream.
Click on Edit to open the PCL Initialization Generator.
See here for samples
ELP defines some new PCL Escape Sequences, which are mostly filtered out during processing the data stream. In particular here they are:
|Barcodes||See bar code technical reference manual for description|
|FREE-ESCAPE||\x1B**#J||Defines an alternative Escape character,
Test page \x1B**#M 3 = Print demo page, 9 = internal usage
|Demo Page||\x1B**3M||This additional Escape sequence, located in the data stream, generates a demo page, with some bar code samples.
Beside the demo page, all variables and their values are printed
|\x1B)s-999Z||Prevent ELP from downloading macros twice, if several ELP processes are cascaded|
|\x1B)s-998Z||Internal usage only! Resets the page counter in ELP_Command=R#; Reprint command|
|\x1B)s-997Z||When this sequence is found, after the next form feed ELP generates a new archive file|
|\x1B)s997Z||When this sequence is found, ELP generates right at this file position a new archive file. Note: Please avoid using additional ELP_commands, they may not work properly. Like “ET;”|
|ELP_Command||\x1B)s-996Z||Deactivates the ELP_Command execution for that page until it is activated again.
Note: For the deactivation on a page, the ELP_Command for page initialization has to be performed.
|ELP_Command||\x1B)s996Z||Activates the ELP_Command execution.|
|Reset Page Counter||\x1B)s-995Z||Resets the Page Counter right after the next form feed, so the next page will be performed as an ELP_Command C#:1.., in other words the next page will be internal counted as page 1.
Instead of this command you may use the ELP_Command R#
|Set Page Counter to 1000||\x1B)s995Z||Sets the Page Counter for the next page to page 1000. ELP_Command C#:10000.., In other words the next page will be internal counted as page 1000.
PreParsing=ON might be used in order to be able to insert the command on the previous page.
; Enumerates the total amount of printed pages at job start
[Change Papertray after test Orderform found]
; This rule is only interpreted when ELP falls into passthrough mode.
; In case the word Orderform was found, the ELP PCL command for forcing the internal page counter
|Set Page Counter to any Number||\x1B)s995.####Z||In extension to above, the page number can be set to any positive page number. E.g.:
\x1B)s995.1000Z performs the same page numbering as \x1B)s995Z. The next printed page will be performed as page 1000.
\x1B)s995.1Z performs the same page numbering as \x1B)s-995Z. The next printed page will be performed as page 1.
\x1B)s995.877Z The next printed page will be performed as page 877.
|Insertions at Form feed||\x1B)s-994Z||Is used for keys: InsertAfterNextFormFeed to select the command after the next form feed.
|End of writing out||\x1B)s-993Z||After that sequence, no out-writing of data will be further performed, maximum 1 GByte of incoming and forms data is skipped|
|End of K copy writing out||\x1B)s993Z||After that sequence ELP will stop writing out any byte for the actual copy. Does only work with copies created with the ELP_Command K#. Sample see here: Sorting Pages|
|Delete all graphic blocks||\x1B)s-992Z||Once this command is found, all coming graphical blocks are deleted|
|Delete next graphic block||\x1B)s-991Z||Once this command is found, the next graphical block is deleted|
|OMR insertion||\x1B)s-990Z||Internal usage for OMR Bar codes to generate the envelope command on last / first page|
|OMR feeder 1||\x1B)s-989Z||Adds a page from feeder 1 into the envelope, supported by some OMR types|
|OMR feeder 2||\x1B)s-988Z||Adds a page from feeder 2 into the envelope, supported by some OMR types|
|OMR feeder 2||\x1B)s-987Z||Adds a page from feeder 3 into the envelope|
|OMR no marks||\x1B)s-986Z||For a certain (back) page, the system will NOT print the OMR marks on. So you can print first page in duplex remaining in simplex.|
|Tray map recursive||\x1B)s-985Z||prevents the recursive handling of tray mappings. See here for further details.|
|Internal||\x1B)s-1985Z||After PreParsing routine, this sequence is inserted right before every Form Feed|
|Internal||\x1B)s-1986Z||Marker ESC sequence for begin of first page|
|Insertions at Form feed||\x1B)s-984Z||Is used for keys: InsertBeforeNextFormFeed to select the command before the next form feed.
|No out writing||\x1B)s983Z||ELP will process the data stream as usual, but the writing out is turned off|
|Continue out writing||\x1B)s-983Z||ELP will process the data stream as usual, and continue writing out|
|Internal||\x1B)sZ||Prevent reloading forms|
|Internal||\x1B)s601Z||Switch to previous Unicode status|
Some common sequences:
\x1B&f####y$X is the PCL5 escape sequence for calling forms.
The #### is the forms ID, any value between 1 and 32K.
The dollar can be:
2: Call macro, all settings and changes will be set after the macro is called,
3: Execute macro, beside color management, the macro will not change the printing environment
4: Overlay macro: The printer prints form now on on every page for the stream the form
5: Turn the overlay function off.
\x1B&l#H for input paper tray selections. the number in (#) is the standard value of the escape sequence (ELP_Command, TrayMap (Change easily the input/output paper tray) )
Main paper source (1)
Manual tray (2)
Manual Envelope Feed (3)
Paper tray 1 (4)
Third paper tray (5)
Fourth paper tray (6)
Fifth paper tray (7)
TowerFeed/Tray tray 1 (10)
TowerFeed/Tray tray 2 (11).
TowerFeed/Tray tray 3 (12)
TowerFeed/Tray tray 4 (13)
TowerFeed/Tray tray 5 (14)
TowerFeed/Tray tray 6 (15)
Ricoh/NRG Tray 1 (8)
Ricoh/NRG Tray 2 (1)
Ricoh/NRG Tray 3 (4)
Ricoh/NRG Tray 4 (30)
Ricoh/NRG Tray 5 (23)
Ricoh/NRG Tray 6 (24)
Ricoh/NRG Tray 7 (25)
\x1B&l#A for paper size
\x1B&l#O for print orientation
Reverse Portrait (2)
Reverse Landscape (1)
\x1B&l#S for simplex / duplex printing
Duplex long side (1)
Duplex short side (2)
\x1B&a#.##H Move the cursor to horizontal position #
\x1B&a+#.##H Move the cursor # units to the right
\x1B&a-#.##H Move the cursor # units to the left
\x1B&a#.##V Move the cursor to vertical position #
\x1B&a+#.##V Move the cursor # units down the page
\x1B&a-#.##V Move the cursor # units up the page
720 units are one Inch distance, or about 28.3 units are one millimeter