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.


--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to