############################################################################### # # PDFを作成するアクションハンドラ(フック)プラグイン # ############################################################################### package plugin::pdf::PDFMaker; use strict; use lib '../../'; use lib '../../lib'; use plugin::pdf::PDFParser; use URI::Escape; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # アクションハンドラ(PDFメニュー押下時) #============================================================================== sub do_action { my $self = shift; my $wiki = shift; $self->{dir} = $wiki->config('pdf_dir'); my $cgi = $wiki->get_CGI; my $pagename = $cgi->param("page"); if($pagename eq ""){ $pagename = $wiki->config("frontpage"); } # ページが存在するかチェック unless($wiki->page_exists($pagename)){ return $wiki->error("ページがありません。"); } # 参照権があるかどうかチェック unless($wiki->can_show($pagename)){ return $wiki->error("ページの参照権限がありません。"); } my $filename = $self->{dir}."/".&Util::url_encode($pagename).".pdf"; if(!-e $filename){ $self->make_pdf($pagename,$wiki->get_page($pagename),$wiki); } else { # 更新日付のチェック my $pdftime = (stat($filename))[9]; my $wikitime = $wiki->get_last_modified($pagename); if($pdftime < $wikitime){ $self->make_pdf($pagename,$wiki->get_page($pagename),$wiki); } } $pagename =~ tr|/";|-':|; # 幾つか置換処理をする print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Content-Type: application/pdf\n"; print Util::make_content_disposition("$pagename.pdf", "inline"); open(DATA,$filename) or die $!; binmode(DATA); while(<DATA>){ print $_; } close(DATA); exit(); } #============================================================================== # ページを作成する #============================================================================== sub make_pdf { my $self = shift; my $page = shift; my $source = shift; my $wiki = shift; my $parser = plugin::pdf::PDFParser->new($wiki,$page); $parser->parse($source); $parser->save_file($self->{"dir"}."/".Util::url_encode($page).".pdf"); } 1;