Perl:不仅从jpg生成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 $

我有以下脚本从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 $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

不,问题是前一行的正则表达式没有结束分隔符。此外,JPEG文件通常不会以
.jepg
结尾,但这是允许的事情之一。并且,在每次循环后关闭目录,但仍在尝试从中读取。另外,缺少右大括号和可能的其他语法错误,我没有发现。如果所有代码都在做几乎完全相同的事情,那么这是一个很好的子程序候选者。还有一件事(可能):
close
关闭文件句柄,而不是目录句柄。您需要
closedir
。IMO
opendir
没有仅对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" ) {

}