2011-02-14 54 views
2

我一直在使用PDF :: API2进行修补,并且我面临一个问题,很好地创建一个PDF文件并向其中添加文本。但是,如果要写入的文本流向多个页面,则脚本不会打印到下一页。我曾试图寻找答案,但无济于事。我希望每一页都有正好50行的文字。我的脚本如下。它只在第一页打印,创建其他页面但不打印到它们中。任何人只要有一个解决方案无法使用PDF :: API2打印多个页面

!/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

的问题是,你正在新的一页,但瞬间忘记新的变量:

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

所有my变量,你就结束括号消失。只要删除my,您将修改顶层范围的变量。

编辑:您也可能想要重置$line变量时,创建新的页面。

+2

没错。键入我的答案,但你击败了我:)。这里使用的$ page,$ fnt和$ txt与脚本中使用的$ page,$ fnt和$ txt不一样。这些只存在于if循环中。 – Baramin 2011-02-14 12:22:43

0

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

0

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