1 | #
|
---|
2 | # A component of the Realistic Book software
|
---|
3 | # from the New Zealand Digital Library Project at the
|
---|
4 | # University of Waikato, New Zealand.
|
---|
5 | #
|
---|
6 | # Copyright (C) 2007 New Zealand Digital Library Project
|
---|
7 | #
|
---|
8 | # This program is free software; you can redistribute it and/or modify
|
---|
9 | # it under the terms of the GNU General Public License as published by
|
---|
10 | # the Free Software Foundation; either version 2 of the License, or
|
---|
11 | # (at your option) any later version.
|
---|
12 | #
|
---|
13 | # This program is distributed in the hope that it will be useful,
|
---|
14 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
15 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
---|
16 | # GNU General Public License for more details.
|
---|
17 | #
|
---|
18 | # You should have received a copy of the GNU General Public License
|
---|
19 | # along with this program; if not, write to the Free Software
|
---|
20 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
---|
21 | #
|
---|
22 |
|
---|
23 | #*****************************************************************
|
---|
24 | #Realistic Book application
|
---|
25 | # Converting each PDF page into a SWF file. Also produce
|
---|
26 | # the XHTML input file for the Realistic book program
|
---|
27 | #
|
---|
28 | #by Veronica Liesaputra --- 1 August 2007
|
---|
29 | #*****************************************************************/
|
---|
30 | use warnings; use strict;
|
---|
31 |
|
---|
32 | my $err = 0;
|
---|
33 | if ($#ARGV < 0) {
|
---|
34 | $err = 1;
|
---|
35 | }
|
---|
36 |
|
---|
37 | my $newIndex = 0;
|
---|
38 | my $newStructure = 0;
|
---|
39 | my $filename = "";
|
---|
40 | my $j = 0;
|
---|
41 | while (($j <= $#ARGV) && ($err == 0)) {
|
---|
42 | if ($ARGV[$j] =~ m/^\-noindex$/i) {
|
---|
43 | $newIndex = 1;
|
---|
44 | } else {
|
---|
45 | if ($ARGV[$j] =~ m/^\-nostructure$/i) {
|
---|
46 | $newStructure = 1;
|
---|
47 | } else {
|
---|
48 | if ($ARGV[$j] =~ m/^\-swfupdate$/i) {
|
---|
49 | $newIndex = 1;
|
---|
50 | $newStructure = 1;
|
---|
51 | } else {
|
---|
52 | if ($ARGV[$j] =~ m/^\-/) {
|
---|
53 | print STDERR "Unknown option: $ARGV[$j]\n\n";
|
---|
54 | $err = 1;
|
---|
55 | } else {
|
---|
56 | $filename = $ARGV[$j];
|
---|
57 | }
|
---|
58 | }
|
---|
59 | }
|
---|
60 | }
|
---|
61 |
|
---|
62 | $j = $j + 1;
|
---|
63 | }
|
---|
64 |
|
---|
65 | # exit from the application and show the usage message
|
---|
66 | if ($err == 1) {
|
---|
67 | print STDERR "USAGE: perl pdf2image.pl [-options] pdf_filename\n\n";
|
---|
68 | print STDERR "Options:\n";
|
---|
69 | print STDERR "-swfupdate \t Only convert each page of the pdf file.\n";
|
---|
70 | print STDERR " \t Do not generate new index.html and book structure files.\n";
|
---|
71 | print STDERR "-noindex \t Do not generate new index.html file.\n";
|
---|
72 | print STDERR "-nostructure \t Do not generate new book structure file.\n";
|
---|
73 | die("\n");
|
---|
74 | }
|
---|
75 |
|
---|
76 | # check that file exists
|
---|
77 | if (-d $filename) {
|
---|
78 | die("$filename is a directory! Please specify the file extension. \n");
|
---|
79 | }
|
---|
80 | if (-f $filename) {
|
---|
81 | } else {
|
---|
82 | die("Cannot find $filename! \n");
|
---|
83 | }
|
---|
84 |
|
---|
85 | # check that pdf2swf exists
|
---|
86 | my $progname = `pdf2swf --version`;
|
---|
87 | if (defined $progname && $progname =~ m/swftools/i) {
|
---|
88 | } else {
|
---|
89 | die("\nPlease make sure that pdf2swf is located in the same location as this script.\nIf you are in Linux/Macintosh, please install swftools in SWFToolsPackage.\n");
|
---|
90 | }
|
---|
91 |
|
---|
92 | # create folder for swf files
|
---|
93 | my $folder_name = $filename;
|
---|
94 | $folder_name=~ s/.pdf//i;
|
---|
95 | mkdir($folder_name);
|
---|
96 |
|
---|
97 | # convert each page of pdf into swf and get its page size
|
---|
98 | my $width = 0;
|
---|
99 | my $height = 0;
|
---|
100 | my $page_input = "";
|
---|
101 | my @output_lines = split(/\n/,`pdf2swf -I $filename`);# get info of each pages in pdf
|
---|
102 | foreach my $line (@output_lines) {
|
---|
103 | if ($line =~ m/^page=(\d+)\s+width=(\d+\.?\d*)\s+height=(\d+\.?\d*)$/i) {
|
---|
104 | # get the smallest width and height
|
---|
105 | if (($width == 0) || ($2 < $width)) {
|
---|
106 | $width = $2;
|
---|
107 | }
|
---|
108 | if (($height == 0) || ($3 < $height)) {
|
---|
109 | $height = $3;
|
---|
110 | }
|
---|
111 |
|
---|
112 | # convert to swf
|
---|
113 | my $i = $1;
|
---|
114 | my $backFile = "Page_$i.swf";
|
---|
115 | my $frontFile = "$folder_name/";
|
---|
116 | my $output_file = "$frontFile$backFile";
|
---|
117 | my $imgfile = `pdf2swf -p $i -s insertstop -s zoom=100 -s bboxvars $filename -o $output_file`;
|
---|
118 |
|
---|
119 | print STDOUT "creating page $i\n";
|
---|
120 |
|
---|
121 | $page_input = "$page_input<newpage filename=\"Page_$i\" />\n";
|
---|
122 | }
|
---|
123 | }
|
---|
124 |
|
---|
125 | if ($newStructure == 0) {
|
---|
126 | # get page size
|
---|
127 | my $page_size = "x$height";
|
---|
128 | $page_size = "$width$page_size";
|
---|
129 |
|
---|
130 |
|
---|
131 | # create the book structure file
|
---|
132 | my $html_input = "<HTML>\n<title>$folder_name</title>\n<Description>\n";
|
---|
133 | $html_input = "$html_input<!-- Please do not remove Filename and PageFolder metadata -->\n";
|
---|
134 | $html_input = "$html_input<Metadata name=\"Filename\">$folder_name</Metadata>\n";
|
---|
135 | $html_input = "$html_input<Metadata name=\"PageFolder\">$folder_name</Metadata>\n";
|
---|
136 | $html_input = "$html_input<Metadata name=\"StartNumbering\">1</Metadata>\n";
|
---|
137 | $html_input = "$html_input<Metadata name=\"PageSize\">$page_size</Metadata>\n";
|
---|
138 | $html_input = "$html_input</Description>\n";
|
---|
139 | $html_input = "$html_input$page_input";
|
---|
140 | $html_input = "$html_input</HTML>\n";
|
---|
141 |
|
---|
142 | my $html_file = "$folder_name.htm";
|
---|
143 | open (PROD, ">$html_file") || die("Error Writing to File: $html_file $!");
|
---|
144 | print PROD $html_input;
|
---|
145 | close (PROD) || die("Error Closing File: $html_file $!");
|
---|
146 | print STDOUT "creating $html_file\n";
|
---|
147 | }
|
---|
148 |
|
---|
149 | if ($newIndex == 0) {
|
---|
150 | # creating index.html
|
---|
151 | my $index_input = "<html>\n<head>\n";
|
---|
152 | $index_input = "$index_input<title>$folder_name</title>\n";
|
---|
153 | $index_input = "$index_input<script src='RealisticBook.js' language='javascript'></script>\n</head>\n";
|
---|
154 | $index_input = "$index_input<body>\n";
|
---|
155 | $index_input = "$index_input<!-- You have to have this div tag with id = bookdiv in your HTML file!! This is where the program will be embedded -->\n";
|
---|
156 | $index_input = "$index_input<div id='bookdiv'></div>\n";
|
---|
157 | $index_input = "$index_input<script type='text/javascript'>\n";
|
---|
158 | $index_input = "$index_input<!-- \n";
|
---|
159 | $index_input = "$index_input embedBookProgram(new Array('$folder_name.htm'));\n";
|
---|
160 | $index_input = "$index_input// -->\n";
|
---|
161 | $index_input = "$index_input</script>\n";
|
---|
162 | $index_input = "$index_input<noscript>\n";
|
---|
163 | $index_input = "$index_input This content requires JavaScript and Adobe Flash Player.\n";
|
---|
164 | $index_input = "$index_input <a href='http://www.macromedia.com/go/getflash/'>Get Flash</a>\n";
|
---|
165 | $index_input = "$index_input</noscript>\n</body>\n</html>\n";
|
---|
166 |
|
---|
167 | my $index_file = "index.html";
|
---|
168 | open (PROD, ">$index_file") || die("Error Writing to File: $index_file $!");
|
---|
169 | print PROD $index_input;
|
---|
170 | close (PROD) || die("Error Closing File: $index_file $!");
|
---|
171 | print STDOUT "creating $index_file\n";
|
---|
172 | }
|
---|
173 |
|
---|
174 | print STDOUT "Done!\n";
|
---|
175 |
|
---|