Namazu-devel-ja(旧)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Office系フィルタで wvSummary を利用してみては? (Re: macbinary.pl)
寺西です。
Tadamasa Teranishi wrote:
>
> この用途にはうまく使えませんでしたが、Summary が入っている場合は
> wvSummary 等を使い、title, author, keywords を取り出して、情報を
> 利用するように Office 系のフィルタを修正することは可能かもしれません。
> (Win32 系の OLEフィルタでは、現状でも Summary の情報を利用して
> います。)
ということで、wvSummary を使って title, author, keywords を
取り出すプログラムを書いてみました。
HEAD 用です。(msword.pl 用ですが、excel.pl, powerpoint.pl も
同等の修正で対応可能です。)
これで、filter/win32/olemsword.pl と同じように著者の情報が利用
できます。
ところで taro7_10.pl を見ていると OLE/Storage_Lite.pm を
使って同等の処理をしていることに気づきました。
> wvSummary は libole2 の test-ole の簡易版のようなものですから、
> Word 以外でも使えます。
> # libole2 の Perl モジュールってないのかな。
そのものではありませんが、OLE/Storage_Lite.pm が、これ相当と
して使えるのかな。(Perl モジュールでできるなら、そちらの方が
いいですね。)
$ cvs diff msword.pl
Index: msword.pl
===================================================================
RCS file: /storage/cvsroot/namazu/filter/msword.pl,v
retrieving revision 1.37
diff -r1.37 msword.pl
36a37
> my $wvsummarypath = undef;
42a44,45
> $wvsummarypath = util::checkcmd('wvSummary');
>
105a109,111
> # get summary info in all OLE documents.
> getSummaryInfo($tmpfile, $cont, $weighted_str, $headings, $fields);
>
176a183,243
> return undef;
> }
>
> sub getSummaryInfo ($$$) {
> my ($cfile, $cont, $weighted_str, $headings, $fields)
> = @_;
>
> return undef unless (defined $wvsummarypath);
>
> my @cmd = ($wvsummarypath, $cfile);
> my ($status, $fh_out, $fh_err) = util::systemcmd(@cmd);
> my $summary = util::readfile($fh_out);
>
> my $title = undef;
> my $subject = undef;
> my $author = undef;
> my $keywords = undef;
>
> if ($summary =~ /^The title is (.*)$/m) {
> $title = $1;
>
> # PowerPoint Only
> # undef $title if $title eq # which has no slide title
> # "\xbd\xd7\xb2\xc4\xde\x20\xc0\xb2\xc4\xd9\x82\xc8\x82\xb5";
> }
> if ($summary =~ /^The subject is (.*)$/m) {
> $subject = $1;
> }
> if ($summary =~ /^The author is (.*)$/m) {
> $author = $1;
> }
> if ($summary =~ /^The keywords are (.*)$/m) {
> $keywords = $1;
> }
>
> my $weight = $conf::Weight{'html'}->{'title'};
> if (defined $title) {
> codeconv::toeuc(\$title);
> $$weighted_str .= "\x7f$weight\x7f$title\x7f/$weight\x7f\n";
> }
>
> if (defined $subject) {
> codeconv::toeuc(\$subject);
> $$weighted_str .= "\x7f$weight\x7f$subject\x7f/$weight\x7f\n";
> }
>
> $fields->{'title'} = $title;
> $fields->{'title'} = $subject unless (defined $title);
>
> if (defined $author) {
> codeconv::toeuc(\$author);
> $fields->{'author'} = $author;
> }
>
> if (defined $keywords) {
> codeconv::toeuc(\$keywords);
>
> $weight = $conf::Weight{'metakey'};
> $$weighted_str .= "\x7f$weight\x7f$keywords\x7f/$weight\x7f\n";
> }
>
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxxxxxxxxxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E