Perl:不仅从jpg生成pdf
我有以下脚本从jpgs生成pdf。修改它以从PNG和tifs创建pdf应该很容易。事实并非如此。脚本如下:Perl:不仅从jpg生成pdf,perl,pdf,Perl,Pdf,我有以下脚本从jpgs生成pdf。修改它以从PNG和tifs创建pdf应该很容易。事实并非如此。脚本如下: #!/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 $
#!/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。您的错误告诉您问题出在哪里: (可能是从第40行开始的失控多行“”字符串) 应该是
next unless $file =~ /\.tif$/;
当我们在做的时候:
- 添加
使用警告代码>
/opendir
通常使用closedir
会更好。例如:glob
foreach my $file ( glob "$folder/*.jpg" ) { }
- 实际上,您并没有终止第二个循环—您可能需要一个
语句—大概在}
语句之前close
- 您可能需要再次
,因为您需要opendir
,然后尝试closedir
李>readdir
.jepg
结尾,但这是允许的事情之一。并且,在每次循环后关闭目录,但仍在尝试从中读取。另外,缺少右大括号和可能的其他语法错误,我没有发现。如果所有代码都在做几乎完全相同的事情,那么这是一个很好的子程序候选者。还有一件事(可能):close
关闭文件句柄,而不是目录句柄。您需要closedir
。IMOopendir
没有仅对99%的用例使用glob
有用,因为它还扩展了路径。@我向您保证,它没有。这非常有用。我是一名perl新手,因此我将花一些时间重写代码。我明天回来。现在,我可以从tifs生成pdf文件,因此有了改进。我已经使用glob
编写了代码。它只适用于某些文件扩展名:当只存在代码的JPG部分时,它也适用于TIF和PNG代码。我无法使其适用于所有扩展:在第一个循环(jpg)在文件夹中找不到任何jpg后,它会失败。您可以为glob.I google指定多个参数,我可以使用glob“$folder/*。{jpg,png,tif}”,但生成pdf的函数不同于每个fil扩展(my$image=$pdf->image\u jpeg($jpg);对于pdf,my$image=$pdf->image\tiff)($tif);对于tif等,我认为我们进入了一个不同的问题,最好单独提问。
foreach my $file ( glob "$folder/*.jpg" ) {
}