http://qs1969.pair.com?node_id=488699

Bentov has asked for the wisdom of the Perl Monks concerning the following question:

Greetings..I've been trying to get back into using perl, which just means I have more and more questions. I have been trying to use the PDF::API to create some pdfs from some text files. I know there are some converters already outthere, but I would like to just do it myself. This is what I have so far. It's not pretty I know....
#!/usr/bin/perl -w use strict; use PDF::API2; my $counter=0; my @line; my $line; my @files; my $files; my $xc=10; my $yc=780; my $pdf = PDF::API2->new(-file => "test.pdf"); my $page = $pdf->page; my $fnt = $pdf->corefont('Arial',-encode => 'latin1'); my $txt = $page->hybrid; $page->mediabox('LETTER'); $txt->textstart; $txt->font($fnt, 10); my $startdir="x:\\omni\\omni\\surgpref\\"; chdir($startdir); @files = <*.eal>; #.eal are just .txt files, I actually many differen +t extensions, that just designate different people. while ($files[$counter] ne "") { print("Encoding $files[$counter] to PDF format\n"); open(INFILE, "$startdir/$files[$counter]"); $line=<INFILE>; while($line ne "") { $txt->translate($xc,$yc); $yc-=10; if($yc==0){ $pdf->page(); $yc=780; } $txt->text($line); $counter++; $line=<INFILE>; } } $txt->textend; $pdf->save; $pdf->end( );
My problem is this(as far as I know the only one I have so far) after I have created a new page, the text just continues to be written on the first page. What am I missing? I have looked at multiple tutorials and have tried to understand the documentation, but I'm still not understanding how to switch to the next page to begin writing to it... Thanks in advance for you assistance. Bentov

Replies are listed 'Best First'.
Re: PDF::API2 is confusing me to death..
by mpeters (Chaplain) on Sep 02, 2005 at 17:24 UTC
    I you want to add a new page, you are correct in using the $pdf->page() method, but you need to tell it what page to create. By default it will just give you the first page (and create it if it doesn't exist). So doing something like this (untested):
    $page_num = 1; while ($files[$counter] ne "") { print("Encoding $files[$counter] to PDF format\n"); open(INFILE, "$startdir/$files[$counter]"); $line=<INFILE>; while($line ne "") { $txt->translate($xc,$yc); $yc-=10; if($yc==0){ $pdf->page($page_count); $txt = $page->hybrid; $txt->textstart; $txt->font($fnt, 10); $page->mediabox('LETTER'); $yc=780; } $txt->text($line); $counter++; $line=<INFILE>; } }
    Is probably more like what you want.

    -- More people are killed every year by pigs than by sharks, which shows you how good we are at evaluating risk. -- Bruce Schneier
      Hmmm, I am able to create multiple pages, but the text just writes over itself on the 1st page. I have some problems with your code,but I see where you are going with it, I'll try to make some mods to my program. I guess though I still have the problem that I don't understand what is supposed to select the second page. I know what creates the additional pages, but what says "hey, write to me now buddy!" Bentov
        I know what creates the additional pages, but what says "hey, write to me now buddy!"
        That's what the openpage() method does. It will return the page object. From that you can add whatever you want to that page. This is how I usually do that:
        my $current_page = $pdf->openpage($page_num); $current_page->gfx->textlabel( 100, # X coord 200, # Y coord $font, $font_size, "Some text to write", ); $current_page->update();

        -- More people are killed every year by pigs than by sharks, which shows you how good we are at evaluating risk. -- Bruce Schneier