Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
PDF ファイルをページごとに分割
- From: OKANO Osamu <osamu2001@xxxxxxxxxxxx>
- Date: Sun, 09 Sep 2001 17:47:15 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 01951
岡埜です
自分が必要になったのでpdfsplit.plを実装しました。
必要なオプションは--pdf-splitと-Uです
登録される文書情報がほとんど空っぽです。
当然pdftotextも使えなければいけません。
htmlsplitと同じで直接フィルタを使用しない実装に
なってしまいました。
拡張子がpdfなのに実際はPDFじゃないファイルのことについては
まったく考えていません。(注意!)
文書のページ数が1ページ多くなりますが検索結果には影響は
ないと思います。
基本的なやり方はhtmlsplitそのままで修正点も
(htmlsplitの実装がわかっていれば)わかりやすいと思います。
conf.pl:
$HTML_SUFFIX = "html?|[ps]html|html\\.[a-z]{2}";
$PDF_SUFFIX = "pdf|PDF";
mknmz:
sub postload_modules () {
require "htmlsplit.pl" || die "unable to require \"htmlsplit.pl\"\n";
require "pdfsplit.pl" || die "unable to require \"pdfsplit.pl\"\n";
}
muda($conf::ON_MEMORY_MAX,
省略
$var::Opt{'noencodeurl'}, $conf::HTML_SUFFIX,$conf::PDF_SUFFIX,
省略
);
var.pl:97
$Opt{'htmlsplit'} = 0;
$Opt{'pdfsplit'} = 0;
pdfsplit.pl(htmlsplit.plの修正)
package pdfsplit;
require "util.pl";
use strict;
sub split ($$){
my ($fname, $base) = @_;
my $mtime = (stat($fname))[9];
my %info = (
'title' => "",
'author' => "",
'anchored' => "",
'name' => "",
'base' => $base,
'names' => [],
);
my $id = 0;
my $pdfconvpath = util::checkcmd('pdftotext');
my $tmpfile2 = util::tmpnam('NMZ.pdf2');
system("$pdfconvpath -q $fname $tmpfile2");
unless (-e $tmpfile2){
unlink $tmpfile2;
return 'Unable to convert pdf file (maybe copying protection)';
}
my $fh = util::efopen($tmpfile2);
my $cont = join '', <$fh>;
my @list = split(/\f/,$cont);
for(@list){
write_partial_file($_, $id + 1, $id, $mtime, \%info);
$id++
}
return @{$info{'names'}};
}
sub write_partial_file($$$$$$) {
my ($cont, $name, $id, $mtime, $info_ref) = @_;
$name =~ s/^([\"\'])(.*)\1$/$2/; # Remove quotation marks.
my $base = $info_ref->{'base'};
my $fname = util::tmpnam("$base.$id");
my $fh = util::efopen(">$fname");
print $fh $cont;
push @{$info_ref->{'names'}}, $name;
$info_ref->{'name'} = $name;
close($fh);
utime($mtime, $mtime, $fname);
return "";
}
1;
以上