| 1 |
lars |
1 |
<?php
|
|
|
2 |
// $Header: /cvsroot/html2ps/demo/html2ps.php,v 1.10 2007/05/17 13:55:13 Konstantin Exp $
|
|
|
3 |
|
|
|
4 |
error_reporting(E_ALL);
|
|
|
5 |
ini_set("display_errors","1");
|
|
|
6 |
if (ini_get("pcre.backtrack_limit") < 1000000) { ini_set("pcre.backtrack_limit",1000000); };
|
|
|
7 |
@set_time_limit(10000);
|
|
|
8 |
|
|
|
9 |
require_once('generic.param.php');
|
|
|
10 |
require_once('../config.inc.php');
|
|
|
11 |
require_once(HTML2PS_DIR.'pipeline.factory.class.php');
|
|
|
12 |
|
|
|
13 |
ini_set("user_agent", DEFAULT_USER_AGENT);
|
|
|
14 |
|
|
|
15 |
$g_baseurl = trim(get_var('URL', $_REQUEST));
|
|
|
16 |
|
|
|
17 |
if ($g_baseurl === "") {
|
|
|
18 |
die("Please specify URL to process!");
|
|
|
19 |
}
|
|
|
20 |
|
|
|
21 |
// Add HTTP protocol if none specified
|
|
|
22 |
if (!preg_match("/^https?:/",$g_baseurl)) {
|
|
|
23 |
$g_baseurl = 'http://'.$g_baseurl;
|
|
|
24 |
}
|
|
|
25 |
|
|
|
26 |
$g_css_index = 0;
|
|
|
27 |
|
|
|
28 |
// Title of styleshee to use (empty if no preferences are set)
|
|
|
29 |
$g_stylesheet_title = "";
|
|
|
30 |
|
|
|
31 |
$GLOBALS['g_config'] = array(
|
|
|
32 |
'compress' => isset($_REQUEST['compress']),
|
|
|
33 |
'cssmedia' => get_var('cssmedia', $_REQUEST, 255, "screen"),
|
|
|
34 |
'debugbox' => isset($_REQUEST['debugbox']),
|
|
|
35 |
'debugnoclip' => isset($_REQUEST['debugnoclip']),
|
|
|
36 |
'draw_page_border' => isset($_REQUEST['pageborder']),
|
|
|
37 |
'encoding' => get_var('encoding', $_REQUEST, 255, ""),
|
|
|
38 |
'html2xhtml' => !isset($_REQUEST['html2xhtml']),
|
|
|
39 |
'imagequality_workaround' => isset($_REQUEST['imagequality_workaround']),
|
|
|
40 |
'landscape' => isset($_REQUEST['landscape']),
|
|
|
41 |
'margins' => array(
|
|
|
42 |
'left' => (int)get_var('leftmargin', $_REQUEST, 10, 0),
|
|
|
43 |
'right' => (int)get_var('rightmargin', $_REQUEST, 10, 0),
|
|
|
44 |
'top' => (int)get_var('topmargin', $_REQUEST, 10, 0),
|
|
|
45 |
'bottom' => (int)get_var('bottommargin', $_REQUEST, 10, 0),
|
|
|
46 |
),
|
|
|
47 |
'media' => get_var('media', $_REQUEST, 255, "A4"),
|
|
|
48 |
'method' => get_var('method', $_REQUEST, 255, "fpdf"),
|
|
|
49 |
'mode' => 'html',
|
|
|
50 |
'output' => get_var('output', $_REQUEST, 255, ""),
|
|
|
51 |
'pagewidth' => (int)get_var('pixels', $_REQUEST, 10, 800),
|
|
|
52 |
'pdfversion' => get_var('pdfversion', $_REQUEST, 255, "1.2"),
|
|
|
53 |
'ps2pdf' => isset($_REQUEST['ps2pdf']),
|
|
|
54 |
'pslevel' => (int)get_var('pslevel', $_REQUEST, 1, 3),
|
|
|
55 |
'renderfields' => isset($_REQUEST['renderfields']),
|
|
|
56 |
'renderforms' => isset($_REQUEST['renderforms']),
|
|
|
57 |
'renderimages' => isset($_REQUEST['renderimages']),
|
|
|
58 |
'renderlinks' => isset($_REQUEST['renderlinks']),
|
|
|
59 |
'scalepoints' => isset($_REQUEST['scalepoints']),
|
|
|
60 |
'smartpagebreak' => isset($_REQUEST['smartpagebreak']),
|
|
|
61 |
'transparency_workaround' => isset($_REQUEST['transparency_workaround'])
|
|
|
62 |
);
|
|
|
63 |
|
|
|
64 |
$proxy = get_var('proxy', $_REQUEST, 255, '');
|
|
|
65 |
|
|
|
66 |
// ========== Entry point
|
|
|
67 |
parse_config_file('../html2ps.config');
|
|
|
68 |
|
|
|
69 |
// validate input data
|
|
|
70 |
if ($GLOBALS['g_config']['pagewidth'] == 0) {
|
|
|
71 |
die("Please specify non-zero value for the pixel width!");
|
|
|
72 |
};
|
|
|
73 |
|
|
|
74 |
// begin processing
|
|
|
75 |
|
|
|
76 |
$g_media = Media::predefined($GLOBALS['g_config']['media']);
|
|
|
77 |
$g_media->set_landscape($GLOBALS['g_config']['landscape']);
|
|
|
78 |
$g_media->set_margins($GLOBALS['g_config']['margins']);
|
|
|
79 |
$g_media->set_pixels($GLOBALS['g_config']['pagewidth']);
|
|
|
80 |
|
|
|
81 |
// Initialize the coversion pipeline
|
|
|
82 |
$pipeline = new Pipeline();
|
|
|
83 |
$pipeline->configure($GLOBALS['g_config']);
|
|
|
84 |
|
|
|
85 |
// Configure the fetchers
|
|
|
86 |
if (extension_loaded('curl')) {
|
|
|
87 |
require_once(HTML2PS_DIR.'fetcher.url.curl.class.php');
|
|
|
88 |
$pipeline->fetchers = array(new FetcherUrlCurl());
|
|
|
89 |
if ($proxy != '') {
|
|
|
90 |
$pipeline->fetchers[0]->set_proxy($proxy);
|
|
|
91 |
};
|
|
|
92 |
} else {
|
|
|
93 |
require_once(HTML2PS_DIR.'fetcher.url.class.php');
|
|
|
94 |
$pipeline->fetchers[] = new FetcherURL();
|
|
|
95 |
};
|
|
|
96 |
|
|
|
97 |
// Configure the data filters
|
|
|
98 |
$pipeline->data_filters[] = new DataFilterDoctype();
|
|
|
99 |
$pipeline->data_filters[] = new DataFilterUTF8($GLOBALS['g_config']['encoding']);
|
|
|
100 |
if ($GLOBALS['g_config']['html2xhtml']) {
|
|
|
101 |
$pipeline->data_filters[] = new DataFilterHTML2XHTML();
|
|
|
102 |
} else {
|
|
|
103 |
$pipeline->data_filters[] = new DataFilterXHTML2XHTML();
|
|
|
104 |
};
|
|
|
105 |
|
|
|
106 |
$pipeline->parser = new ParserXHTML();
|
|
|
107 |
|
|
|
108 |
// "PRE" tree filters
|
|
|
109 |
|
|
|
110 |
$pipeline->pre_tree_filters = array();
|
|
|
111 |
|
|
|
112 |
$header_html = get_var('headerhtml', $_REQUEST, 65535, "");
|
|
|
113 |
$footer_html = get_var('footerhtml', $_REQUEST, 65535, "");
|
|
|
114 |
$filter = new PreTreeFilterHeaderFooter($header_html, $footer_html);
|
|
|
115 |
$pipeline->pre_tree_filters[] = $filter;
|
|
|
116 |
|
|
|
117 |
if ($GLOBALS['g_config']['renderfields']) {
|
|
|
118 |
$pipeline->pre_tree_filters[] = new PreTreeFilterHTML2PSFields();
|
|
|
119 |
};
|
|
|
120 |
|
|
|
121 |
//
|
|
|
122 |
|
|
|
123 |
if ($GLOBALS['g_config']['method'] === 'ps') {
|
|
|
124 |
$pipeline->layout_engine = new LayoutEnginePS();
|
|
|
125 |
} else {
|
|
|
126 |
$pipeline->layout_engine = new LayoutEngineDefault();
|
|
|
127 |
};
|
|
|
128 |
|
|
|
129 |
$pipeline->post_tree_filters = array();
|
|
|
130 |
|
|
|
131 |
// Configure the output format
|
|
|
132 |
if ($GLOBALS['g_config']['pslevel'] == 3) {
|
|
|
133 |
$image_encoder = new PSL3ImageEncoderStream();
|
|
|
134 |
} else {
|
|
|
135 |
$image_encoder = new PSL2ImageEncoderStream();
|
|
|
136 |
};
|
|
|
137 |
|
|
|
138 |
switch ($GLOBALS['g_config']['method']) {
|
|
|
139 |
case 'fastps':
|
|
|
140 |
if ($GLOBALS['g_config']['pslevel'] == 3) {
|
|
|
141 |
$pipeline->output_driver = new OutputDriverFastPS($image_encoder);
|
|
|
142 |
} else {
|
|
|
143 |
$pipeline->output_driver = new OutputDriverFastPSLevel2($image_encoder);
|
|
|
144 |
};
|
|
|
145 |
break;
|
|
|
146 |
case 'pdflib':
|
|
|
147 |
$pipeline->output_driver = new OutputDriverPDFLIB16($GLOBALS['g_config']['pdfversion']);
|
|
|
148 |
break;
|
|
|
149 |
case 'fpdf':
|
|
|
150 |
$pipeline->output_driver = new OutputDriverFPDF();
|
|
|
151 |
break;
|
|
|
152 |
case 'png':
|
|
|
153 |
$pipeline->output_driver = new OutputDriverPNG();
|
|
|
154 |
break;
|
|
|
155 |
case 'pcl':
|
|
|
156 |
$pipeline->output_driver = new OutputDriverPCL();
|
|
|
157 |
break;
|
|
|
158 |
default:
|
|
|
159 |
die("Unknown output method");
|
|
|
160 |
};
|
|
|
161 |
|
|
|
162 |
// Setup watermark
|
|
|
163 |
$watermark_text = trim(get_var('watermarkhtml', $_REQUEST, 65535, ""));
|
|
|
164 |
if ($watermark_text != '') {
|
|
|
165 |
$pipeline->add_feature('watermark', array('text' => $watermark_text));
|
|
|
166 |
};
|
|
|
167 |
|
|
|
168 |
if ($GLOBALS['g_config']['debugbox']) {
|
|
|
169 |
$pipeline->output_driver->set_debug_boxes(true);
|
|
|
170 |
}
|
|
|
171 |
|
|
|
172 |
if ($GLOBALS['g_config']['draw_page_border']) {
|
|
|
173 |
$pipeline->output_driver->set_show_page_border(true);
|
|
|
174 |
}
|
|
|
175 |
|
|
|
176 |
if ($GLOBALS['g_config']['ps2pdf']) {
|
|
|
177 |
$pipeline->output_filters[] = new OutputFilterPS2PDF($GLOBALS['g_config']['pdfversion']);
|
|
|
178 |
}
|
|
|
179 |
|
|
|
180 |
if ($GLOBALS['g_config']['compress'] && $GLOBALS['g_config']['method'] == 'fastps') {
|
|
|
181 |
$pipeline->output_filters[] = new OutputFilterGZip();
|
|
|
182 |
}
|
|
|
183 |
|
|
|
184 |
if (get_var('process_mode', $_REQUEST) == 'batch') {
|
|
|
185 |
$filename = "batch";
|
|
|
186 |
} else {
|
|
|
187 |
$filename = $g_baseurl;
|
|
|
188 |
};
|
|
|
189 |
|
|
|
190 |
switch ($GLOBALS['g_config']['output']) {
|
|
|
191 |
case 0:
|
|
|
192 |
$pipeline->destination = new DestinationBrowser($filename);
|
|
|
193 |
break;
|
|
|
194 |
case 1:
|
|
|
195 |
$pipeline->destination = new DestinationDownload($filename);
|
|
|
196 |
break;
|
|
|
197 |
case 2:
|
|
|
198 |
$pipeline->destination = new DestinationFile($filename, 'File saved as: <a href="%link%">%name%</a>');
|
|
|
199 |
break;
|
|
|
200 |
};
|
|
|
201 |
|
|
|
202 |
// Add additional requested features
|
|
|
203 |
if (isset($_REQUEST['toc'])) {
|
|
|
204 |
$pipeline->add_feature('toc', array('location' => isset($_REQUEST['toc-location']) ? $_REQUEST['toc-location'] : 'after'));
|
|
|
205 |
};
|
|
|
206 |
|
|
|
207 |
if (isset($_REQUEST['automargins'])) {
|
|
|
208 |
$pipeline->add_feature('automargins', array());
|
|
|
209 |
};
|
|
|
210 |
|
|
|
211 |
// Start the conversion
|
|
|
212 |
|
|
|
213 |
$time = time();
|
|
|
214 |
if (get_var('process_mode', $_REQUEST) == 'batch') {
|
|
|
215 |
$batch = get_var('batch', $_REQUEST);
|
|
|
216 |
|
|
|
217 |
for ($i=0; $i<count($batch); $i++) {
|
|
|
218 |
if (trim($batch[$i]) != "") {
|
|
|
219 |
if (!preg_match("/^https?:/",$batch[$i])) {
|
|
|
220 |
$batch[$i] = "http://".$batch[$i];
|
|
|
221 |
}
|
|
|
222 |
};
|
|
|
223 |
};
|
|
|
224 |
|
|
|
225 |
$status = $pipeline->process_batch($batch, $g_media);
|
|
|
226 |
} else {
|
|
|
227 |
$status = $pipeline->process($g_baseurl, $g_media);
|
|
|
228 |
};
|
|
|
229 |
|
|
|
230 |
error_log(sprintf("Processing of '%s' completed in %u seconds", $g_baseurl, time() - $time));
|
|
|
231 |
|
|
|
232 |
if ($status == null) {
|
|
|
233 |
print($pipeline->error_message());
|
|
|
234 |
error_log("Error in conversion pipeline");
|
|
|
235 |
die();
|
|
|
236 |
}
|
|
|
237 |
|
|
|
238 |
?>
|