3
주어진 부모 폴더에서 파일 그룹을 압축하여 * .epub 파일을 생성하는 펄 스크립트를 작성하고 있습니다. 거기에 내가 수동으로 파일을 압축 할 때perl로 * .epub 만들기 Archive :: Zip - epubchecker 오류
Required MTA-INF/container.xml resource is missing
이 (내가 WINXP 머신에있어) :이 과정은 작품을 좋아, 나는 어도비 디지털 에디션에서 EPUB을 열 수,하지만 나는 epubchecker 오류가 문제는 없지만 perl로 만든 파일은 오류를 발생시킵니다.
#-------------------------------------------------------------------------------
# name : createEpub
# purpose : create an epub from a given parent folder
# args : [0] parent folder [1] name of new zip file [2] log object
# example : &createEpub($zipLoc, 'newzip', $log);
# notes : it is assumed that mimetype, meta-inf and oebs are all child folders
# of the given parent folder
# author: : jw 2/4/13
#-------------------------------------------------------------------------------
sub createEpub(){
my ($parentFolder, $zipName, $log) = @_;
my $newZipLoc;
$parentFolder =~ s#\\#/#g;
my $newZip = Archive::Zip->new();
# add mimetype first with no compression
my $mimetype = "$parentFolder/mimetype";
my $mimetypeMember = $newZip->addFile($mimetype, 'mimetype');
$mimetypeMember->desiredCompressionMethod(COMPRESSION_STORED);
## add web-inf
my $metaINF = $parentFolder . '/META-INF';
&addFilesToZip($metaINF, $parentFolder, $newZip, $log);
## add OEBPS
my $oebps = $parentFolder . '/OEBPS';
&addFilesToZip($oebps, $parentFolder, $newZip, $log);
# maybe break this out in its own func...ok for current epub script purposes
$newZipLoc = $1 if $parentFolder =~ m/(.*)\//;
$newZipLoc = $newZipLoc . '/' . $zipName;
if($newZipLoc !~ m/\.zip/){
$newZipLoc = $newZipLoc . '.epub';
}
$log->info("writing new zip file to $newZipLoc");
$newZip->writeToFileNamed($newZipLoc);
## not sure if this is the write thing to do...returning actual file name, not zip extract object
return $newZipLoc;
}
sub addFilesToZip(){
my ($file, $origParent, $zip, $log) = @_;
if(-d $file){
my @children = grep{ $_ !~ m/mimetype/} glob("$file/*") or warn "can't add $file to zip! $!\n";
foreach my $child(@children){
&addFilesToZip($child, $origParent, $zip, $log);
}
} elsif (-f $file){
my $memPath = $file; $memPath =~ s/\Q$origParent\E//;
$log->info("adding member $memPath");
my $newMember = $zip->addFile($file, $memPath);
}
}
내가 윈집의 결과 EPUB 파일을 열
에서, container.xml는 또한 MIME 형식을 압축 처음으로 확인했다, 확실히이 다음은 관련 코드입니다. 다음은 로그에서 발췌 한 것입니다 : 나는 사람들이 자신의 리눅스 쉘 명령에 만들 약간의 변경이 본 것 중 인터넷 검색에서-------------------------------------------------------------------------
creating zip file from recently unzipped files
-------------------------------------------------------------------------
[ok]: adding member /META-INF/container.xml
[ok]: adding member /META-INF/stylesheet.css.kindle
[ok]: adding member /META-INF/toc.ncx.kindle
[ok]: adding member /OEBPS/content.opf
[ok]: adding member /OEBPS/coverpage.html
은,하지만 난 :: 우편을 보관하거나 승리 관련된 아무것도 표시되지 않았다.
덕분에, 당신은 절대 경로로 zip 파일의 항목을 만드는 것 같습니다 로깅에서 BP
감사합니다! -bp – badperson