in reply to Re: combining lists, formatting and printing on windows
in thread combining lists, formatting and printing on windows

Wow, you researched that well enough to have found my previous struggles with it. I went away from rtf before, but this time I thought I'd try it, getting farther in a day than expected. Caller and callee look like this now:

#!/usr/bin/perl -w use strict; use 5.010; use lib "template_stuff"; use steps1; say "enter basename for file"; my $word = <>; chomp $word; # main data structure my %vars = ( fears => 'fears2.txt', causes => 'causes2.txt', width => 50, word => $word .'.rtf', ); my $rvars = \%vars; my $return = pop_texts( $rvars ); say "returned was \n $$return"; my $return2 = format_texts( $rvars, $return ); __END__
sub format_texts { use strict; use 5.010; use RTF::Writer; my ( $rvars, $reftext1 ) = @_; my %vars = %$rvars; my $text1 = $$reftext1; my $rtf = RTF::Writer->new_to_file( $vars{word} ); $rtf->prolog( 'title' => "List of fears" ); $rtf->number_pages; $rtf->print($text1); $rtf->close; return 1; }

Surprisingly, the rtf file printed out beautifully on windows, albeit without prolog, numbering, and with default margins. This will suffice for me to read it to someone else, so it is good enough for now. RTF Cookbook on CPAN is one of the better resources out there. What puzzles me specifically is how to brook the chasm between the method calls of RTF::Writer and the mark-up language itself. To blurt it out:

Q1) Where do I put the backslash sequences to create a right margin of 4000 twips?

Thanks for your comments and attention to detail.

Replies are listed 'Best First'.
Re^3: combining lists, formatting and printing on windows
by Aldebaran (Curate) on Apr 20, 2015 at 06:00 UTC

    Where do I put the backslash sequences to create a right margin of 4000 twips?

    I seem to have figured this out by a lot of error and trial:

    sub format_texts { use strict; use 5.010; use RTF::Writer; my ( $rvars, $reftext1 ) = @_; my %vars = %$rvars; my $text1 = $$reftext1; my $rtf = RTF::Writer->new_to_file( $vars{word} ); $rtf->prolog( 'title' => "List of fears", ); $rtf->number_pages; $rtf->paragraph(\'\qc\f0\fs120\b ', "Fears"); $rtf->paragraph(\'\ri3000\li-500\f0\fs30\b0\ql',$text1); $rtf->close;

    This creates a centered, oversized headline and then sets a left indent of negative 500 twips (moving it left a centimeter or so), and a right indent of 3000 twips, which, with the rather large default margins creates the space on the right side of the page that I wanted. Screenshot of output on Tinypic

    I was wrong to expect the title to print out: it's not supposed to. I was also wrong that the page number didn't print out. The reference that got me over the hump on rtf syntax was Sean Burke's summary of rtf syntax . Also informative was MS specification of rtf on sourceforge

    Still puzzled why "Fear of" doesn't get inserted with this substitution:

    for (@fears) { s/\s+$/ /; $_ = lc($_); s/^(\d+\. )(.) /$1 Fear of $2/; }

      There is a space after the (.)> in s/^(\d+\. )(.)_/ (where I put the underscore).

      As for the right place for the margin settings, I would have supposed it should go into the prolog, but my experiments seem to indicate this particular setting is stored outside of the RTF file (perhaps in a stylesheet) (at least by WordPad) Aargh! reading the docs is better than experimenting (sometimes). A simple $rtf->print( \'\margl567\margr567' ); after the Prolog sets the left and right margin to 1cm.