revprintfield and RIGHT tabalign?

Mark Waddingham mark at livecode.com
Fri Feb 14 13:13:47 EST 2020


On 2020-02-14 17:32, Klaus major-k via use-livecode wrote:
>> revPrintField formats the content of the field you specify to fill a 
>> new field
>> which fits within the printMargins of the page.
>> 
>> 'print this card' starts printing the card *as it is* with the 
>> top-corner at
>> the left-print-margin,top-print-margin.
>> 
>> Try choosing 'A4 Borderless' as the page size (this has 0 print 
>> margins).
> 
> As I wrote, then it works as exspected, but this is not practical,
> who has a marginless printer?

Most people these days in fact! Most (even cheap) inkjets can print to 
the edge of an A4 page :D

[ Of course, the need for margins when printing is not actually really 
related to what could be printed, but what is comfortable for the user 
to hold and read! ]

The revPrintField command is written to make it easy to print the 
contents of a field, over multiple pages to fit to the page setup and 
printer options provided by the user. This means it computes the width 
of the field based on those options.

The issue here is that your field layout is width sensitive - as are 
most documents which use tabStops. If you'd typed your content into 
word, and then changed the page setup / margin options from the settings 
in effect when you set the tabStops then you'd get exactly the same 
effect as you are seeing with revPrintField.

Your stack appears to already be laid out assuming an A4 page size - 
which is why you get the effect you want when using 'print this card'.

Assuming you don't need to accommodate user-chosen page sizes, then all 
you should need to do is:
   1) use revShowPrintDialog to turn off showing the page setup dialog
   2) set the printMargins to those you already have in your stack (the 
distance of each edge of the field from the card boundary)
   3) set the printPaperSize to the width and height of your stack (which 
is A4 size in points - I think at least)
   4) call (modified) revPrintField

This should mean that revPrintField will use a field of the same width 
and height of that in the stack, but do the pagination for you.

If you do need to account for different (user chosen) page widths, then 
you will need to adjust the tabStops appropriately:
   1) answer page setup to get the user's chosen options
   2) use revShowPrintDialog to turn off showing the page setup dialog
   3) interrogate the printPaperSize and printMargins to work out the 
printable width (pageWidth - leftMargin - rightMargin)
   4) adjust the tabStops of your field so that the right tabStop is at 
the printable width
   5) call (modified) revPrintField

Hope this helps!

Warmest Regards,

Mark

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list