PJL allows job-level control that cannot be accomplished with PCL, PostScript, or other printer languages. To provide this control, PJL functions are in the hierarchy above the level of PCL and other printer languages, provide five major functions:

  • Printer language switching between jobs
  • Job separation
  • Information about job like user, application, driver, comments, etc.
  • Printer configuration (like stapling, punching)
  • Status readback from the printer to the host computer (i.e. ready message).

Every PJL header finishes by calling a printer language, like in the following examplePCL5 :

@PJL ENTER LANGUAGE=PCL

A complete PJL header might look like this:

\x1B%-12345X@PJL JOB NAME="Microsoft Word - Document1"
@PJL SET STRINGCODESET=UTF8
@PJLSETJOBATTR="JobAcct1=JOHNDOE"
@PJLSETJOBATTR="JobAcct2=JOHNPC"
@PJLSETJOBATTR="JobAcct3=STETHOS_NT"
@PJLSETJOBATTR="JobAcct4=20090225101620"
@PJLSETJOBATTR="JobAcct5=61cf3b33-2bb8-42bb-b88c-15efe17f6fa3"
@PJLSETJOBATTR="JobAcct6=Microsoft Office Word"
@PJLSETJOBATTR="JobAcct7=WINWORD.EXE"
@PJLSETJOBATTR="JobAcct8=JOHNDOE"
@PJLSETJOBATTR="JobAcct9="
@PJL DMINFO ASCIIHEX="0400040101020D101001153230303930323235303931363230"
@PJL SET USERNAME="JOHNDOE"
@PJL SET JOBNAME="Microsoft Word - Document1"
@PJL SET QTY=1
@PJL SET PROCESSINGTYPE="STAPLING"
@PJL SET PROCESSINGOPTION="NONE"
@PJL SET PROCESSINGBOUNDARY=MOPY
@PJL SET ECONOMODE=OFF
@PJL SET KEEPGLOSSMODE=UNDEFINED
@PJL SET BITSPERPIXEL=1
@PJL SET RESOLUTION=600
@PJL ENTER LANGUAGE=PCL

Such information like for example the application name, user name etc. can be used to create trigger rules like:

If an ASCII data stream does not come with PJL commands, you can use the ELP_Command ET; to wrap the job and apply stuff like safe printing or stapling .

When Job Name begins with "Microsoft Word" do ...

[Trigger for MS Word]

Trigger_Binary=@PJL JOB NAME="Microsoft Word -

; Print on every page a colored security watermark

ELP_Command=C1:1-#PREPARSEPAGECOUNT#G1000;

Sometimes it could be very important to perform action on the document name even before a single byte is written. For MS Windows the Variable #PRINTDOCNAME# hold that information form the print job properties. Within Linux you can pass the job name in with the ELP Command Line Argument "-p4Microsoft Word - xxxx".

if you need to detect right at the beginning if the job comes form MS Word:

[GLOBAL]

; tell ELP that the trigger character 1 is always found

SetTrigger=1:ON

; Then directly evaluate this rule before readingthe first byte
; remove that line if the evaluation can be done anytime later

TriggerSection=Test variable right atbeginning

[Test variable right at beginning]

; This primary trigger evaluation is aleays true! See SetTrigger above.

Trigger_Binary=1

; If this secondary trigger is also true:

Trigger_Variable=LEFT(#PRINTDOCNAME#,16):Microsoft Word-

; then do nothing

PassThrough=ON
Exit=ON

Related articles: Example using PJL commands, ELP_Commands, @PJL Commands, UEL Command