2011-02-14 58 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的一個弱點。沒問題。