comp.lang.idl-pvwave archive
Messages from Usenet group comp.lang.idl-pvwave, compiled by Paulo Penteado

Home » Public Forums » archive » Re: Window Contents Directly to Printer
Show: Today's Messages :: Show Polls :: Message Navigator
E-mail to friend 
Return to the default flat view Create a new topic Submit Reply
Re: Window Contents Directly to Printer [message #11236 is a reply to message #11230] Thu, 19 March 1998 00:00 Go to previous messageGo to previous message
davidf is currently offline  davidf
Messages: 2866
Registered: September 1996
Senior Member
Hi Folks,

If anyone is following along or thinks this program is the
least bit useful, here is the final PRINT_IT program that
Armand and I have come up with. I got some help from the
usual anonymous lurkers, as well. :-)

I'll put this on my web page later today.

Cheers,

David

;----------------------------------------------------------
PRO Print_It, wid, Landscape=landscape, NoScale=noscale, $
NoCenter=nocenter

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

; This program was originally written by David Fanning
; using advice from RSI. It was extensively modified and
; improved by Armand J.L. Jongen and others on the IDL newsgroup.

; KEYWORD PARAMETERS:
;
; LANDSCAPE If this keyword is set, the output is in Landscape
; mode. Otherwise, Portrait mode is used.
;
; NOSCALE If this keyword is set, the output is not scaled
; to fill the page, but is left in its actual
; device coordinate size.
;
; NOCENTER If this keyword is set, the output is positioned
; in the lower-left corner of the display. Otherwise,
; the output is centered on the page.

; Check parameters.

IF N_Params() EQ 0 THEN wid = !D.Window
landscape = Keyword_Set(landscape)
noscale = Keyword_Set(noscale)
nocenter = Keyword_Set(nocenter)

; 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. Copy color table.

thisDevice = !D.Name
Set_Plot, 'PRINTER', /Copy

; Reset the PRINTER for proper calculations.

Device, Scale_Factor=1, Portrait=1

; Get the sizes for the PRINTER device.
; If the Landscape keyword is set, swap PRINTER sizes.

IF landscape THEN BEGIN

pxsize = !D.Y_Size
pysize = !D.X_Size

ENDIF ELSE BEGIN

pxsize = !D.X_Size
pysize = !D.Y_Size

ENDELSE

; Calculate a scale factor for the printer.

IF noscale THEN scalefactor = 1 ELSE $
scalefactor = 1.0 / ((Float(xsize)/pxsize) > (Float(ysize)/pysize))

; Do you want the output centered?

IF nocenter THEN BEGIN

xoffset = 0
yoffset = 0

ENDIF ELSE BEGIN

; Calculate offsets to center ouput. The offsets
; will be scaled later by the device so be sure to
; divide by the scale factor.

xoffset = Fix((Float(pxsize)/scalefactor - xsize)/2.0)
yoffset = Fix((Float(pysize)/scalefactor - ysize)/2.0)

ENDELSE

; Print it.

Device, Portrait=(NOT landscape), Scale_Factor=scalefactor
TV, contents, xoffset, yoffset, /Device
Device, /Close_Document

; Clean up.

Set_Plot, thisDevice

END

-----------------------------------------------------------
David Fanning, Ph.D.
Fanning Software Consulting
E-Mail: davidf@dfanning.com
Phone: 970-221-0438
Coyote's Guide to IDL Programming: http://www.dfanning.com/
[Message index]
 
Read Message
Read Message
Read Message
Read Message
Previous Topic: printing to postscript with PV_WAVE
Next Topic: Re: SAVE/RESTORE problems

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ] [ PDF ]

Current Time: Tue Dec 02 11:11:54 PST 2025

Total time taken to generate the page: 1.04339 seconds