Tech Note: How to Print the Stage

Products: PrintOMatic Lite MX, PrintOMatic Lite Xtra 1.6.5, PrintOMatic MX, PrintOMatic Xtra 1.6.5
Platforms: all

The easiest way to print the Stage in either the Lite or the Full versions of PrintOMatic is simply to use the one-line printStage command.

However, for some people, printStage won’t do all you want. For example, you may want to print a portion of the stage instead of the whole thing, or you may want to customize the print job by hiding dialog boxes, etc.

Customizing Stage Printing

Below is a script that works ONLY with the Full version of PrintOMatic. This script duplicates in Lingo exactly what the printStage command does. It is a starting point for any customization you might want to do. Be careful of the 4 lines where drawStagePicture is called: you need to return these 4 lines to a single line of Lingo or you'll get a script error.

on myPrintStage

  

  set doc = new(xtra "PrintOMatic")

  if not objectP(doc) then

    -- no printer

    alert "There is no currently selected printer."

    exit

  end if

  

  -- setup print job

  setDocumentName doc, "My Stage Printout" -- or whatever

  setMargins doc, Rect(72,72,72,72) -- 1 inch margins

  

  set stageWidth = the width of the rect of the stage

  set stageHeight = the height of the rect of the stage

  

  -- set paper orientation

  if stageWidth > stageHeight then setLandscapeMode doc, TRUE

  

  set pageWidth = getPageWidth(doc)

  set pageHeight = getPageHeight(doc)

  

  -- figure out scaling of page

  set scaling = min(1.0,float(pageWidth)/float(stageWidth))

  set scaling = min(scaling,float(pageHeight)/float(stageHeight))

  

  set destWidth = integer(scaling*stageWidth)

  set destHeight = integer(scaling*stageHeight)

  

  -- figure top left starting point for a centered image

  set destLeft = (pageWidth-destWidth)/2

  set destTop = (pageHeight-destHeight)/2

  

  -- make a new page

  newPage doc

  

  -- grab the stage, put it on the page

  -- remove line breaks so the next line is ONE LINE!

  drawStagePicture doc, 

     Rect(destLeft,destTop,destLeft+destWidth,destTop+destHeight), 

     Rect(0,0,stageWidth, stageHeight), 

     FALSE

  

  -- un-comment the next line to hide the progress dialog

  -- setProgressLoc doc, Point(-1000,-1000)

  -- this command only works in the registered Xtra

  

  -- comment out the next line and the "end if" line to hide job setup

  if doJobSetup(doc) then

    print doc -- you can substitute print preview here, too!

  end if

  

  set doc = 0

  

end

A printFrom Replacement

The code below is a PrintOMatic-based replacement to Director's built-in printFrom command. Since printFrom doesn't work in Shockwave, this is the way to get the same functionality. It's also a good starting point for any customization you might want to do.

Note that this code only works in the FULL version of PrintOMatic, and not the Lite version.

This function is called myPrintFrom and accepts the same parameters (first frame, last frame, reduction) that printFrom does, as well as allowing you to set the document name as the last parameter.

Watch the line breaks when you copy and paste this code. The line that begins with drawStagePicture will need to have extra line-breaks removed for the code to compile.

on myPrintFrom firstFrame, lastFrame, reduction, documentName

  

  set doc = new(xtra "PrintOMatic")

  if not objectP(doc) then

    -- no printer

    alert "There is no currently selected printer."

    exit

  end if

  

  -- setup print job

  if stringP(documentName) then setDocumentName doc, documentName

  setMargins doc, Rect(72,72,72,72) -- 1 inch margins

  

  set stageWidth = the width of the rect of the stage

  set stageHeight = the height of the rect of the stage

  

  -- set paper orientation

  if stageWidth > stageHeight then setLandscapeMode doc, TRUE

  

  set pageWidth = getPageWidth(doc)

  set pageHeight = getPageHeight(doc)

  

  -- figure out scaling of page

  if integerP(reduction) then

    set scaling = float(reduction)/float(100)

  else

    -- auto scaling

    set scaling = min(1.0,float(pageWidth)/float(stageWidth))

    set scaling = min(scaling,float(pageHeight)/float(stageHeight))

  end if

  

  set destWidth = integer(scaling*stageWidth)

  set destHeight = integer(scaling*stageHeight)

  

  -- figure top left starting point for a centered image

  set destLeft = (pageWidth-destWidth)/2

  set destTop = (pageHeight-destHeight)/2

  

  -- set valid last frame

  if not integerP(lastFrame) then set lastFrame = firstFrame

  

  set originalFrame = the frame

  repeat with theFrame = firstFrame to lastFrame

    go to frame theFrame

    -- make a new page

    newPage doc



    -- grab the stage, put it on the page

    -- remove line breaks so the next line is ONE LINE

    drawStagePicture doc,

        Rect(destLeft,destTop,destLeft+destWidth,destTop+destHeight),

        Rect(0,0,stageWidth, stageHeight), FALSE



  end repeat

  go to frame originalFrame

  

  -- un-comment the next line to hide the progress dialog

  -- setProgressLoc doc, Point(-1000,-1000)

  -- (the above command only works in the registered Xtra)

  

  if the controlDown then

    -- hold down the control key for a print preview

    printPreview doc

  else

    -- comment out the next line and the "end if" line to hide job setup

    if doJobSetup(doc) then

      print doc -- you can substitute print preview here, too!

    end if

  end if

  

  set doc = 0

  

end