| Re: Window Contents Directly to Printer [message #11241 is a reply to message #11230] |
Thu, 19 March 1998 00:00  |
Armand J. L. Jongen
Messages: 9 Registered: April 1997
|
Junior Member |
|
|
David Fanning wrote:
> I leave it as an exercise for the reader to figure out
> how to print in landscape mode. And if someone can figure
> out how to center the window contents on the page, I'll
> send them my favorite Barry Lopez book, *Desert Notes/
> River Notes*. :-)
>
> Cheers,
>
> David
>
I hope I stand a change with my version of Print_It. It works on my
printer :-)) Looking forward to your comments.
Cheers,
Armand
--
************************************************************ ************
Armand J.L. Jongen Academic Medical Centre
Laser Centre
Phone +31-20-5667418 \\||||// Meibergdreef 9
Fax +31-20-6975594 | ~ ~ | 1105 AZ Amsterdam
E-mail a.j.jongen@amc.uva.nl [| o o |] The Netherlands
*****************************o00o***(__)***o00o************* ************
**********************************************************
PRO Print_It, wid, Landscape=Landscape, Scale=Scale,
NotCentered=NotCentered
; This program sends the contents of the specified
; window to the default printer. The current window
; is used if a window index number is not provided.
; KEYWORD PARAMETERS:
; LANDSCAPE = If set it prints in Landscape mode.
; Portrait is default.
; SCALE = If set the Window-contents is scaled
; to fill the page. Default is no scaling
; NotCentered = If set the Window-contents is not centered
; on the page. By default the contents
; will be centered.
IF N_Params() EQ 0 THEN wid = !D.Window
IF Keyword_set(Landscape) Then Portrait=0 ELSE Portrait=1
IF Keyword_set(Scale) Then Scale=1 ELSE Scale=0
IF Keyword_set(NotCentered) Then Center=0 ELSE Center=1
; Make the window current. Get contents.
WSet, wid
contents = TVRD()
; Get the sizes of the window.
xsize = !D.X_Size
ysize = !D.Y_Size
; Change the current device to printer
thisDevice = !D.Name
Set_Plot, 'PRINTER'
; Always set the scaling back to one first and
; also set back to portrait for proper calculations
Device, Scale_Factor=1
Device, /Portrait
; Get the sizes of the PRINTER device.
; If the Landscape keyword was set, swap px and py sizes
If (Portrait) Then Begin
pxsize = !D.X_Size
pysize = !D.Y_Size
EndIf Else Begin
pxsize = !D.Y_Size
pysize = !D.X_Size
EndElse
; Calculate a scale factor for the printer
; if the keyword Scale is set.
If Scale Then Begin
scalefactor = 1.0/((Float(xsize) / pxsize) > (Float(ysize) / pysize))
EndIf ELSE scalefactor=1
If Center Then Begin
; Calculate the offsets to center the thing
; The will also be scaled later by the device so
; devide by scalefactor
xoffset=FIX((Float(pxsize)/scalefactor - xsize)/2.0)
yoffset=FIX((Float(pysize)/scalefactor - ysize)/2.0)
Endif Else Begin
; No centering so no offset
xoffset=0
yoffset=0
Endelse
; Print it.
Device, Portrait=Portrait
Device, Scale_Factor=scalefactor
TV, contents, xoffset, yoffset,/Device
Device, /Close_Document
; Clean up.
Set_Plot, thisDevice
END
**********************************************************
|
|
|
|