Graham,
I tackled this task a while back. Here is an outline of my approach:

First, I use a separate "printing stack" for laying out the text, adding page numbers, headers etc. I took the block of text I wanted to print (unknown size) and broke it up into page size chunks, placing text into a field on the "printing stack" and creating a new card in the "printing stack" for each new page-sized chunk of text until all the original text had been placed into the "printing stack". Techniques for doing this have been discussed on this list more than once. (I've included a script scrap below which was developed from advice offered here.)

Once you have a mechanism for knowing where the page breaks occur, this same routine can be used for putting text into a series of fields inside a scrolling "preview" group that the user can examine. I still use the "printing stack" with format for printing to determine each page break and then copy the text off of each card and place it into a normally formatted (and visible to the user) stack, each card of the "printing stack" going into a separate "page-o-text" field. I put a field that displays the page number in between each "page-o-text" field. If this is all in a scrolling group then the user can scroll through and see the number of pages and exactly where each page break will occur.
HTH

-Scott Morrow

Elementary Software
(Now with 20% less chalk dust !)
web     http://elementarysoftware.com/
email   [EMAIL PROTECTED]


---------------- script scrap for breaking a text block into page sized chunks -------------------- -- assumes a stack "PrintComments" with a field "bigComment" (sized appropriately) -- assumes a source field "bigComment" of a source stack <lPrintJobStackName> ... so that the htmlText can be used
-- watch for line wraps --

-- copy the styled text off the report field into the field of a specially formatted substack, "PrintComments" set the htmlText of fld "bigComment" of cd 1 to tMySourceText -- the htmlText of fld "bigComment" of cd pThisStudent of stack lPrintJobStackName
  -- the text needs to be broken into page size chunks
  put 1 into tCardCounter
put the number of chars of fld "bigComment" of cd tCardCounter into tNumOfChars put the formattedHeight of char 1 to tNumOfChars of fld "bigComment" of cd tCardCounter into tCharHeight put (the height of fld "bigComment" of cd tCardCounter) into tFieldHeight
  REPEAT until tFieldHeight >= tCharHeight
put the number of chars of fld "bigComment" of cd tCardCounter of stack "PrintComments" into tNumOfChars put the formattedHeight of char 1 to tNumOfChars of fld "bigComment" of cd tCardCounter of stack "PrintComments" into tCharHeight -- remove extra characters and put the remaining into a new field on a new card
    REPEAT with c = 1 to tNumOfChars
IF the formattedHeight of char 1 to c of fld "bigComment" of cd tCardCounter of stack "PrintComments" >= tFieldHeight - 24 THEN -- 24 is wiggle room put the htmlText of char c to -1 of fld "bigComment" of cd tCardCounter of stack "PrintComments" into tHtmlText delete char c to -1 of fld "bigComment" of cd tCardCounter of stack "PrintComments"
        clone cd tCardCounter of stack "PrintComments"
        put tCardCounter + 1 into tCardCounter
set the htmlText of fld "bigComment" of cd tCardCounter of stack "PrintComments" to tHtmlText -- put the text that didn't fit, into the new field put "page" && tCardCounter into fld "footer" of cd tCardCounter of stack "PrintComments" -- update the page number
        exit REPEAT
      END IF
END REPEAT -- remove extra characters and put the remaining into a new field
  END REPEAT -- text in the last field fits
  set the formatForPrinting of stack "PrintComments" to true
  close stack "PrintComments"
  set the loc of stack "PrintComments" to -9999,-9999
  set the vis of stack "PrintComments" to false
  go cd 1 of stack "PrintComments"
  print stack "PrintComments"
  -- delete any extra cards in the "PrintComments" stack
  -- and generally clean up
  put the num of cds of stack "PrintComments" into tCardsToDelete
  REPEAT with x = tCardsToDelete down to 2
    delete cd x of stack "PrintComments"
  END REPEAT

-----------------------------------------------------------------

On Mar 3, 2007, at 2:33 AM, Graham Samuel wrote:

Folks, I'm faced with the problem of providing a printing routine to print one or more pages of text (the number of pages is not known in advance) on a PC, and also being able to offer an on- screen preview facility. Logically, I want the user to press a 'Print' button and get a printout, or a 'Preview' button and get a preview of the page(s) **exactly as they will appear on the physical printout**; this second mode would also allow the user to go on to print. I might relax on the "exactly" if I could ensure that the same amount of text appeared both on the preview and the printout, and the line breaks came in the same places: but it's second best really if the type doesn't look the same in both cases.

With the aid of Dan Shafer's e-book on Printing in Revolution (thanks, Dan), I think I understand the issue revolving around the formatForPrinting property, in that I have to set up my printing stack with this property set to true and somehow create the fields with the text in - one card per page - without editing them (this seems something of a contradiction, but I'm experimenting...): however it appears to me that if I show these cards as previews, I will get an anomalous result, because the fonts the Rev system uses will not be ones intended for screen display, and therefore (we are warned) will look 'wrong'. If I do use the ones intended for screen display, I run into the danger that they won't look like the printout, and might even end up with different numbers of lines per page.

Would anyone who has already tackled this be prepared to share their approach?

TIA

Graham

PS It's a helluva lot easier on a Mac, where Preview is built in to the OS and fonts are WYSIWYG anyway. But my customers have PCs.



----------------------------------------
Graham Samuel / The Living Fossil Co. / UK and France
_______________________________________________
use-revolution mailing list
[email protected]
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to