无法使用PDF :: API2在多个页面上打印

时间:2011-02-14 12:03:22

标签: perl pdf-generation

我一直在修补PDF :: API2,我遇到了问题,很好地创建了一个pdf文件并在其中添加了文本。但是,如果要写入的文本流向多个页面,则脚本不会打印到下一页。我已经尝试过研究这个答案,但无济于事。我希望每个页面都有50行文本。我的脚本如下。它仅在第一页上打印,创建其他页面但不打印到其中。任何有解决方案的人

!/usr/bin/perl

use PDF::API2;
use POSIX qw(setsid strftime);
my $filename = scalar(strftime('%F', localtime));

my $pdf  = PDF::API2->new(-file => "$filename.pdf");
$pdf->mediabox(595,842);
my $page = $pdf->page;
my $fnt = $pdf->corefont('Arial',-encoding => 'latin1');
my $txt = $page->text;
$txt->textstart;
$txt->font($fnt, 20);
$txt->translate(100,800);
$txt->text("Lines for $filename");

my $i=0;
my $line = 780;
while($i<310)
{
    if(($i%50) == 0)
    {
        my $page = $pdf->page;
        my $fnt = $pdf->corefont('Arial',-encoding => 'latin1');
        my $txt = $page->text;
    }
    $txt->font($fnt, 10);
    $txt->translate(100,$line);
    $txt->text("$i This is the first line");
    $line=$line-15;
    $i++;
}
$txt->textend;
$pdf->save;
$pdf->end( );

3 个答案:

答案 0 :(得分:3)

问题在于您正在创建新页面,但是立即忘记了新变量:

if(($i%50) == 0)
{
    my $page = $pdf->page;
    my $fnt = $pdf->corefont('Arial',-encoding => 'latin1');
    my $txt = $page->text;
}

您所做的所有my变量在结束括号时消失。只需删除my,您就可以修改顶级范围内的变量。

修改:您可能还希望在制作新网页时重置$line变量。

答案 1 :(得分:0)

字体$ fnt不需要更改,因为它取决于PDF,$ pdf,而不是页面,$ page。

答案 2 :(得分:0)

尽管我喜欢Perl,但我学到了足够多的Python来使用ReportLabs库生成PDF。创建PDF是Perl v.Python的弱点之一。