SWFファイルからテキストを抽出するプログラムです。
perlプログラムの標準入力にSWFファイルを入力すると、
標準出力にSWFから抽出されたテキストを出力します。
#!/usr/bin/perl
#
# SWF からテキストを抽出
#
use strict;
no encoding;
use warnings;
use SWF;
use SWF::Parser;
use SWF::Element;
sub header_callback
{
my($self, $signature, $version, $length,
$xmin, $ymin, $xmax, $ymax, $framerate, $framecount) = @_;
}
sub tag_callback_text
{
my($self, $tag_no, $length, $datastream) = @_;
# SWF::Element::Tag生成
my $e;
eval {
$e = SWF::Element::Tag->new(Tag => $tag_no, Length => $length);
$e->unpack($datastream);
};
if ($@) {
STDERR->print($@);
return;
}
# テキストを出力
if (eval { $e->isa('SWF::Element::Tag::DefineEditText') }) {
print($e->InitialText);
}
}
#
# メイン
#
my $parser = SWF::Parser->new('header-callback' => \&header_callback,
'tag-callback' => \&tag_callback_text);
# 読み込み
my $data = '';
while (my $line = <STDIN>) { $data .= $line; }
$parser->parse($data);
perlプログラムの標準入力にSWFファイルを入力すると、
標準出力にSWFから抽出されたテキストを出力します。
#!/usr/bin/perl
#
# SWF からテキストを抽出
#
use strict;
no encoding;
use warnings;
use SWF;
use SWF::Parser;
use SWF::Element;
sub header_callback
{
my($self, $signature, $version, $length,
$xmin, $ymin, $xmax, $ymax, $framerate, $framecount) = @_;
}
sub tag_callback_text
{
my($self, $tag_no, $length, $datastream) = @_;
# SWF::Element::Tag生成
my $e;
eval {
$e = SWF::Element::Tag->new(Tag => $tag_no, Length => $length);
$e->unpack($datastream);
};
if ($@) {
STDERR->print($@);
return;
}
# テキストを出力
if (eval { $e->isa('SWF::Element::Tag::DefineEditText') }) {
print($e->InitialText);
}
}
#
# メイン
#
my $parser = SWF::Parser->new('header-callback' => \&header_callback,
'tag-callback' => \&tag_callback_text);
# 読み込み
my $data = '';
while (my $line = <STDIN>) { $data .= $line; }
$parser->parse($data);