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:


#### can be:
PCL = PCL5, PCL5e, PCL5c

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".

TIP: 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


; Now all Search_xxx and OutSearch_xxx rules in the configuration file are still 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

New PCL ELP control Escape Sequences

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
Macro Download \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
Split Archiving
Split OutPort
\x1B)s-997Z When this sequence is found, after the next form feed ELP generates a new archive file
Split Archiving
Split OutPort
\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#
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)s-554Z Start tables
Internal \x1B)sZ Prevent reloading forms
Internal \x1B)s600Z Unicode ON
Internal \x1B)s-600Z Unicode OFF
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

A4 (26)
A3 (27)
A5 (24)
Letter (2)
legal (3)

\x1B&l#O for print orientation

Portrait (0)
Landscape (1)
Reverse Portrait (2)
Reverse Landscape (1)

\x1B&l#S for simplex / duplex printing

Simplex (0)
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

UEL Command PJL Commands ELP_Commands