1############################################################################### 2# 3# PDF��������륢�������ϥ�ɥ�ʥեå��˥ץ饰���� 4# 5############################################################################### 6package plugin::pdf::PDFMaker; 7use strict; 8use lib '../../'; 9use lib '../../lib'; 10use plugin::pdf::PDFParser; 11use URI::Escape; 12#============================================================================== 13# ���ȥ饯�� 14#============================================================================== 15sub new { 16 my $class = shift; 17 my $self = {}; 18 return bless $self,$class; 19} 20 21#============================================================================== 22# ���������ϥ�ɥ��PDF��˥塼�������� 23#============================================================================== 24sub do_action { 25 my $self = shift; 26 my $wiki = shift; 27 $self->{dir} = $wiki->config('pdf_dir'); 28 my $cgi = $wiki->get_CGI; 29 30 my $pagename = $cgi->param("page"); 31 if($pagename eq ""){ 32 $pagename = $wiki->config("frontpage"); 33 } 34 35 # �ڡ�����¸�ߤ��뤫�����å� 36 unless($wiki->page_exists($pagename)){ 37 return $wiki->error("�ڡ���������ޤ���"); 38 } 39 # ���ȸ������뤫�ɤ��������å� 40 unless($wiki->can_show($pagename)){ 41 return $wiki->error("�ڡ����λ��ȸ��¤�����ޤ���"); 42 } 43 44 my $filename = $self->{dir}."/".&Util::url_encode($pagename).".pdf"; 45 46 if(!-e $filename){ 47 $self->make_pdf($pagename,$wiki->get_page($pagename),$wiki); 48 } else { 49 # �������դΥ����å� 50 my $pdftime = (stat($filename))[9]; 51 my $wikitime = $wiki->get_last_modified($pagename); 52 if($pdftime < $wikitime){ 53 $self->make_pdf($pagename,$wiki->get_page($pagename),$wiki); 54 } 55 } 56 57 $pagename =~ tr|/";|-':|; # ���Ĥ��ִ������� 58 59 print "Pragma: no-cache\n"; 60 print "Cache-Control: no-cache\n"; 61 print "Content-Type: application/pdf\n"; 62 if ($pagename =~ m![^ -~]!) { 63 # ���ܸ��ޤ�ե�����̾�������� 64 print "Content-Disposition: inline;filename*=iso-2022-jp''". 65 uri_escape(&Jcode::convert("$pagename.pdf",'jis'))."\n\n"; 66 } else { 67 print "Content-Disposition: inline;filename=\"$pagename.pdf\"\n\n"; 68 } 69 open(DATA,$filename) or die $!; 70 binmode(DATA); 71 while(<DATA>){ 72 print $_; 73 } 74 close(DATA); 75 76 exit(); 77} 78 79#============================================================================== 80# �ڡ������������ 81#============================================================================== 82sub make_pdf { 83 my $self = shift; 84 my $page = shift; 85 my $source = shift; 86 my $wiki = shift; 87 my $parser = plugin::pdf::PDFParser->new($wiki,$page); 88 $parser->parse($source); 89 $parser->save_file($self->{"dir"}."/".Util::url_encode($page).".pdf"); 90} 91 921; 93