|
|
| Line 4: |
Line 4: |
| This is an updated page. See [[Setting_up_a_Linux_Printer_Old|this page]] for old content. | | This is an updated page. See [[Setting_up_a_Linux_Printer_Old|this page]] for old content. |
|
| |
|
| === A new simpler way of doing GT.M pipes for printing === | | === Cache/Linux printing === |
| The old way of doing GT.M pipes for printing requires you to use pre-open execute and post-close execute. This is a way to do it with just the open parameters.
| | You can use Pipes in Cache as well to print on Linux/Unix. Here's an operative example. |
| | |
| | <pre> |
| | NAME: SAM'S PHARMACY PRINTER $I: /usr/bin/lpr -PSAN_FL6 -l |
| | OPEN PARAMETERS: "QW" SUBTYPE: P-HPLJ4SI-P12 |
| | TYPE: TERMINAL |
| | </pre> |
| | |
| | === GT.M/Linux printing === |
| | Pipes again; just like Cache. |
|
| |
|
| <pre style="padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em"> | | <pre style="padding:1em;border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em"> |
| Line 58: |
Line 67: |
| No need to do pre-open and post-close executes on the device which dynamically change IOs. | | No need to do pre-open and post-close executes on the device which dynamically change IOs. |
|
| |
|
| === Cache/Linux printing ===
| |
| You can use Pipes in Cache as well to print on Linux/Unix. Here's an operative example.
| |
|
| |
| <pre>
| |
| NAME: SAM'S PHARMACY PRINTER $I: /usr/bin/lpr -PSAN_FL6 -l
| |
| OPEN PARAMETERS: "QW" SUBTYPE: P-HPLJ4SI-P12
| |
| TYPE: TERMINAL
| |
| </pre>
| |
|
| |
| === GT.M pipe for print DEVICE (older way): ===
| |
|
| |
|
| With the introduction of the pipe device to GT.M (version V5.3-003) this simple, secure, and elegant method can be used:
| |
|
| |
| * To begin, [[Begin_Configuration_of_Vista#Update_the_Devices,_Start_Taskman_and_Mail_a_Message|Update the Devices]] file. To create a new DEVICE, enter an unused NAME of your choice.
| |
|
| |
| NAME: HP-PHOTOSMART
| |
| $I: <pipe>
| |
| PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr"")::""pipe"" s IO=""p"""
| |
| POST-CLOSE EXECUTE: X "c ""p"""
| |
| SUBTYPE: P-OTHER80
| |
| TYPE: OTHER
| |
|
| |
| Note: We use [[FILE_3.5|TYPE:OTHER]] rather than Host File Server. No host file needed; output will be "piped" to the default CUPS printer. Also the fancy stuff is in the PRE-OPEN EXECUTE. For example, one can write:
| |
|
| |
| PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P Photosmart_@192.168.5.103 -o cpi=12 -o lpi=8 -o page-left=72"")::""pipe"" s IO=""p"""
| |
|
| |
| In human (ok in geekspeak), this last PRE-OPEN EXECUTE says, "Open a pipe device named "p" with the command to print to the CUPS printer named "Photosmart_@192.168.5.103". Set it to give us 12 characters/inch, 8 lines/inch and a 1 inch left margin). And then set IO to that device."
| |
|
| |
| FileMan will then send his output to that IO device, the just-defined pipe.
| |
|
| |
| Finally, the POST-CLOSE EXECUTE simply closes the pipe. And it's gone. No Linux /tmp/print.txt file to clean up. No fuss, no muss.
| |
|
| |
| Another option is to define the device with option raw:
| |
| PRE-OPEN EXECUTE: X "o ""p"":(command=""lpr -P 1100A -o raw"")::""pipe"" s IO=""p"""
| |
| And then the SUBTYPE can manage the details of formating... Portrait vs Landscape and fonts, etc.
| |
| ----
| |
| ==== [[pipe to identify CUPS printers]] ====
| |
|
| |
| --[[User:JohnLeoZ|JL.Z]] Aug 2009
| |
| ----
| |
|
| |
| === VistA output to a temporary Linux file (Calling ^TMGPRNTR) (older) ===
| |
|
| |
| Below is an older way of setting up a Linux printer.
| |
|
| |
| Here is the DEVICE file entry:
| |
|
| |
| NAME: S121-LAUGHLIN-LASER
| |
| $I: <TO BE SET IN PRE-OPEN EX.>
| |
| LOCATION OF TERMINAL: Laughlin_Office
| |
| SUPPRESS FORM FEED AT CLOSE: YES
| |
| PAGE LENGTH: 70
| |
| PRE-OPEN EXECUTE: SET IO='''$$GETJOBNM^TMGPRNTR()'''
| |
| POST-CLOSE EXECUTE: DO '''FINISH^TMGPRNTR("laughlin_laser")'''
| |
| SUBTYPE: P-OTHER80
| |
| TYPE: HOST FILE SERVER
| |
|
| |
| Here are the supporting calls to routine ^TMGPRNTR that create a file for writing, and then send the output file to the Linux lpr system
| |
|
| |
| GETJOBNM()
| |
| ;"Purpose: To create a unique printer job name.
| |
| ;" This will be used during a printing process
| |
| ;" that writes the printer file to the host file system,
| |
| ;" then passes file to Linux
| |
| ;" printing system.
| |
| ;"Output: Returns name of file to put output into
| |
|
| |
| ;"UNIQUE will generate a filename based on time and job number
| |
| ;" i.e. 'Print-Job-628233034.tmp
| |
|
| |
| ;"write !,"here in GETJOBNM^TMGPRNTR",!
| |
| new cJobs set cJobs="PRINT JOBS"
| |
| new Filename set Filename=$$UNIQUE^%ZISUTL("/tmp/Print-Job.tmp")
| |
|
| |
| ;"Now store Filename for later transfer to Linux lpr
| |
| new index set index=$order(^TMP("TMG",cJobs,$J,""))
| |
| if index="" set index=1
| |
| set ^TMP("TMG",cJobs,$J,index)=Filename
| |
|
| |
| ;"write !,"Print job name will be:",Filename,!
| |
| quit Filename ;"result returned by altering Filename
| |
|
| |
|
| |
| FINISH(Printer)
| |
| ;"Purpose: to complete the printing process by sending the now-created file
| |
| ;" to Linux CUPS (the printing system).
| |
| ;"Note: The lpr system itself will delete this print file when
| |
| ;" done (option -r)
| |
| ;"Input: Printer OPTIONAL -- the name of the linux printer to send the job to.
| |
|
| |
| new cJobs set cJobs="PRINT JOBS"
| |
| new index set index=$order(^TMP("TMG",cJobs,$J,""))
| |
| new Filename set Filename=$get(^TMP("TMG",cJobs,$J,index))
| |
|
| |
| close IO
| |
| kill IO(1,IO)
| |
|
| |
| kill ^TMP("TMG",cJobs,$J,index)
| |
| if Filename'="" do
| |
| . new CmdStr
| |
| . set CmdStr="lpr "
| |
| . if $get(Printer)'="" set CmdStr=CmdStr_"-P "_Printer
| |
| . ;"option -r --> lpr deletes file after printing done.
| |
| . set CmdStr=CmdStr_" -r "_Filename_" &"
| |
| . ;"write !,"Here is where I call:",!,"ZSYSTEM "_CmdStr,!
| |
| . zsystem CmdStr
| |
| . ;"write "Back from zsystem. Returning to Fileman.",!
| |
|
| |
| quit
| |
|
| |
| --[[User:Kdtop|Kdtop]] 10:34, 18 Sep 2005)
| |
| ----
| |
| === '''Linux /tmp/file (With ZSYSTEM call)''' (older) ===
| |
|
| |
| On a Linux system with CUPS.
| |
|
| |
| NAME: PRINTSERVER
| |
| $I: /tmp/vistaprint.txt
| |
| LOCATION OF TERMINAL: lpr
| |
| OPEN COUNT: 1
| |
| POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -r /tmp/vistaprint.txt"""
| |
| SUBTYPE: P-OTHER80
| |
| TYPE: HOST FILE SERVER
| |
|
| |
| And for an elaboration of this method
| |
|
| |
| NAME: HP-PHOTOSMART
| |
| $I: <TO BE SET IN PRE-OPEN EXECUTE>
| |
| PRE-OPEN EXECUTE: S IO="/tmp/"_$J_"print.txt"
| |
| POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -P Photosmart_@192.168.5.103 -r /tmp/""_$J_""print.txt"""
| |
| SUBTYPE: P-OTHER80
| |
| TYPE: HOST FILE SERVER
| |
|
| |
| Note: This DEVICE does not require the calls to ^TMGPRNTR. And, by exposing the lpr call in the POST-CLOSE EXECUTE, it allows more flexibility. For example, this relatively simple change will direct output to the default CUPS printer with 12 characters/inch, 8 lines/inch and a 1 inch left margin. :
| |
|
| |
| POST-CLOSE EXECUTE: X "ZSYSTEM ""lpr -o cpi=12 -o lpi=8 -o page-left=72 -r /tmp/""_$J_""print.txt"""
| |
|
| |
| ----
| |
| === Avoiding the Staircase effect when printing from GT.M/Cache on *Nix === | | === Avoiding the Staircase effect when printing from GT.M/Cache on *Nix === |
| For an explanation of the Staircase effect, see this: | | For an explanation of the Staircase effect, see this: |
| Line 211: |
Line 83: |
|
| |
|
| On the other hand, if you are asking cups to handle the formatting (lpr without the -l option), cups properly formats the line returns through a cups filter, so you don't have to do anything. | | On the other hand, if you are asking cups to handle the formatting (lpr without the -l option), cups properly formats the line returns through a cups filter, so you don't have to do anything. |
| | |
| | === Advanced printing topics === |
| | [[VISTA_Advanced_printing_topics|Advanced printing topics]] |
Back to Programming VistA Issues
This is an updated page. See this page for old content.
Cache/Linux printing
You can use Pipes in Cache as well to print on Linux/Unix. Here's an operative example.
NAME: SAM'S PHARMACY PRINTER $I: /usr/bin/lpr -PSAN_FL6 -l
OPEN PARAMETERS: "QW" SUBTYPE: P-HPLJ4SI-P12
TYPE: TERMINAL
GT.M/Linux printing
Pipes again; just like Cache.
NAME: PHAR-IP-DM $I: PHAR-IP-DM
LOCATION OF TERMINAL: Inpatient Pharmacy Dot-Matrix
OPEN PARAMETERS: (shell="/bin/sh":comm="lpr -l -P PHAR-IP-DM 2>/dev/null":WRITEONLY)::"pipe"
SUBTYPE: P-EPSON-DM-P15-5L
TYPE: TERMINAL
NAME: PHAR-IP-LS $I: PHAR-IP
LOCATION OF TERMINAL: Inpatient Pharmacy Landscape
OPEN PARAMETERS: (shell="/bin/sh":comm="lpr -P PHAR-IP -l":WRITEONLY)::"pipe"
SUBTYPE: P-HPLJ4SI-P13-LS
TYPE: TERMINAL
NAME: PHAR-IP-POR-P12 $I: PHAR-IP
LOCATION OF TERMINAL: Inpatient Pharmacy Portrait (PL)
OPEN PARAMETERS: (shell="/bin/sh":comm="lpr -P PHAR-IP -l":WRITEONLY)::"pipe"
MNEMONIC: PL
SUBTYPE: P-HPLJ4SI-P12 TYPE: TERMINAL
NAME: PHAR-IP-POR-P16 $I: PHAR-IP
LOCATION OF TERMINAL: Inpatient Pharmacy Portrait (MAR)
OPEN PARAMETERS: (shell="/bin/sh":comm="lpr -P PHAR-IP -l":WRITEONLY)::"pipe"
MNEMONIC: MAR
SUBTYPE: P-HPLJ2-P16 TYPE: TERMINAL
How does this work?
The way this works is that $I becomes the IO variable. The open
parameters tells VISTA how to open the device.
Vista does this:
S IO=[$I]
S param=[OPEN PARAMETERS]
O IO:param
U IO
Send Open Execute from Subtype
U IO(0)
Interact with user; open another job, etc...
U IO
write write write
Send Close Execute from Subtype
C IO
etc.
No need to do pre-open and post-close executes on the device which dynamically change IOs.
Avoiding the Staircase effect when printing from GT.M/Cache on *Nix
For an explanation of the Staircase effect, see this:
http://www.digitalissues.co.uk/html/os/unix/stair.html
Basically, the new line doesn't do a carriage return with it, so our output just flows off the page. So when you print a 10 line document, you may only see one line, as the rest was printed outside of the margin.
If you are sending raw output (lpr with the -l option) from VISTA to any PCL compatible printer (and VISTA by and large uses PCL for formatting plain text output), you need to add this to your open execute:
W $C(27),"&k2G"
This tells the PCL compatible printer to append a CR to each LF or FF.
On the other hand, if you are asking cups to handle the formatting (lpr without the -l option), cups properly formats the line returns through a cups filter, so you don't have to do anything.
Advanced printing topics
Advanced printing topics