Это действительно сбило меня с толку: этот код работает нормально ...
$filename="name_of_file.pdf";
for ($x=0; $x<@pdf; $x++){
$file.=$pdf[$x];
}
$file=~s/\*ref\*/$new_aff/g; # converts a variable within the PDF
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $zip = Archive::Zip->new();
$now=time();
$save_zip=$now.".zip";
my $member = $zip->addString($file,$filename);
$member->desiredCompressionMethod( COMPRESSION_DEFLATED );
$member->desiredCompressionLevel( 9 );
die 'write error' unless $zip->writeToFileNamed($save_zip) == AZ_OK;
open (FILE, "<$save_zip");
flock(FILE,2);
binmode(FILE);
while(<FILE>){
$infile.=$_;
}
flock(FILE,8);
close (FILE);
unlink($save_zip);
$filename=~s/\.pdf/\.zip/;
print "Content-type: application/zip\n";
print "Content-disposition: inline;filename=\"$filename\"\n\n";
print $infile;
Файл читается и хранится в @pdf. Затем он преобразуется в файл, а не в массив. Это тогда добавлено к почтовому индексу и сохранено. Затем снова прочитайте, чтобы распечатать на экране, чтобы открыть диалог сохранения. (Хорошо, так что кодирование немного "ненадежно", но избавляет от необходимости возиться с потоками и т.д., О которых я сейчас не знаю!)
Сейчас я делаю практически то же самое, но вместо одного имени файла я читаю каталог, а затем выполняю вызовы подпрограммы ...
opendir(PDF, "../data/viral/");
@pdfDir=readdir(PDF);
closedir(DIR);
@pdfDir=grep(!/^\./, @pdfDir);
@pdfDir=grep(!/\.txt/, @pdfDir);
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
my $zip = Archive::Zip->new();
$now=time();
$save_zip=$now.".zip";
for ($x=0; $x<@pdfDir; $x++){
&process_all;
}
die 'write error' unless $zip->writeToFileNamed($save_zip) == AZ_OK; # Write file out once loop finished
sub process_all{ # Processs all the PDF's
&open_pdf; # Read in as BINMODE
for ($z=0; $z<@pdf; $z++){
$file.=$pdf[$z];
}
$file=~s/\*ref\*/$new_aff/g; # converts a variable within the PDF
my $member = $zip->addString($file,$pdfDir[$x]);
$member->desiredCompressionMethod( COMPRESSION_DEFLATED );
$member->desiredCompressionLevel( 9 );
$file=""; # Empty the file ready for next PDF
}
Но он жалуется, что «не может вызвать метод" addString "с неопределенным значением». И все же имя файла отображается как правильное, а файл PDF преобразуется в файл, как показано, если я выполняю печать на экране.
Я пробовал $ filename = $ pdf [$ x] в цикле $ x и в подпрограмме. Оба показывают правильное имя файла, но ни один не избегает ошибки.
Это, вероятно, смотрит мне в лицо - но я не вижу этого!