2014-07-04 44 views
2

我有2個.pdf文件。兩者都是1頁。我將它們用作發票的水印。一旦第1頁(第1頁pdf)被填寫,我就想在第1頁後面導入第2頁(第2頁)並寫信給它。顯然,如果頁面1沒有填充,請繼續寫入。這是我寫一個測試代碼:PDF :: API2不能寫入頁面

my $pdf = PDF::API2->new(); 
my $sec_page = PDF::API2->open('./useful_scripts/invoice_page_2.pdf'); 
$pdf = PDF::API2->open('./useful_scripts/invoice.pdf'); 
my $page = $pdf->openpage(1); 

my $text = $page->text(); 
my $font = $pdf->corefont('Helvetica-Bold'); 
$text->fillcolor('black'); 
$text->font($font, 11); 

$text->translate(170, 785); 
$text->text($invoice->ott_invoice_number); 

my ($y, $d, $x) = (718, 15, 57); 

foreach my $line (@{ $invoice->invoice_lines }) { 

    $text->translate($x, $y); 
    my $product = join(': ', @{ $line->{display} }); 
    $text->text($product); 
    $y = $y - 13; 

    if ($line->{options}) { 

     foreach my $option (@{ $line->{options} }) { 
      $text->translate($x + 10, $y); 
      $text->text($option); 
     } 

    } 


} 

$y = 100; #This is for testing purposes         
      #so that I can make sure it is        
      #writing to page 2           

if($y < 150){ 
    $page = $pdf->importpage($sec_page); 
    $page = $pdf->openpage(2); 
    $text = $page->text(); 
    $text->translate(100,200); 
    $text->text('Some test text...'); #This is LINE 59 
} 


#END                 
$pdf->saveas('./test.pdf'); 
say 'Printing done... ;)'; 

然而在第59行(我評論過的第59行),我得到一個錯誤說:

Can't call method "isvirtual" on an undefined value at /usr/local/lib/perl5/site_perl/5.14.2/PDF/API2/Content.pm line 1558. 

我看過類似的問題類似的問題我自己也嘗試過提出的解決方案。但似乎沒有人爲我工作。有任何想法嗎?

回答

3

當您爲第二頁創建$text對象時,需要再次調用$text->font(...)。它不會從第一頁繼續。

添加以下行57和59線之間:

$text->font($font, 11); 
+0

的回答從模塊維護者自己!非常感謝。現在工作正常。 – Hamster

+2

不客氣!爲了幫助未來遇到這個問題的人們(我自己也是這樣),我也發佈了一個版本(2.022),其中包含更多信息錯誤消息。 –

+2

最初爲新文檔設置一些默認參數並將新設置的屬性自動帶到新頁面會是一個好主意嗎?或者超出了這個圖書館的範圍? (由於PDF格式不允許這樣做。) – usr2564301