Difference between revisions of "VISTA Advanced printing topics"

From VistApedia
Jump to: navigation, search
(Finding the ready status of a print queue)
(Finding the ready status of a print queue)
Line 188: Line 188:
  
 
On Linux, the lpstat command tells you all the printers and what their status is.
 
On Linux, the lpstat command tells you all the printers and what their status is.
 
+
<pre>
 
$ lpstat -a
 
$ lpstat -a
  
Line 196: Line 196:
  
 
TEST-03 accepting requests since Fri 17 Mar 2017 10:03:00 AM EST
 
TEST-03 accepting requests since Fri 17 Mar 2017 10:03:00 AM EST
 
+
</pre>
 
OR for a particular printer:
 
OR for a particular printer:
 +
<pre>
 +
$ lpstat -p  TEST-03
  
$ lpstat -p  TEST-03
 
<pre>
 
 
printer TEST-03 is idle.  enabled since Fri 17 Mar 2017 08:39:00 AM EDT
 
printer TEST-03 is idle.  enabled since Fri 17 Mar 2017 08:39:00 AM EDT
 
         Ready to print.
 
         Ready to print.
 
</pre>
 
</pre>

Revision as of 12:50, 9 June 2016

Advanced Printing Topics

Authored mainly by Sam Habiel, the printer "sensei". This page mainly deals with PCL5 printers; not Intermec and Zebra printers.

How do computers communicate with printers, software-wise?

This is a pretty difficult topic. Cheaper printers only accept binary data that is hardcoded by the computers; typically these printers are only supported on Windows, and thus are named "Winprinters". Higher end printers have a processor on them that can typically interpret PCL5, PCL6, and PS; and possibly PDF. These printers are easily supported in Linux.

VISTA and what it really sends

VISTA sends PCL5 to printers. You need to make sure that your printer supports PCL5. All HP Printers support PCL5, no matter how cheap; other manufacturers only support it on their higher end printers. If you need to look it up, go to the manufacturer's website and look at the technical specs sheet. The section is typically called "supported emulations"; or "supported languages". What VISTA sends is determined by the sub-type defined for the device.

Testing Printers

To test printers in VISTA after setting it up, there are a few steps you have a to go through.

Invoke via %ZIS first.

D ^%ZIS

DEVICE: HOME//MY PRINTER

U IO

W "TEST",!,"TEST",! D ^%ZISC

See the output. If it's okay, you are ready to move to the next step. If you see the "staircase" effect, you need to go back and set-up the terminal type correctly here.

The next menu option to try is Send Test Pattern to Terminal [XUTTEST]. If that works, then you are good to go.

Various troubleshooting topics -- how fun!

There are various issue that come up regularly with VISTA.

Use this page as a reference for PCL:

http://www.pclviewer.com/resources/reference/

Extra pages

Extra pages can happen for three different reasons:

  • By default, VISTA prints an extra page after each print job. This is for historical reasons; as most of the early printers were dot-matrix. Today, it's recommended to disable this. To disable this, you can do it at the device level or the terminal type level. At the device level, set SUPPRESS FORM FEED AT CLOSE to yes. For the terminal type, set CLOSE EXECUTE to S IONOFF="" W $C(27)_"E"
  • The text doesn't fit the page and spills over to the next page. VISTA printing options must follow the IOSL value (Page Length in Terminal Type or Device--Device overrides Terminal Type). Most of the time this has to do with the fact that the text size for the report is too large; or that the margins are not appropriate. Based on visual inspection, you should decide what to do. The unlikely case is that the VISTA programmer is not obeying IOSL; but that is for you to determine.
  • If both of the above fail, it's likely that VISTA sends a hard coded form feed to the printer. You need to capture the output by capturing the print to a file (use HFS;subtype) and visually examine it in a programming editor.

Wrapping

Typically this has to do with whether the printer is configured to take 132 characters or 80 characters; if not, then it has to do with the font size.

VISTA has these typical formats for printing:

  • 12 cpi 8 lpi Portrait (most reports)
  • 17 cpi 7 lpi Portrait (MAR)
  • 14 cpi 6 lpi Landscape (132 wide reports)
  • 22 cpi 12 lpi Landscape (228 wide reports)

Typical PCL String

To construct a PCL in VISTA, you typically put everything in the Open Execute. The Close Execute should always be set to S IONOFF="" W $C(27)_"E" unless you want to do something special. The Form Feed accepts PCL as well.

The typical PCL sequence for an Open Execute is as follows:

  • Reset
  • Set Line Carriage mode (CR, CRLF, or LF)
  • Set Orientation (Portrait or Landscape)
  • Set Character Set (optional; not needed for US printing; may need to Spanish)
  • Set Margins (optional; but you will probably need it at some point)
  • Set Font

When constructing a string, I recommend using *27 rather than $C(27) because it's shorter, and you will type a lot of it.

An example. Note that this needs to be all in one string. It's separated here for education.

W *27,"E"    ; Reset
W *27,"&k2G" ; Set Carriage mode to LF.
W *27,"&l0O" ; Portrait; Landscape is 1O.
...          ; Character Set Omitted
W *27,"&l4E" ; Top Margin 4 lines
W *27,"&a5L" ; Left Martin 5 columns
W *27,"(s0p12h0s0b4099T" ; Fixed Pitch; 12 cpi, fixed pitch for secondary font, Medium Weight, select courier font.

Advanced Functions

I won't document this in detail, but here are some advanced examples. These ones do headers.

NAME: P-HP-LTR-POR-C12L6-W80-HD         RIGHT MARGIN: 80
  FORM FEED: $C(12)_$C(27)_"&f0S"_$C(27)_"&l3E"_$C(27)_"*p2100x,0Y"_$C(27)_"(s1p
16h0s0b16602THEADER"_$C(27)_"(s0p12h0s0b4099T"_$C(27)_"&l4E"_$C(27)_"&f1S"_$P("
#","")                                  PAGE LENGTH: 58
  BACK SPACE: $C(8)
  OPEN EXECUTE: W $C(27,69),$C(27),"&l0O",$C(27),"(0N",$C(27),"&l4E",$C(27),"&a5
L",$C(27),"&k2G",$C(27),"&f0S",$C(27),"&l3E",$C(27),"*p2100x,0Y",$C(27)_"(s1p16h
0s0b16602THEADER",$C(27),"(s0p12h0s0b4099T",$C(27),"&l4E",$C(27),"&f1S" S ($X,$
Y)=0                                    CLOSE EXECUTE: S IONOFF="" W $C(27)_"E"
  DESCRIPTION: 12 cpi 6 lpi width 80 standard letter printer
NAME: P-HP-LTR-POR-C17L7-W128-HD        RIGHT MARGIN: 128
  FORM FEED: $C(12)_$C(27)_"&f0S"_$C(27)_"&l3E"_$C(27)_"*p2100x,0Y"_$C(27)_"(s1p
16h0s0b16602THEADER"_$C(27)_"(s0p17h9v0s0b0T"_$C(27)_"&l4E"_$C(27)_"&l7C"_$C(27
)_"&f1S"_$P("#","")                     PAGE LENGTH: 64
  BACK SPACE: $C(8)
  OPEN EXECUTE: W *27,"E",*27,"&k2G",*27,"&l4E",$C(27),"&f0S",$C(27),"&l3E",$C(2
7),"*p2100x,0Y",$C(27)_"(s1p16h0s0b16602THEADER",*27,"&l4E",*27,"&f1S",$C(27),"
(s0p17h9v0s0b0T",*27,"&l7C" S ($X,$Y)=0
  CLOSE EXECUTE: S IONOFF="" W $C(27,69)
  DESCRIPTION: 17 cpi 7 lpi width 128 standard letter printer (MAR)
NAME: P-HP-LTR-LAND-C22L12-W228-HD      RIGHT MARGIN: 228
  FORM FEED: $C(12)_$C(27)_"&f0S"_$C(27)_"&l3E"_$C(27)_"*p2750x,0Y"_$C(27)_"(s1p
16h0s0b16602THEADER"_$C(27)_"(s0p22h0s0b4099T"_$C(27)_"&l4E"_$C(27)_"&f1S"_$P("
#","")                                  PAGE LENGTH: 88
  BACK SPACE: $C(8)
  OPEN EXECUTE: W $C(27,69),$C(27),"&l1O",$C(27),"&l4E",$C(27),"&l0D",$C(27),"&k
2G",$C(27),"&f0S",$C(27),"&l3E",$C(27),"*p2750x,0Y",$C(27)_"(s1p16h0s0b16602THEADER",$C(27),"(s0p22h0s0b4099T",$C(27),"&f1S",$C(27),"&l4E" S ($X,$Y)=0
  CLOSE EXECUTE: S IONOFF="" W $C(27)_"E"
  DESCRIPTION: 22 cpi 12 lpi width 228 landscape letter printer (condensed)
NAME: P-HP-LTR-LAND-C14L6-W132-HD       RIGHT MARGIN: 132
  FORM FEED: $C(12)_$C(27)_"&f0S"_$C(27)_"&l3E"_$C(27)_"*p2750x,0Y"_$C(27)_"(s1p
16h0s0b16602THEADER"_$C(27)_"(s0p14h0s0b4099T"_$C(27)_"&l4E"_$C(27)_"&f1S"_$P("
#","")                                  PAGE LENGTH: 46
  BACK SPACE: $C(8)
  OPEN EXECUTE: W $C(27,69),$C(27),"&l1O",$C(27),"&l4E",$C(27),"&a5L",$C(27),"&k
2G",$C(27),"&f0S",$C(27),"&l3E",$C(27),"*p2750x,0Y",$C(27)_"(s1p16h0s0b16602THEADER",$C(27),"(s0p14h0s0b4099T",$C(27),"&f1S",$C(27),"&l4E" S ($X,$Y)=0
  CLOSE EXECUTE: S IONOFF="" W $C(27)_"E"
  DESCRIPTION: 14 cpi 6 lpi width 132 landscape letter printer

and this one does a watermark:

NAME: P-HP-PORTRAIT-C16L7-WM            SELECTABLE AT SIGN-ON: NO
  RIGHT MARGIN: 96
  FORM FEED: $c(27)_"*c5760x6000Y"_$c(27)_"*p150x150Y"_$c(27)_"*c0T"_$c(27)_"%1B
IN;SP1;DI1,-1;SD2,1,4,140,6,3,7,4148;SS;PA0,7000;FT10,5;CF2,0;LO21;LBWATERMARK"_$c
(3,27)_"%1A"_$c(12)                     PAGE LENGTH: 60
  BACK SPACE: $C(8)                     *OLD XY CRT: 60
  OPEN EXECUTE: W *27,"E",*27,"(8U",*27,"(s0P",*27,"(s16H",*27,"(s9V",*27,"(s0S"
,*27,"(s-3B",*27,"(s0T",*27,"&l88P",*27,"&a255M",*27,"&k2S",*27,"&l7C",*27,"&s1C
",*27,"&k2G"
  CLOSE EXECUTE: W *27,"*c5760x6000Y",*27,"*p150x150Y",*27,"*c0T",*27,"%1B","IN;
SP1;DI1,-1;SD1,21,2,1,4,140,5,0,6,3,7,4148;SS;PA0,7000;FT10,5;CF2,0;LO21;LBWATERMARK"
_$C(3),*27,"%1A"                     DESCRIPTION: HP JL4Si 12 pitch Courier

Advanced troubleshooting

If you are stuck with a particularly difficult problem, it may be useful to capture the PCL and use a PCL emulator and print to a PDF.

This is the emulator I use, http://www.ghostscript.com/GhostPCL.html.

To use it, here is a sample invocation:

cat vista_print-0001.pcl | sed -e "s/\x1b\[H\x1b\[J/\xc/g" | C:\Users\shabiel\workspace\ghostpcl-9.15-win32\pcl6-9.15-win32.exe -dBATCH -dSAFER -dNOPAUSE -sDEVICE=pdfwrite -r600 -sOutputFile="testpdf.sam" -

You don't need the sed part typically; I added this for interpretation of slave prints.

Printing PDFs from VISTA

Using GhostPCL, you can directly print out a PDF from VISTA. Here's an example in GT.M on Linux:

NAME: PDF WRITER                        $I: PDF-WRITER
  LOCATION OF TERMINAL: /tmp/           
  OPEN PARAMETERS: (comm="pcl6 -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -SOutputFile=
/tmp/green-sheet.pdf -")::"pipe"        SUBTYPE: P-HP BARCODER
  TYPE: TERMINAL

On Windows, you can add a Windows printer that automatically calls GhostPCL. You need to use this amazing piece of software:

http://sourceforge.net/projects/mfilemon/

Once you install it and configure it, you need to set the $I appropriately.

Finding the TCP/IP address for a print queue name

On Linux, the lpstat command tells you details about the print queue

$ lpstat -v

device for TEST-01: socket://192.168.10.3:9100

device for TEST-02: socket://192.168.10.4:9100

Finding the ready status of a print queue

On Linux, the lpstat command tells you all the printers and what their status is.

$ lpstat -a

TEST-01 accepting requests since Sun 25 Dec 2005 09:54:34 AM EST

TEST-02 accepting requests since Thu 28 Nov 2013 09:56:11 AM EST

TEST-03 accepting requests since Fri 17 Mar 2017 10:03:00 AM EST

OR for a particular printer:

$ lpstat -p  TEST-03

printer TEST-03 is idle.  enabled since Fri 17 Mar 2017 08:39:00 AM EDT
        Ready to print.