Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
PDF ファイルの Title 取得
- From: Hisashi Hoshino <panda@xxxxxxxxxxxx>
- Date: Sun, 26 Nov 2000 09:44:24 +0900
- X-ml-name: namazu-devel-ja
- X-mail-count: 01105
ほしのです。
以前、namazu-users-jaで話題に挙がっていた
http://www.namazu.org/ml/namazu-users-ja/msg00979.html
Subject: [namazu-users-ja] namazu での PDF 検索について
Message-Id: <200009290248.AA02158@xxxxxxxxxxxxxxxxxxxxxxx>
X-ML-Name: namazu-users-ja
X-Mail-Count: 00980
この話題ですが、以下のようなもので対応してみたのですが、実
現の仕方に問題があるかも知れないので、アドバイスをいただき
たいのです。
手元にMS-Word->PDF変換されたものしか無いため、本当にこの方
法で良いのか解らないのですが・・・。
よろしくお願いします。
--- pdf.pl.org Tue Oct 24 18:04:51 2000
+++ pdf.pl Sun Nov 26 00:54:07 2000
@@ -29,6 +29,7 @@
require 'gfilter.pl';
my $pdfconvpath = undef;
+my $pdfinfopath = undef;
sub mediatype() {
return ('application/pdf');
@@ -36,8 +37,13 @@
sub status() {
$pdfconvpath = util::checkcmd('pdftotext');
- return 'yes' if (defined $pdfconvpath);
- return 'no';
+ if (defined $pdfconvpath) {
+ $pdfinfopath = util::checkcmd('pdfinfo');
+ return 'yes' if (defined $pdfinfopath);
+ return 'no';
+ } else {
+ return 'no';
+ }
}
sub recursive() {
@@ -61,15 +67,25 @@
= @_;
my $cfile = defined $orig_cfile ? $$orig_cfile : '';
+ my $info = '';
+
my $tmpfile = util::tmpnam('NMZ.pdf');
my $tmpfile2 = util::tmpnam('NMZ.pdf2');
+ my $tmpfile3 = util::tmpnam('NMZ.pdf3');
my $fh = util::efopen("> $tmpfile");
print $fh $$cont;
undef $fh;
+ system("$pdfinfopath $tmpfile > $tmpfile3");
+ $fh = util::efopen("< $tmpfile3");
+ $info = util::readfile($fh);
+ undef $fh;
+ unlink $tmpfile3;
+
if (util::islang("ja")) {
util::vprint("Processing pdf file ... (using '$pdfconvpath' in Japanese mode)\n");
+ codeconv::toeuc(\$info);
system("$pdfconvpath -q -eucjp $tmpfile $tmpfile2");
} else {
util::vprint("Processing pdf file ... (using '$pdfconvpath')\n");
@@ -87,11 +103,46 @@
gfilter::line_adjust_filter($cont);
gfilter::line_adjust_filter($weighted_str);
gfilter::white_space_adjust_filter($cont);
- $fields->{'title'} = gfilter::filename_to_title($cfile, $weighted_str)
- unless $fields->{'title'};
+ get_title($info, $fields, $cfile, $weighted_str);
+ get_author($info, $fields);
gfilter::show_filter_debug_info($cont, $weighted_str,
$fields, $headings);
return undef;
+}
+
+sub get_title ($$$$) {
+
+ my ($info, $fields, $cfile, $weighted_str) = @_;
+
+ my (@item) = split(/\n/,$info);
+
+ foreach (@item) {
+ if ($_ =~ /^Title:\s+(.*)/) {
+ if ($1 !~ /^$/) {
+ $fields->{'title'} = $1;
+ } else {
+ $fields->{'title'} = gfilter::filename_to_title($cfile, $weighted_str)
+ unless $fields->{'title'};
+ }
+ }
+ }
+
+}
+
+sub get_author ($$) {
+
+ my ($info, $fields) = @_;
+
+ my (@item) = split(/\n/,$info);
+
+ foreach (@item) {
+ if ($_ =~ /^Author:\s+(.*)/) {
+ if ($1 !~ /^$/) {
+ $fields->{'author'} = $1;
+ }
+ }
+ }
+
}
1;
------
Hisashi Hoshino
mailto:panda@xxxxxxxxxxxx