Re: Text formatting issues

[email protected] (hotkitty)
Newsgroups perl.beginners
Organization http://groups.google.com
Message-ID <fa039c22-cbfc-4c27-8907-25fe6d41870d@k13g2000hse.googlegroups.com>
On May 9, 11:50 am, [email protected] (Rob Dixon) wrote:
> hotkittywrote:
> > On May 7, 8:40 am, [email protected] (Rob Dixon) wrote:
> >>hotkittywrote:
> >>> First and foremost thanks for all the help I've received on this
> >>> board, especially Gunnar who keeps this place running!
> >>> I've come a long way in my code and am trying to format some text and
> >>> then put it into a nice pdf file. My problem is putting the formatted
> >>> text into the pdf and for it to display correctly. I am just trying to
> >>> justify the text and then set the margins. I can put the text in the
> >>> pdf and it looks like it is trying to justify it but it won't wrap to
> >>> the next line. I've looked at the documentation for both the
> >>> Text::Autoformat and PDF::API2 modules but can't seem to figure it
> >>> out.
> >>> I have 2 questions: 1. What am I doing wrong in that the text will
> >>> appear fine when I "print" it but that it won't appear correctly in
> >>> the pdf file? 2. Also, if the text is more than 1 page, how can I get
> >>> it to automatically create a new page and continue onto the newly
> >>> created page?
> >>> My code:
> >>> #!/usr/bin/perl
> >>> use warnings;
> >>> use LWP::Simple;
> >>> use HTML::TokeParser;
> >>> use PDF::API2;
> >>> use Text::Autoformat;
> >>> # Print out the subtitle
> >>> my $oldtext = "trying to test if this sentence will be formatted the
> >>> correct way when it appears in the pdf file. For some reason I just
> >>> can't seem to get this to work. Well, maybe I can find help to get
> >>> this working. If I could get it to work it would really make my kitty
> >>> purrrr";
> >>> my $newtext = autoformat $oldtext, { left=>8, right=>70, justify =>
> >>> 'full' };
> >>> print $newtext;
> >>> #----create the pdf file----->
> >>> my $file = "This PDF";
> >>> my $pdf = PDF::API2->new( -file => "$file.pdf" );
> >>> my $page = $pdf->page;
> >>> $page->mediabox ('A4');
> >>> $page->bleedbox(25,25,5,10);
> >>> $page->cropbox  (7.5,7.5,97.5,120.5);
> >>> my %font = (
> >>>       Helvetica => {
> >>>            Bold   => $pdf->corefont( 'Helvetica-Bold',    -encoding =>
> >>> 'latin1' ),
> >>>            Roman  => $pdf->corefont( 'Helvetica',         -encoding =>
> >>> 'latin1' ),
> >>>            Italic => $pdf->corefont( 'Helvetica-Oblique', -encoding =>
> >>> 'latin1' ),
> >>>        },
> >>>        Times => {
> >>>            Bold   => $pdf->corefont( 'Times-Bold',   -encoding =>
> >>> 'latin1' ),
> >>>            Roman  => $pdf->corefont( 'Times',        -encoding =>
> >>> 'latin1' ),
> >>>            Italic => $pdf->corefont( 'Times-Italic', -encoding =>
> >>> 'latin1' ),
> >>>        },
> >>>    );
> >>> my $main_text = $page->text;
> >>> $main_text->font( $font{'Times'}{'Roman'}, 2 );
> >>> $main_text->fillcolor('black');
> >>> $main_text->translate( 5, 100 );
> >>> $main_text->text("$newtext");
> >>> $pdf->save;
> >>> $pdf->end();
> >> Unfortunately PDF files aren't the easiest of things to create, but the program
> >> below does what you want and should help you get started. Remember that, unless
> >> you change from the default, all units are 1/72 of an inch; the origin of the
> >> page is at the lower left corner and values for Y increase upwards.
>
> >> There is no point in preformatting the text as newlines are ignored, and the
> >> extra spaces will simply increase the distance between words.
>
> >> This program translates to a point 1in from the left and top edges of an A4 page
> >> and then adds the text as a paragraph in a box 2in high and 1in from the
> >> right-hand edge. Note also that I've set the font point size to 12 (you had 2
> >> before which is nearly invisible) and added 16pt leading (the distance between
> >> the bases of the lines of text).
>
> >> HTH,
>
> >> Rob
>
> >> use strict;
> >> use warnings;
>
> >> use PDF::API2;
>
> >> my $oldtext = "trying to test if this sentence will be formatted the
> >> correct way when it appears in the pdf file. For some reason I just
> >> can't seem to get this to work. Well, maybe I can find help to get
> >> this working. If I could get it to work it would really make my kitty
> >> purrrr";
>
> >> my $file = 'This PDF';
> >> my $pdf = PDF::API2->new( -file => "$file.pdf" );
> >> my $page = $pdf->page;
>
> >> my $times = $pdf->corefont( 'Times', -encoding => 'latin1');
>
> >> my $main_text = $page->text;
>
> >> $main_text->font($times, 12);
> >> $main_text->fillcolor('black');
> >> $main_text->lead(16);
> >> $main_text->translate(72, 700);
> >> $main_text->paragraph($oldtext, 450, 144);
>
> >> $pdf->save;
> >> $pdf->end;- Hide quoted text -
>
> >> - Show quoted text -
>
> > Thank you! Again, you guys are extremely helpful! The code works
> > perfectly.
>
> > I want each PDF file to have 38 lines of text per page. If the text is
> > over 38 lines, then I want to create a new page and put that text in
> > page 2. Again, if page 2 has more than 38 lines of text, then add a
> > 3rd page and so on and so forth until the end of the text that I have.
> > How would I do that in this situation?
>
> First of all I really should have coded
>
>   my $page = $pdf->page;
>   $page->mediabox('A4');
>
> Otherwise your page sizes will be something else - probably 8in x 11in.
>
> You really need to learn PDF to do be able to create PDF documents. Take a look here
>
>  http://www.adobe.com/devnet/pdf/pdf_reference.html
>
> But in the mean time take a look at the call to paragraph
>
>   $main_text->paragraph($oldtext, 450, 144);
>
> which flows the text into a 2in high rectangle. If the text won't all fit then
> the method returns any excess characters, so you could write
>
>   my $over = $main_text->paragraph($oldtext, 450, 36);
>   print $over, "\n";
>
> which puts as much of the text as possible into a half-inch high rectangle and
> print whatever remains to STDOUT. Try it and prove to yourself that it works.
>
> You need to do a lot of arithmetic to format the text as you want. First decide
> on your font size - my 12pt font was a random guess. If you have only 38 lines
> per page you may want something bigger.
>
> Then choose your leading - it's traditional to use about 20% over your font
> size, so for a 12pt font 14pt leading is more appropriate that the 16pt that I
> coded.
>
> Finally, if you want 38 lines per page then the bounding rectangle for your
> paragraph should be 38 x leading.
>
> Above all, remember that what you are doing is hard, and you should experiment a
> lot and look for examples in the Web.
>
> HTH,
>
> Rob- Hide quoted text -
>
> - Show quoted text -

Well, it should be a pretty straightforward thing, right? There has to
be someone, somewhere that has taken text and created a pdf file with
more than 1-page, right? That's all I am looking to do.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.