У меня есть следующий скрипт для создания pdf-файла из jpg. Это должно быть легко изменить, чтобы создать PDF-файл из pngs и tif. Ну, на самом деле это не так. Сценарий выглядит следующим образом:Perl: сделайте pdf не только из jpg
#!/usr/bin/perl
use PDF::API2;
use strict;
use warnings;
# assume all just one directory path
my $folder = join(' ', @ARGV);
# deal with dos paths
$folder =~ s|\\|/|g;
$folder =~ s|/$||;
my $pdf_file = $folder . '.pdf';
die "Not a folder!\n" unless -d $folder;
die "There's already a pdf of that name!\n" if -f $pdf_file;
my $pdf = PDF::API2->new;
#indepedently works OK - JPG
foreach my $file (glob "$folder/*.jpg") {
my $jpg = $file;
my $image = $pdf->image_jpeg($jpg);
my $page = $pdf->page();
$page->mediabox(0,0,$image->width, $image->height);
$page->trimbox(0,0,$image->width, $image->height);
my $gfx = $page->gfx;
$gfx->image($image, 0, 0);
}
$pdf->saveas($pdf_file);
indepedently works OK - PNG
foreach my $file (glob "$folder/*.png") {
my $png = $file;
my $image = $pdf->image_png($png);
my $page = $pdf->page();
$page->mediabox(0,0,$image->width, $image->height);
$page->trimbox(0,0,$image->width, $image->height);
my $gfx = $page->gfx;
$gfx->image($image, 0, 0);
}
$pdf->saveas($pdf_file);
#indepedently works OK - TIF
foreach my $file (glob "$folder/*.tif") {
my $tif = $file;
my $image = $pdf->image_tiff($tif);
my $page = $pdf->page();
$page->mediabox(0,0,$image->width, $image->height);
$page->trimbox(0,0,$image->width, $image->height);
my $gfx = $page->gfx;
$gfx->image($image, 0, 0);
}
$pdf->saveas($pdf_file);
Когда я комментирую часть JPG, он работает для PNG, когда я комментирую JPG и PNG часть, она работает для TIFs. Однако он не работает для всех расширений: JPG, PNG и TIF.
Нет, проблема в том, что регулярное выражение на предыдущей строке не имеет ограничителя закрытия. –
Кроме того, файлы JPEG обычно не заканчиваются на '.jepg', но это одна из вещей, которые вы разрешаете. И вы закрываете каталог после каждого цикла, но вы все еще пытаетесь его прочитать. Кроме того, отсутствующие замыкающие скобки и, вероятно, другие синтаксические ошибки, которые я не поймал. Если весь код выполняет почти то же самое, это хороший кандидат для подпрограммы. –
Еще одна вещь (возможно): 'close' закрывает дескриптор файла, а не дескриптор каталога. Вы хотите «закрыть». –