Ниже приведен минимальный код, необходимый для создания одного файла PDF с использованием модуля Perl PDF :: API2. Первый PDF создается отлично. В начале попытки создать второй PDF, процесс терпит неудачу на втором экземпляре линии:Как создать несколько PDF-файлов с использованием PDF API2?
$page = $pdf->page(0);
с ошибкой, Can't call method "new_obj" on an undefined value at C:/Perl64/site/lib/PDF/API2/Basic/PDF/Pages.pm line 92.
Почему? Что еще более важно, какие изменения я должен сделать, чтобы создать второй pdf-файл?
#!/usr/bin/perl
use strict;
use warnings;
use PDF::API2;
my $pdf1 = 'hello_world.pdf';
my $pdf2 = 'hi_mom.pdf';
my $text1 = "Hello World";
my $text2 = "Hi Mom";
my $pdf = PDF::API2->new(); #dynamic pdf file name
my $font = $pdf->corefont('Times-Roman', -encoding => 'latin1');
my $page = $pdf->page(0);
$page->mediabox(612.0, 792.0); #8.5" x 11.0" in PostScript points
my $msg_text = $page->text;
$msg_text->transform(-translate =>[72, 144]); #x,y position in points
$msg_text->fillcolor('black');
$msg_text->font($font, 100);
$msg_text->text($text1);
$pdf->saveas($pdf1);
print "Make 2nd pdf.\n";
$page = $pdf->page(0); #FAILS!
{..}
$msg_text->text($text2);
$pdf->saveas($pdf2);
print "2nd pdf created\n";
$pdf->end();
1;
Спасибо. Естественно, я проведу процедуру моего кода. Второй вызов 'PDF :: API2-> new()' не решает проблему. Ошибка изменяется на «Невозможно вызвать метод« val »по неопределенному значению в C: /Perl64/site/lib/PDF/API2/Resource.pm строке 69.'. Во всяком случае, создание нового экземпляра класса PDF не требуется для создания новой страницы (или я надеюсь). (Обычно я был бы ответом, который даже не работает. Но я ценю помощь и, кроме того, возможно, что я делаю что-то неправильно в применении вашего решения? Знаете ли вы, что это работает? Если нет, я предлагаю удалить его.) – Karl
Я предполагаю, что вызов 'saveas()' завершает внутренний объект и делает его непригодным для дальнейшего использования. В документации это не так, но, возможно, это просто упущение. –
Отлично, спасибо @RobEarl. Я думаю, возможно, @Slaven Rezic прав, что после возвращения 'saveas()' объект уничтожается, хотя, если это так, я удивлен, что ошибка указывает на неопределенный вызов метода. PDF :: API2 замечательный, но неплохо использовать немного больше документации, IMO. (Возможно, я прочитаю источник и опубликую здесь мои выводы.) – Karl