OSDN Git Service

05d2184cad9c73cc633fde8d685a483b38bd233a
[fswiki/fswiki.git] / plugin / pdf / PDFMaker.pm
1 ###############################################################################
2 #
3 # PDF¤òºîÀ®¤¹¤ë¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¡Ê¥Õ¥Ã¥¯¡Ë¥×¥é¥°¥¤¥ó
4 #
5 ###############################################################################
6 package plugin::pdf::PDFMaker;
7 use strict;
8 use lib '../../';
9 use lib '../../lib';
10 use plugin::pdf::PDFParser;
11 use URI::Escape;
12 #==============================================================================
13 # ¥³¥ó¥¹¥È¥é¥¯¥¿
14 #==============================================================================
15 sub new {
16         my $class = shift;
17         my $self = {};
18         return bless $self,$class;
19 }
20
21 #==============================================================================
22 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¡ÊPDF¥á¥Ë¥å¡¼²¡²¼»þ¡Ë
23 #==============================================================================
24 sub 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         print Util::make_content_disposition("$pagename.pdf", "inline");
63         open(DATA,$filename) or die $!;
64         binmode(DATA);
65         while(<DATA>){
66                 print $_;
67         }
68         close(DATA);
69         
70         exit();
71 }
72
73 #==============================================================================
74 # ¥Ú¡¼¥¸¤òºîÀ®¤¹¤ë
75 #==============================================================================
76 sub make_pdf {
77         my $self   = shift;
78         my $page   = shift;
79         my $source = shift;
80         my $wiki   = shift;
81         my $parser = plugin::pdf::PDFParser->new($wiki,$page);
82         $parser->parse($source);
83         $parser->save_file($self->{"dir"}."/".Util::url_encode($page).".pdf");
84 }
85
86 1;