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