hotkitty wrote:
> On May 7, 8:40 am, [EMAIL PROTECTED] (Rob Dixon) wrote:
>> hotkitty wrote:
>>> 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

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


Reply via email to