PluginProbe
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin / 1.7.6
PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin v1.7.6
trunk 1.5 1.6 1.7 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 All 71 releases
pdf-print / mpdf / classes / form.php

form.php in PDF & Print by BestWebSoft – WordPress Posts and Pages PDF Generator Plugin 1.7.6, at mpdf/classes/form.php

1,498 lines 64.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class form {
4
5 var $mpdf = null;
6
7 var $forms;
8 var $formn;
9
10 //Active Forms
11 var $formSubmitNoValueFields;
12 var $formExportType;
13 var $formSelectDefaultOption;
14 var $formUseZapD;
15 /* Form Styles */
16 var $form_border_color;
17 var $form_background_color;
18 var $form_border_width;
19 var $form_border_style;
20 var $form_button_border_color;
21 var $form_button_background_color;
22 var $form_button_border_width;
23 var $form_button_border_style;
24 var $form_radio_color;
25 var $form_radio_background_color;
26
27 var $form_element_spacing;
28
29 // Active forms
30 var $formMethod;
31 var $formAction;
32 var $form_fonts;
33 var $form_radio_groups;
34 var $form_checkboxes;
35 var $pdf_acro_array;
36
37 var $pdf_array_co;
38 var $array_form_button_js;
39 var $array_form_choice_js;
40 var $array_form_text_js;
41
42 /* Button Text */
43 var $form_button_text;
44 var $form_button_text_over;
45 var $form_button_text_click;
46 var $form_button_icon;
47
48
49 // FORMS
50 var $textarea_lineheight;
51
52 function form(&$mpdf) {
53 $this->mpdf = $mpdf;
54
55 // ACTIVE FORMS
56 $this->formExportType = 'xfdf'; // 'xfdf' or 'html'
57 $this->formSubmitNoValueFields = true; // Whether to include blank fields when submitting data
58 $this->formSelectDefaultOption = true; // for Select drop down box; if no option is explicitly maked as selected,
59 // this determines whether to select 1st option (as per browser)
60 // - affects whether "required" attribute is relevant
61 $this->formUseZapD = true; // Determine whether to use ZapfDingbat icons for radio/checkboxes
62
63 // FORM STYLES
64 // These can alternatively use a 4 number string to represent CMYK colours
65 $this->form_border_color = '0.6 0.6 0.72'; // RGB
66 $this->form_background_color = '0.975 0.975 0.975'; // RGB
67 $this->form_border_width = '1'; // 0 doesn't seem to work as it should
68 $this->form_border_style = 'S'; // B - Bevelled; D - Double
69 $this->form_button_border_color = '0.2 0.2 0.55';
70 $this->form_button_background_color = '0.941 0.941 0.941';
71 $this->form_button_border_width = '1';
72 $this->form_button_border_style = 'S';
73 $this->form_radio_color = '0.0 0.0 0.4'; // radio and checkbox
74 $this->form_radio_background_color = '0.9 0.9 0.9';
75
76 // FORMS
77 $this->textarea_lineheight = 1.25;
78
79 // FORM ELEMENT SPACING
80 $this->form_element_spacing['select']['outer']['h'] = 0.5; // Horizontal spacing around SELECT
81 $this->form_element_spacing['select']['outer']['v'] = 0.5; // Vertical spacing around SELECT
82 $this->form_element_spacing['select']['inner']['h'] = 0.7; // Horizontal padding around SELECT
83 $this->form_element_spacing['select']['inner']['v'] = 0.7; // Vertical padding around SELECT
84 $this->form_element_spacing['input']['outer']['h'] = 0.5;
85 $this->form_element_spacing['input']['outer']['v'] = 0.5;
86 $this->form_element_spacing['input']['inner']['h'] = 0.7;
87 $this->form_element_spacing['input']['inner']['v'] = 0.7;
88 $this->form_element_spacing['textarea']['outer']['h'] = 0.5;
89 $this->form_element_spacing['textarea']['outer']['v'] = 0.5;
90 $this->form_element_spacing['textarea']['inner']['h'] = 1;
91 $this->form_element_spacing['textarea']['inner']['v'] = 0.5;
92 $this->form_element_spacing['button']['outer']['h'] = 0.5;
93 $this->form_element_spacing['button']['outer']['v'] = 0.5;
94 $this->form_element_spacing['button']['inner']['h'] = 2;
95 $this->form_element_spacing['button']['inner']['v'] = 1;
96
97 // INITIALISE non-configurable
98 $this->formMethod = 'POST';
99 $this->formAction = '';
100 $this->form_fonts = array();
101 $this->form_radio_groups = array();
102 $this->form_checkboxes = false;
103 $this->forms = array();
104 $this->pdf_array_co = '';
105
106
107 }
108
109
110 function print_ob_text($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir) {
111 // TEXT/PASSWORD INPUT
112 if ($this->mpdf->useActiveForms) {
113 // Flags: 1 - Readonly; 2 - Required; 3 - No export; 13 - textarea; 14 - Password
114 $flags = array();
115 if ($objattr['disabled'] || $objattr['readonly']) { $flags[] = 1; } // readonly
116 if ($objattr['disabled']) { $flags[] = 3; } // no export
117 if ($objattr['disabled']) { $objattr['color'] = array(3,128,128,128); } // gray out disabled
118 if ($objattr['required']) { $flags[] = 2; } // required
119 if (!$objattr['spellcheck']) { $flags[] = 23; } // DoNotSpellCheck
120 if ($objattr['subtype']=='PASSWORD') { $flags[] = 14; }
121 $this->mpdf->SetTColor($objattr['color']);
122 $fieldalign = $rtlalign;
123 if ($objattr['text_align']) { $fieldalign = $objattr['text_align']; }
124 if ($objattr['subtype']=='PASSWORD') { $val = $objattr['value']; }
125 else { $val = $objattr['text']; }
126 // mPDF 5.3.25
127 $js = array();
128 if ($objattr['onCalculate']) { $js[] = array('C', $objattr['onCalculate']); }
129 if ($objattr['onValidate']) { $js[] = array('V', $objattr['onValidate']); }
130 if ($objattr['onFormat']) { $js[] = array('F', $objattr['onFormat']); }
131 if ($objattr['onKeystroke']) { $js[] = array('K', $objattr['onKeystroke']); }
132 $this->SetFormText( $w, $h, $objattr['fieldname'], $val, $val, $objattr['title'], $flags, $fieldalign, false, $objattr['maxlength'], $js, $objattr['background-col'], $objattr['border-col'] );
133 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
134 }
135 else {
136 $w -= $this->form_element_spacing['input']['outer']['h']*2 /$k;
137 $h -= $this->form_element_spacing['input']['outer']['v']*2 /$k;
138 $this->mpdf->x += $this->form_element_spacing['input']['outer']['h'] /$k;
139 $this->mpdf->y += $this->form_element_spacing['input']['outer']['v'] /$k;
140 // Chop texto to max length $w-inner-padding
141 while ($this->mpdf->GetStringWidth($texto) > $w-($this->form_element_spacing['input']['inner']['h']*2)) {
142 $texto = mb_substr($texto,0,mb_strlen($texto,$this->mpdf->mb_enc)-1,$this->mpdf->mb_enc);
143 }
144 $save_linemaxfontsize = $this->mpdf->linemaxfontsize;
145 $this->mpdf->linemaxfontsize = $this->mpdf->FontSize;
146 $this->mpdf->SetLineWidth(0.2 /$k );
147 $this->mpdf->magic_reverse_dir($texto, false, $blockdir); // *RTL*
148 if (isset($objattr['disabled']) && $objattr['disabled']) {
149 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
150 $this->mpdf->SetTColor($this->mpdf->ConvertColor(127));
151 }
152 else if (isset($objattr['readonly']) && $objattr['readonly']) {
153 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
154 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
155 }
156 else {
157 $this->mpdf->SetFColor($this->mpdf->ConvertColor(250));
158 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
159 }
160 $this->mpdf->Cell($w,$h,$texto,1,0,$rtlalign,1,'',0,$this->form_element_spacing['input']['inner']['h'] /$k ,$this->form_element_spacing['input']['inner']['h'] /$k , 'M');
161 $this->mpdf->SetFColor($this->mpdf->ConvertColor(255));
162 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
163 $this->mpdf->linemaxfontsize = $save_linemaxfontsize;
164 }
165 }
166
167 function print_ob_textarea($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir) {
168 // TEXTAREA
169 if ($this->mpdf->useActiveForms) {
170 // Flags: 1 - Readonly; 2 - Required; 3 - No export; 13 - textarea; 14 - Password
171 $flags = array();
172 $flags = array(13); // textarea
173 if ($objattr['disabled'] || $objattr['readonly']) { $flags[] = 1; } // readonly
174 if ($objattr['disabled']) { $flags[] = 3; } // no export
175 if ($objattr['disabled']) { $objattr['color'] = array(3,128,128,128); } // gray out disabled
176 if ($objattr['required']) { $flags[] = 2; } // required
177 if (!$objattr['spellcheck']) { $flags[] = 23; } // DoNotSpellCheck
178 if ($objattr['donotscroll']) { $flags[] = 24; } // DoNotScroll
179 $this->mpdf->SetTColor($objattr['color']);
180 $fieldalign = $rtlalign;
181 if ($texto == ' ') { $texto = ''; } // mPDF 5.3.24
182 if ($objattr['text_align']) { $fieldalign = $objattr['text_align']; }
183 // mPDF 5.3.25
184 $js = array();
185 if ($objattr['onCalculate']) { $js[] = array('C', $objattr['onCalculate']); }
186 if ($objattr['onValidate']) { $js[] = array('V', $objattr['onValidate']); }
187 if ($objattr['onFormat']) { $js[] = array('F', $objattr['onFormat']); }
188 if ($objattr['onKeystroke']) { $js[] = array('K', $objattr['onKeystroke']); }
189 $this->SetFormText( $w, $h, $objattr['fieldname'], $texto, $texto, $objattr['title'], $flags, $fieldalign , false, -1, $js, $objattr['background-col'], $objattr['border-col'] );
190 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
191 }
192 else {
193 $w -= $this->form_element_spacing['textarea']['outer']['h']*2 /$k ;
194 $h -= $this->form_element_spacing['textarea']['outer']['v']*2 /$k ;
195 $this->mpdf->x += $this->form_element_spacing['textarea']['outer']['h'] /$k ;
196 $this->mpdf->y += $this->form_element_spacing['textarea']['outer']['v'] /$k ;
197 $this->mpdf->SetLineWidth(0.2 /$k );
198 if (isset($objattr['disabled']) && $objattr['disabled']) {
199 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
200 $this->mpdf->SetTColor($this->mpdf->ConvertColor(127));
201 }
202 else if (isset($objattr['readonly']) && $objattr['readonly']) {
203 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
204 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
205 }
206 else {
207 $this->mpdf->SetFColor($this->mpdf->ConvertColor(250));
208 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
209 }
210 $this->mpdf->Rect($this->mpdf->x,$this->mpdf->y,$w,$h,'DF');
211 $w -= $this->form_element_spacing['textarea']['inner']['h']*2 /$k ;
212 $this->mpdf->x += $this->form_element_spacing['textarea']['inner']['h'] /$k ;
213 $this->mpdf->y += $this->form_element_spacing['textarea']['inner']['v'] /$k ;
214 $linesneeded = $this->mpdf->WordWrap($texto,$w);
215 if ($linesneeded > $objattr['rows']) { //Too many words inside textarea
216 $textoaux = explode("\n",$texto);
217 $texto = '';
218 for($i=0;$i<$objattr['rows'];$i++) {
219 if ($i == ($objattr['rows']-1)) $texto .= $textoaux[$i];
220 else $texto .= $textoaux[$i] . "\n";
221 }
222 $texto = mb_substr($texto,0,mb_strlen($texto,$this->mpdf->mb_enc)-4,$this->mpdf->mb_enc) . "...";
223 }
224 if ($texto != '') $this->mpdf->MultiCell($w,$this->mpdf->FontSize*$this->textarea_lineheight,$texto,0,'',0,'',$blockdir,true);
225 $this->mpdf->SetFColor($this->mpdf->ConvertColor(255));
226 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
227 }
228 }
229
230 function print_ob_select($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir) {
231 // SELECT
232 if ($this->mpdf->useActiveForms) {
233 // Flags: 1 - Readonly; 2 - Required; 3 - No export; 19 - edit (only if combo)
234 $flags = array();
235 if ($objattr['disabled']) { $flags[] = 1; } // readonly
236 if ($objattr['disabled']) { $flags[] = 3; } // no export
237 if ($objattr['disabled']) { $objattr['color'] = array(3,128,128,128); } // gray out disabled
238 if ($objattr['required']) { $flags[] = 2; } // required
239 if ($objattr['multiple'] && $objattr['size']>1) { $flags[] = 22; } //flag 22 = multiselect (listbox)
240 if ($objattr['size']<2) {
241 $flags[] = 18; //flag 18 = combobox (else a listbox)
242 if ($objattr['editable']) { $flags[] = 19; } // editable
243 }
244 // only spellcheck if combo and editable
245 if (!$objattr['spellcheck'] || $objattr['size']>1 || !$objattr['editable']) { $flags[] = 23; } // DoNotSpellCheck
246 if ($objattr['subtype']=='PASSWORD') { $flags[] = 14; }
247 if ($objattr['onChange']) { $js = $objattr['onChange']; }
248 else { $js = ''; } // mPDF 5.3.37
249 $data = array('VAL' => array(), 'OPT' => array(), 'SEL' => array(), );
250 for($i=0; $i<count($objattr['items']); $i++) {
251 $item = $objattr['items'][$i];
252 $data['VAL'][] = $item['exportValue'];
253 $data['OPT'][] = $item['content'];
254 if ($item['selected']) { $data['SEL'][] = $i; }
255 }
256 if (count($data['SEL'])==0 && $this->formSelectDefaultOption) {$data['SEL'][] = 0; }
257 $this->mpdf->SetTColor($objattr['color']);
258 $this->SetFormChoice( $w, $h, $objattr['fieldname'], $flags, $data, $rtlalign, $js );
259 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
260 }
261 else {
262 $save_linemaxfontsize = $this->mpdf->linemaxfontsize;
263 $this->mpdf->linemaxfontsize = $this->mpdf->FontSize;
264 $this->mpdf->magic_reverse_dir($texto, false, $blockdir); // *RTL*
265 $this->mpdf->SetLineWidth(0.2 /$k );
266 if (isset($objattr['disabled']) && $objattr['disabled']) {
267 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
268 $this->mpdf->SetTColor($this->mpdf->ConvertColor(127));
269 }
270 else {
271 $this->mpdf->SetFColor($this->mpdf->ConvertColor(250));
272 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
273 }
274 $w -= $this->form_element_spacing['select']['outer']['h']*2 /$k ;
275 $h -= $this->form_element_spacing['select']['outer']['v']*2 /$k ;
276 $this->mpdf->x += $this->form_element_spacing['select']['outer']['h'] /$k ;
277 $this->mpdf->y += $this->form_element_spacing['select']['outer']['v'] /$k ;
278 $this->mpdf->Cell($w-($this->mpdf->FontSize*1.4),$h,$texto,1,0,$rtlalign,1,'',0,$this->form_element_spacing['select']['inner']['h'] /$k,$this->form_element_spacing['select']['inner']['h'] /$k , 'M') ;
279 $this->mpdf->SetFColor($this->mpdf->ConvertColor(190));
280 $save_font = $this->mpdf->FontFamily;
281 $save_currentfont = $this->mpdf->currentfontfamily;
282 if ($this->mpdf->PDFA || $this->mpdf->PDFX) {
283 if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) { $this->mpdf->PDFAXwarnings[] = "Core Adobe font Zapfdingbats cannot be embedded in mPDF - used in Form element: Select - which is required for PDFA1-b or PDFX/1-a. (Different character/font will be substituted.)"; }
284 $this->mpdf->SetFont('sans');
285 if ($this->mpdf->_charDefined($this->mpdf->CurrentFont['cw'], 9660)) { $down = "\xe2\x96\xbc"; }
286 else { $down = '='; }
287 $this->mpdf->Cell(($this->mpdf->FontSize*1.4),$h,$down,1,0,'C',1,'',0,0,0, 'M') ;
288 }
289 else {
290 $this->mpdf->SetFont('czapfdingbats','',0);
291 $this->mpdf->Cell(($this->mpdf->FontSize*1.4),$h,chr(116),1,0,'C',1,'',0,0,0, 'M') ;
292 }
293 $this->mpdf->SetFont($save_font,'',0);
294 $this->mpdf->currentfontfamily = $save_currentfont;
295 $this->mpdf->linemaxfontsize = $save_linemaxfontsize;
296 $this->mpdf->SetFColor($this->mpdf->ConvertColor(255));
297 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
298 }
299 }
300
301 function print_ob_imageinput($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir) {
302 // INPUT/BUTTON as IMAGE
303 if ($this->mpdf->useActiveForms) {
304 // Flags: 1 - Readonly; 3 - No export;
305 $flags = array();
306 if ($objattr['disabled']) { $flags[] = 1; } // readonly
307 if ($objattr['disabled']) { $flags[] = 3; } // no export
308 if ($objattr['onClick']) { $js = $objattr['onClick']; }
309 else { $js = ''; }
310 $this->SetJSButton( $w, $h, $objattr['fieldname'], $objattr['value'], $js, $objattr['ID'], $objattr['title'], $flags, $objattr['Indexed']);
311 }
312 else {
313 $this->mpdf->y = $objattr['INNER-Y'];
314 $this->mpdf->_out( sprintf("q %.3F 0 0 %.3F %.3F %.3F cm /I%d Do Q",$objattr['INNER-WIDTH'] *_MPDFK,$objattr['INNER-HEIGHT'] *_MPDFK,$objattr['INNER-X'] *_MPDFK,($this->mpdf->h-($objattr['INNER-Y'] +$objattr['INNER-HEIGHT'] ))*_MPDFK,$objattr['ID'] ) );
315 if (isset($objattr['BORDER-WIDTH']) && $objattr['BORDER-WIDTH']) { $this->mpdf->PaintImgBorder($objattr,$is_table); }
316 }
317 }
318
319 function print_ob_button($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir) {
320 // BUTTON
321 if ($this->mpdf->useActiveForms) {
322 // Flags: 1 - Readonly; 3 - No export;
323 $flags = array();
324 if ($objattr['disabled']) { $flags[] = 1; } // readonly
325 if ($objattr['disabled']) { $flags[] = 3; } // no export
326 if ($objattr['disabled']) { $objattr['color'] = array(3,128,128,128); }
327 $this->mpdf->SetTColor($objattr['color']);
328 if ($objattr['subtype'] == 'RESET') {
329 $this->SetFormButtonText( $objattr['value'] );
330 $this->SetFormReset( $w, $h, $objattr['fieldname'], $objattr['value'], $objattr['title'], $flags, $objattr['background-col'], $objattr['border-col'], $objattr['noprint'] );
331 }
332 else if ($objattr['subtype'] == 'SUBMIT') {
333 $url = $this->formAction;
334 $type = $this->formExportType;
335 $method = $this->formMethod;
336 $this->SetFormButtonText( $objattr['value'] );
337 $this->SetFormSubmit( $w, $h, $objattr['fieldname'], $objattr['value'], $url, $objattr['title'], $type, $method, $flags, $objattr['background-col'], $objattr['border-col'], $objattr['noprint'] );
338 }
339 else if ($objattr['subtype'] == 'BUTTON') {
340 $this->SetFormButtonText( $objattr['value'] );
341 if ($objattr['onClick']) { $js = $objattr['onClick']; }
342 else { $js = ''; }
343 $this->SetJSButton( $w, $h, $objattr['fieldname'], $objattr['value'], $js, 0, $objattr['title'], $flags, false, $objattr['background-col'], $objattr['border-col'], $objattr['noprint'] );
344 }
345 $this->mpdf->SetTColor($this->mpdf->ConvertColor(0));
346 }
347 else {
348 $this->mpdf->SetLineWidth(0.2 /$k );
349 $this->mpdf->SetFColor($this->mpdf->ConvertColor(190));
350 $w -= $this->form_element_spacing['button']['outer']['h']*2 /$k ;
351 $h -= $this->form_element_spacing['button']['outer']['v']*2 /$k ;
352 $this->mpdf->x += $this->form_element_spacing['button']['outer']['h'] /$k ;
353 $this->mpdf->y += $this->form_element_spacing['button']['outer']['v'] /$k ;
354 $this->mpdf->RoundedRect($this->mpdf->x, $this->mpdf->y, $w, $h, 0.5 /$k , 'DF');
355 $w -= $this->form_element_spacing['button']['inner']['h']*2 /$k ;
356 $h -= $this->form_element_spacing['button']['inner']['v']*2 /$k ;
357 $this->mpdf->x += $this->form_element_spacing['button']['inner']['h'] /$k ;
358 $this->mpdf->y += $this->form_element_spacing['button']['inner']['v'] /$k ;
359 $save_linemaxfontsize = $this->mpdf->linemaxfontsize;
360 $this->mpdf->linemaxfontsize = $this->mpdf->FontSize;
361 $this->mpdf->magic_reverse_dir($texto, false, $blockdir); // *RTL*
362 $this->mpdf->Cell($w,$h,$texto,'',0,'C',0,'',0,0,0, 'M') ;
363 $this->mpdf->SetFColor($this->mpdf->ConvertColor(0));
364 $this->mpdf->linemaxfontsize = $save_linemaxfontsize;
365 }
366 }
367
368 function print_ob_checkbox($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir,$x,$y) {
369 // CHECKBOX
370 if ($this->mpdf->useActiveForms) {
371 // Flags: 1 - Readonly; 2 - Required; 3 - No export;
372 $flags = array();
373 if ($objattr['disabled']) { $flags[] = 1; } // readonly
374 if ($objattr['disabled']) { $flags[] = 3; } // no export
375 $checked = false;
376 if ($objattr['checked']) { $checked = true; }
377 if ($this->formUseZapD) {
378 $save_font = $this->mpdf->FontFamily;
379 $save_currentfont = $this->mpdf->currentfontfamily;
380 $this->mpdf->SetFont('czapfdingbats','',0);
381 }
382 $this->SetCheckBox( $w, $h, $objattr['fieldname'], $objattr['value'], $objattr['title'], $checked, $flags, $objattr['disabled'] );
383 if ($this->formUseZapD) {
384 $this->mpdf->SetFont($save_font,'',0);
385 $this->mpdf->currentfontfamily = $save_currentfont;
386 }
387 }
388 else {
389 $iw = $w * 0.7;
390 $ih = $h * 0.7;
391 $lx = $x + (($w-$iw)/2);
392 $ty = $y + (($h-$ih)/2);
393 $rx = $lx + $iw;
394 $by = $ty + $ih;
395 $this->mpdf->SetLineWidth(0.2 /$k );
396 if (isset($objattr['disabled']) && $objattr['disabled']) {
397 $this->mpdf->SetFColor($this->mpdf->ConvertColor(225));
398 $this->mpdf->SetDColor($this->mpdf->ConvertColor(127));
399 }
400 else {
401 $this->mpdf->SetFColor($this->mpdf->ConvertColor(250));
402 $this->mpdf->SetDColor($this->mpdf->ConvertColor(0));
403 }
404 $this->mpdf->Rect($lx,$ty,$iw,$ih,'DF');
405 if (isset($objattr['checked']) && $objattr['checked']) {
406 //Round join and cap
407 $this->mpdf->SetLineCap(1);
408 $this->mpdf->Line($lx,$ty,$rx,$by);
409 $this->mpdf->Line($lx,$by,$rx,$ty);
410 //Set line cap style back to square
411 $this->mpdf->SetLineCap(2);
412 }
413 $this->mpdf->SetFColor($this->mpdf->ConvertColor(255));
414 $this->mpdf->SetDColor($this->mpdf->ConvertColor(0));
415 }
416 }
417
418 function print_ob_radio($objattr,$w,$h,$texto,$rtlalign,$k,$blockdir,$x,$y) {
419 // RADIO
420 if ($this->mpdf->useActiveForms) {
421 // Flags: 1 - Readonly; 2 - Required; 3 - No export;
422 $flags = array();
423 if ($objattr['disabled']) { $flags[] = 1; } // readonly
424 if ($objattr['disabled']) { $flags[] = 3; } // no export
425 $checked = false;
426 if ($objattr['checked']) { $checked = true; }
427 if ($this->formUseZapD) {
428 $save_font = $this->mpdf->FontFamily;
429 $save_currentfont = $this->mpdf->currentfontfamily;
430 $this->mpdf->SetFont('czapfdingbats','',0);
431 }
432 $this->SetRadio( $w, $h, $objattr['fieldname'], $objattr['value'], $objattr['title'], $checked, $flags, $objattr['disabled'] );
433 if ($this->formUseZapD) {
434 $this->mpdf->SetFont($save_font,'',0);
435 $this->mpdf->currentfontfamily = $save_currentfont;
436 }
437 }
438 else {
439 $this->mpdf->SetLineWidth(0.2 /$k );
440 $radius = $this->mpdf->FontSize *0.35;
441 $cx = $x + ($w/2);
442 $cy = $y + ($h/2);
443 if (isset($objattr['disabled']) && $objattr['disabled']) {
444 $this->mpdf->SetFColor($this->mpdf->ConvertColor(127));
445 $this->mpdf->SetDColor($this->mpdf->ConvertColor(127));
446 }
447 else {
448 $this->mpdf->SetFColor($this->mpdf->ConvertColor(0));
449 $this->mpdf->SetDColor($this->mpdf->ConvertColor(0));
450 }
451 $this->mpdf->Circle($cx,$cy,$radius,'D');
452 if (isset($objattr['checked']) && $objattr['checked']) {
453 $this->mpdf->Circle($cx,$cy,$radius*0.4,'DF');
454 }
455 $this->mpdf->SetFColor($this->mpdf->ConvertColor(255));
456 $this->mpdf->SetDColor($this->mpdf->ConvertColor(0));
457
458 }
459 }
460
461
462 // In _putpages
463 function countPageForms($n, &$totaladdnum) {
464 foreach( $this->forms as $form ) {
465 if ( $form['page'] == $n ) {
466 $totaladdnum++;
467 if ( $form['typ'] == 'Tx' ) {
468 if ( isset($this->array_form_text_js[$form['T']]) ) {
469 if ( isset($this->array_form_text_js[$form['T']]['F']) ) { $totaladdnum++; }
470 if ( isset($this->array_form_text_js[$form['T']]['K']) ) { $totaladdnum++; }
471 if ( isset($this->array_form_text_js[$form['T']]['V']) ) { $totaladdnum++; }
472 if ( isset($this->array_form_text_js[$form['T']]['C']) ) { $totaladdnum++; }
473 }
474 }
475 if ( $form['typ'] == 'Bt' ) {
476 if ( isset($this->array_form_button_js[$form['T']]) ) { $totaladdnum++; }
477 if ( isset($this->form_button_icon[$form['T']]) ) {
478 $totaladdnum++;
479 if ( $this->form_button_icon[$form['T']]['Indexed'] ) { $totaladdnum++; }
480 }
481 if ( $form['subtype'] == 'radio' ) { $totaladdnum+=2; }
482 else if ( $form['subtype'] == 'checkbox' && $this->formUseZapD ) { $totaladdnum++; }
483 else if ( $form['subtype'] == 'checkbox' && !$this->formUseZapD ) { $totaladdnum+=2; }
484 }
485 if ( $form['typ'] == 'Ch' ) {
486 if ( isset($this->array_form_choice_js[$form['T']]) ) { $totaladdnum++; }
487 }
488 }
489 }
490 }
491
492 // In _putpages
493 function addFormIds($n, &$s, &$annotid) {
494 foreach( $this->forms as $form ) {
495 if ( $form['page'] == $n ) {
496 $s .= ($annotid) . ' 0 R ';
497 $annotid++;
498 if ( $form['typ'] == 'Tx' ) {
499 if ( isset($this->array_form_text_js[$form['T']]) ) {
500 if ( isset($this->array_form_text_js[$form['T']]['F']) ) { $annotid++; }
501 if ( isset($this->array_form_text_js[$form['T']]['K']) ) { $annotid++; }
502 if ( isset($this->array_form_text_js[$form['T']]['V']) ) { $annotid++; }
503 if ( isset($this->array_form_text_js[$form['T']]['C']) ) { $annotid++; }
504 }
505 }
506 if ( $form['typ'] == 'Bt' ) {
507 if ( isset($this->array_form_button_js[$form['T']]) ) { $annotid++; }
508 if ( isset($this->form_button_icon[$form['T']]) ) {
509 $annotid++;
510 if ( $this->form_button_icon[$form['T']]['Indexed'] ) { $annotid++; }
511 }
512 if ( $form['subtype'] == 'radio' ) { $annotid+=2; }
513 else if ( $form['subtype'] == 'checkbox' && $this->formUseZapD ) { $annotid++; }
514 else if ( $form['subtype'] == 'checkbox' && !$this->formUseZapD ) { $annotid+=2; }
515 }
516 if ( $form['typ'] == 'Ch' ) {
517 if ( isset($this->array_form_choice_js[$form['T']]) ) { $annotid++; }
518 }
519 }
520 }
521 }
522
523 // In _putannots
524 function _putFormItems($n, $hPt) {
525 foreach( $this->forms as $val) {
526 if ( $val['page'] == $n ) {
527 if ( $val['typ'] == 'Tx' ) $this->_putform_tx( $val, $hPt );
528 if ( $val['typ'] == 'Ch' ) $this->_putform_ch( $val, $hPt );
529 if ( $val['typ'] == 'Bt' ) $this->_putform_bt( $val, $hPt );
530 }
531 }
532 }
533
534 // In _putannots
535 function _putRadioItems($n) {
536 // Output Radio Groups
537 $key = 1;
538 foreach($this->form_radio_groups AS $name=>$frg) {
539 $this->mpdf->_newobj();
540 $this->pdf_acro_array .= $this->mpdf->n.' 0 R ';
541 $this->mpdf->_out('<<');
542 $this->mpdf->_out('/Type /Annot ');
543 $this->mpdf->_out('/Subtype /Widget');
544 $this->mpdf->_out('/NM '.$this->mpdf->_textstring(sprintf('%04u-%04u', $n, (3000 + $key++))));
545 $this->mpdf->_out('/M '.$this->mpdf->_textstring('D:'.date('YmdHis')));
546 $this->mpdf->_out('/Rect [0 0 0 0] ');
547 $this->mpdf->_out('/FT /Btn ');
548 if ($frg['disabled']) { $flags=array(1,3,15,16); } // NoExport and readonly
549 else { $flags=array(15,16); } // Flags for Radiobutton, and NoToggleToOff
550 $this->mpdf->_out('/Ff '.$this->_setflag($flags) );
551 $kstr = '';
552 $optstr = '';
553 foreach($frg['kids'] AS $kid) {
554 $kstr .= $this->forms[$kid['n']]['obj'].' 0 R ';
555 // $optstr .= ' '.$this->mpdf->_textstring($kid['OPT']).' ';
556 }
557 $this->mpdf->_out('/Kids [ '.$kstr.' ] '); // 11 0 R 12 0 R etc.
558 // $this->mpdf->_out('/Opt [ '.$optstr.' ] ');
559
560 //V entry holds index corresponding to the appearance state of
561 //whichever child field is currently in the on state = or Off
562 if (isset($frg['on'])) { $state = $frg['on']; }
563 else { $state = 'Off'; }
564 $this->mpdf->_out('/V /'.$state.' ');
565 $this->mpdf->_out('/DV /'.$state.' ');
566 $this->mpdf->_out('/T '.$this->mpdf->_textstring($name).' ');
567 $this->mpdf->_out('>>');
568 $this->mpdf->_out('endobj');
569 }
570 }
571
572 function _putFormsCatalog() {
573 if (isset($this->pdf_acro_array) ) {
574 $this->mpdf->_out('/AcroForm << /DA (/F1 0 Tf 0 g )');
575 $this->mpdf->_out('/Q 0');
576 $this->mpdf->_out('/Fields ['.$this->pdf_acro_array.']');
577 $f = '';
578 foreach($this->form_fonts AS $fn) {
579 if (is_array($this->mpdf->fonts[$fn]['n'])) { $this->mpdf->Error("Cannot use fonts with SMP or SIP characters for interactive Form elements"); }
580 $f .= '/F'.$this->mpdf->fonts[$fn]['i'].' '.$this->mpdf->fonts[$fn]['n'].' 0 R ';
581 }
582 $this->mpdf->_out('/DR << /Font << '.$f.' >> >>');
583 // CO Calculation Order
584 if ( $this->pdf_array_co ) {
585 $this->mpdf->_out('/CO ['.$this->pdf_array_co.']');
586 }
587 $this->mpdf->_out('/NeedAppearances true');
588 $this->mpdf->_out('>>');
589 }
590 }
591
592
593
594 function SetFormButtonJS( $name, $js ) {
595 $js = str_replace("\t",' ', trim($js) );
596 if ( isset($name) && isset($js) ) {
597 $this->array_form_button_js[$this->mpdf->_escape($name)] = array(
598 'js' => $js
599 );
600 }
601 }
602
603 function SetFormChoiceJS( $name, $js ) {
604 $js = str_replace("\t",' ', trim($js) );
605 if ( isset($name) && isset($js) ) {
606 $this->array_form_choice_js[$this->mpdf->_escape($name)] = array(
607 'js' => $js
608 );
609 }
610 }
611
612 function SetFormTextJS( $name, $js) {
613 for ($i=0; $i<count($js); $i++) {
614 $j = str_replace("\t",' ', trim($js[$i][1]) );
615 $format = $js[$i][0];
616 if ($name) {
617 $this->array_form_text_js[$this->mpdf->_escape($name)][$format] = array('js' => $j);
618 }
619 }
620 }
621
622
623 function Win1252ToPDFDocEncoding($txt) {
624 $Win1252ToPDFDocEncoding = array(
625 chr(0200) => chr(0240), chr(0214) => chr(0226), chr(0212) => chr(0227), chr(0237) => chr(0230),
626 chr(0225) => chr(0200), chr(0210) => chr(0032), chr(0206) => chr(0201), chr(0207) => chr(0202),
627 chr(0205) => chr(0203), chr(0227) => chr(0204), chr(0226) => chr(0205), chr(0203) => chr(0206),
628 chr(0213) => chr(0210), chr(0233) => chr(0211), chr(0211) => chr(0213), chr(0204) => chr(0214),
629 chr(0223) => chr(0215), chr(0224) => chr(0216), chr(0221) => chr(0217), chr(0222) => chr(0220),
630 chr(0202) => chr(0221), chr(0232) => chr(0235), chr(0230) => chr(0037), chr(0231) => chr(0222),
631 chr(0216) => chr(0231), chr(0240) => chr(0040)
632 ); // mPDF 5.3.46
633 return strtr($txt, $Win1252ToPDFDocEncoding );
634 }
635
636
637 function SetFormText( $w, $h, $name, $value = '', $default = '', $title = '', $flags = array(), $align='L', $hidden = false, $maxlen=-1, $js='', $background_col=false, $border_col=false ) {
638 // Flags: 1 - Readonly; 2 - Required; 3 - No export; 13 - textarea; 14 - Password
639 $this->formn++;
640 if( $align == 'C' ) { $align = '1'; }
641 else if( $align == 'R' ) { $align = '2'; }
642 else { $align = '0'; }
643 if ($maxlen < 1) { $maxlen = false; }
644 if (!preg_match('/^[a-zA-Z0-9_:\-]+$/', $name)) {
645 $this->mpdf->Error("Field [".$name."] must have a name attribute, which can only contain letters, numbers, colon(:), undersore(_) or hyphen(-)");
646 }
647 if ($this->mpdf->onlyCoreFonts) {
648 $value = $this->Win1252ToPDFDocEncoding($value);
649 $default = $this->Win1252ToPDFDocEncoding($default);
650 $title = $this->Win1252ToPDFDocEncoding($title);
651 }
652 else {
653 if (isset($this->mpdf->CurrentFont['subset'])) {
654 $this->mpdf->UTF8StringToArray($value, true); // Add characters to font subset
655 $this->mpdf->UTF8StringToArray($default, true); // Add characters to font subset
656 $this->mpdf->UTF8StringToArray($title, true); // Add characters to font subset
657 }
658 if ($value) $value = $this->mpdf->UTF8ToUTF16BE($value, true);
659 if ($default ) $default = $this->mpdf->UTF8ToUTF16BE($default, true);
660 $title = $this->mpdf->UTF8ToUTF16BE($title, true);
661 }
662 if ($background_col) { $bg_c = $this->mpdf->SetColor($background_col, 'CodeOnly'); }
663 else { $bg_c = $this->form_background_color; }
664 if ($border_col) { $bc_c = $this->mpdf->SetColor($border_col, 'CodeOnly'); }
665 else { $bc_c = $this->form_border_color; }
666 $f = array( 'n' => $this->formn,
667 'typ' => 'Tx',
668 'page' => $this->mpdf->page,
669 'x' => $this->mpdf->x,
670 'y' => $this->mpdf->y,
671 'w' => $w,
672 'h' => $h,
673 'T' => $name,
674 'FF' => $flags,
675 'V' => $value,
676 'DV' => $default,
677 'TU' => $title,
678 'hidden' => $hidden,
679 'Q' => $align,
680 'maxlen' => $maxlen,
681 'BS_W' => $this->form_border_width,
682 'BS_S' => $this->form_border_style,
683 'BC_C' => $bc_c,
684 'BG_C' => $bg_c,
685 'style' => array(
686 'font' => $this->mpdf->FontFamily,
687 'fontsize' => $this->mpdf->FontSizePt,
688 'fontcolor' => $this->mpdf->TextColor,
689 )
690 );
691 if (is_array($js) && count($js)>0) { $this->SetFormTextJS( $name, $js); } // mPDF 5.3.25
692 if ($this->mpdf->keep_block_together) { $this->mpdf->ktForms[]= $f; }
693 else if ($this->mpdf->writingHTMLheader || $this->mpdf->writingHTMLfooter) { $this->mpdf->HTMLheaderPageForms[]= $f; }
694 else {
695 if ($this->mpdf->ColActive) {
696 $this->mpdf->columnbuffer[] = array('s' => 'ACROFORM', 'col' => $this->mpdf->CurrCol, 'x' => $this->mpdf->x, 'y' => $this->mpdf->y,
697 'h' => $h);
698 $this->mpdf->columnForms[$this->mpdf->CurrCol][INTVAL($this->mpdf->x)][INTVAL($this->mpdf->y)] = $this->formn;
699 }
700 $this->forms[$this->formn] = $f;
701 }
702 if (!in_array($this->mpdf->FontFamily, $this->form_fonts)) {
703 $this->form_fonts[] = $this->mpdf->FontFamily;
704 $this->mpdf->fonts[$this->mpdf->FontFamily]['used'] = true;
705 }
706 if ( !$hidden ) $this->mpdf->x += $w;
707
708 }
709
710
711 function SetFormChoice( $w, $h, $name, $flags, $array, $align='L', $js = '' ) {
712 $this->formn++;
713 if( $this->mpdf->blk[$this->mpdf->blklvl]['direction'] == 'rtl' ) { $align = '2'; }
714 else { $align = '0'; }
715 if (!preg_match('/^[a-zA-Z0-9_:\-]+$/', $name)) {
716 $this->mpdf->Error("Field [".$name."] must have a name attribute, which can only contain letters, numbers, colon(:), undersore(_) or hyphen(-)");
717 }
718 if ($this->mpdf->onlyCoreFonts) {
719 for($i=0;$i<count($array['VAL']);$i++) {
720 $array['VAL'][$i] = $this->Win1252ToPDFDocEncoding($array['VAL'][$i]);
721 $array['OPT'][$i] = $this->Win1252ToPDFDocEncoding($array['OPT'][$i]);
722 }
723 }
724 else {
725 for($i=0;$i<count($array['VAL']);$i++) {
726 if (isset($this->mpdf->CurrentFont['subset'])) {
727 $this->mpdf->UTF8StringToArray($array['VAL'][$i], true); // Add characters to font subset
728 $this->mpdf->UTF8StringToArray($array['OPT'][$i], true); // Add characters to font subset
729 }
730 if ($array['VAL'][$i] ) $array['VAL'][$i] = $this->mpdf->UTF8ToUTF16BE($array['VAL'][$i], true);
731 if ($array['OPT'][$i] ) $array['OPT'][$i] = $this->mpdf->UTF8ToUTF16BE($array['OPT'][$i], true);
732 }
733 }
734 $f = array( 'n' => $this->formn,
735 'typ' => 'Ch',
736 'page' => $this->mpdf->page,
737 'x' => $this->mpdf->x,
738 'y' => $this->mpdf->y,
739 'w' => $w,
740 'h' => $h,
741 'T' => $name,
742 'OPT' => $array,
743 'FF' => $flags,
744 'Q' => $align,
745 'BS_W' => $this->form_border_width,
746 'BS_S' => $this->form_border_style,
747 'BC_C' => $this->form_border_color,
748 'BG_C' => $this->form_background_color,
749 'style' => array(
750 'font' => $this->mpdf->FontFamily,
751 'fontsize' => $this->mpdf->FontSizePt,
752 'fontcolor' => $this->mpdf->TextColor,
753 )
754 );
755 if ($js) { $this->SetFormChoiceJS( $name, $js ); }
756 if ($this->mpdf->keep_block_together) { $this->mpdf->ktForms[]= $f; }
757 else if ($this->mpdf->writingHTMLheader || $this->mpdf->writingHTMLfooter) { $this->mpdf->HTMLheaderPageForms[]= $f; }
758 else {
759 if ($this->mpdf->ColActive) {
760 $this->mpdf->columnbuffer[] = array('s' => 'ACROFORM', 'col' => $this->mpdf->CurrCol, 'x' => $this->mpdf->x, 'y' => $this->mpdf->y,
761 'h' => $h);
762 $this->mpdf->columnForms[$this->mpdf->CurrCol][INTVAL($this->mpdf->x)][INTVAL($this->mpdf->y)] = $this->formn;
763 }
764 $this->forms[$this->formn] = $f;
765 }
766 if (!in_array($this->mpdf->FontFamily, $this->form_fonts)) {
767 $this->form_fonts[] = $this->mpdf->FontFamily;
768 $this->mpdf->fonts[$this->mpdf->FontFamily]['used'] = true;
769 }
770 $this->mpdf->x += $w;
771 }
772
773 // CHECKBOX
774 function SetCheckBox( $w, $h, $name, $value, $title = '', $checked = false, $flags = array(), $disabled=false ) {
775 $this->SetFormButton( $w, $h, $name, $value, 'checkbox', $title, $flags, $checked, $disabled );
776 $this->mpdf->x += $w;
777 }
778
779
780 // RADIO
781 function SetRadio( $w, $h, $name, $value, $title = '', $checked = false, $flags = array(), $disabled=false ) {
782 $this->SetFormButton( $w, $h, $name, $value, 'radio', $title, $flags, $checked, $disabled );
783 $this->mpdf->x += $w;
784 }
785
786
787 function SetFormReset( $w, $h, $name, $value = 'Reset', $title = '', $flags = array(), $background_col=false, $border_col=false, $noprint=false ) {
788 if (!$name) { $name = 'Reset'; }
789 $this->SetFormButton( $w, $h, $name, $value, 'reset', $title, $flags, false, false, $background_col, $border_col, $noprint);
790 $this->mpdf->x += $w;
791 }
792
793
794 function SetJSButton( $w, $h, $name, $value, $js, $image_id = 0, $title = '', $flags = array(), $indexed=false , $background_col=false, $border_col=false, $noprint=false ) {
795 $this->SetFormButton( $w, $h, $name, $value, 'js_button', $title, $flags, false, false, $background_col, $border_col, $noprint);
796 // pos => 1 = no caption, icon only; 0 = caption only
797 if ($image_id) {
798 $this->form_button_icon[$this->mpdf->_escape($name)] = array(
799 'pos' => 1,
800 'image_id' => $image_id,
801 'Indexed' => $indexed,
802 );
803 }
804 if ($js) { $this->SetFormButtonJS( $name, $js ); }
805 $this->mpdf->x += $w;
806 }
807
808
809 function SetFormSubmit( $w, $h, $name, $value = 'Submit', $url, $title = '', $typ = 'html', $method = 'POST', $flags = array(), $background_col=false, $border_col=false, $noprint=false) {
810 if (!$name) { $name = 'Submit'; }
811 $this->SetFormButton( $w, $h, $name, $value, 'submit', $title, $flags, false, false, $background_col, $border_col, $noprint);
812 $this->forms[$this->formn]['URL'] = $url;
813 $this->forms[$this->formn]['method'] = $method;
814 $this->forms[$this->formn]['exporttype'] = $typ;
815 $this->mpdf->x += $w;
816 }
817
818
819 function SetFormButtonText( $ca, $rc = '', $ac = '' ) {
820 if ($this->mpdf->onlyCoreFonts) {
821 $ca = $this->Win1252ToPDFDocEncoding($ca);
822 if ($rc) $rc = $this->Win1252ToPDFDocEncoding($rc);
823 if ($ac) $ac = $this->Win1252ToPDFDocEncoding($ac);
824 }
825 else {
826 if (isset($this->mpdf->CurrentFont['subset'])) {
827 $this->mpdf->UTF8StringToArray($ca, true); // Add characters to font subset
828 }
829 $ca = $this->mpdf->UTF8ToUTF16BE($ca, true);
830 if ($rc) {
831 if (isset($this->mpdf->CurrentFont['subset'])) { $this->mpdf->UTF8StringToArray($rc, true); }
832 $rc = $this->mpdf->UTF8ToUTF16BE($rc, true);
833 }
834 if ($ac) {
835 if (isset($this->mpdf->CurrentFont['subset'])) { $this->mpdf->UTF8StringToArray($ac, true); }
836 $ac = $this->mpdf->UTF8ToUTF16BE($ac, true);
837 }
838 }
839 $this->form_button_text = $ca;
840 $this->form_button_text_over = $rc ? $rc : $ca;
841 $this->form_button_text_click = $ac ? $ac : $ca;
842 }
843
844
845 function SetFormButton( $bb, $hh, $name, $value, $type, $title = '', $flags = array(), $checked=false, $disabled=false, $background_col=false, $border_col=false, $noprint=false ) {
846 $this->formn++;
847 if (!preg_match('/^[a-zA-Z0-9_:\-]+$/', $name)) {
848 $this->mpdf->Error("Field [".$name."] must have a name attribute, which can only contain letters, numbers, colon(:), undersore(_) or hyphen(-)");
849 }
850 if (!$this->mpdf->onlyCoreFonts) {
851 if (isset($this->mpdf->CurrentFont['subset'])) {
852 $this->mpdf->UTF8StringToArray($title, true); // Add characters to font subset
853 $this->mpdf->UTF8StringToArray($value, true); // Add characters to font subset
854 }
855 $title = $this->mpdf->UTF8ToUTF16BE($title, true);
856 if ($type == 'checkbox') {
857 $uvalue = $this->mpdf->UTF8ToUTF16BE($value, true);
858 }
859 else if ($type == 'radio') {
860 $uvalue = $this->mpdf->UTF8ToUTF16BE($value, true);
861 $value = mb_convert_encoding($value, 'Windows-1252', 'UTF-8');
862 }
863 else {
864 $value = $this->mpdf->UTF8ToUTF16BE($value, true);
865 $uvalue = $value;
866 }
867 }
868 else {
869 $title = $this->Win1252ToPDFDocEncoding($title);
870 $value = $this->Win1252ToPDFDocEncoding($value); //// ??? not needed
871 $uvalue = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
872 $uvalue = $this->mpdf->UTF8ToUTF16BE($uvalue, true);
873 }
874 if ($type == 'radio' || $type == 'checkbox') {
875 if (!preg_match('/^[a-zA-Z0-9_:\-\.]+$/', $value)) {
876 $this->mpdf->Error("Field '".$name."' must have a value, which can only contain letters, numbers, colon(:), undersore(_), hyphen(-) or period(.)");
877 }
878 }
879 if ($type == 'radio') {
880 if (!isset($this->form_radio_groups[$name])) {
881 $this->form_radio_groups[$name] = array(
882 'page' => $this->mpdf->page,
883 'kids' => array(),
884 );
885 }
886 $this->form_radio_groups[$name]['kids'][] = array(
887 'n' => $this->formn, 'V'=> $value, 'OPT'=>$uvalue, 'disabled'=>$disabled
888 );
889 if ( $checked ) { $this->form_radio_groups[$name]['on'] = $value; }
890 // Disable the whole radio group if one is disabled, because of inconsistency in PDF readers
891 if ( $disabled ) { $this->form_radio_groups[$name]['disabled'] = true; }
892 }
893 if ($type == 'checkbox') {
894 $this->form_checkboxes = true;
895 }
896 if ( $checked ) { $activ = 1; }
897 else { $activ = 0; }
898 if ($background_col) { $bg_c = $this->mpdf->SetColor($background_col, 'CodeOnly'); }
899 else { $bg_c = $this->form_button_background_color; }
900 if ($border_col) { $bc_c = $this->mpdf->SetColor($border_col, 'CodeOnly'); }
901 else { $bc_c = $this->form_button_border_color; }
902 $f = array( 'n' => $this->formn,
903 'typ' => 'Bt',
904 'page' => $this->mpdf->page,
905 'subtype' => $type,
906 'x' => $this->mpdf->x,
907 'y' => $this->mpdf->y,
908 'w' => $bb,
909 'h' => $hh,
910 'T' => $name,
911 'V' => $value,
912 'OPT' => $uvalue,
913 'TU' => $title,
914 'FF' => $flags,
915 'CA' => $this->form_button_text,
916 'RC' => $this->form_button_text_over,
917 'AC' => $this->form_button_text_click,
918 'BS_W' => $this->form_button_border_width,
919 'BS_S' => $this->form_button_border_style,
920 'BC_C' => $bc_c,
921 'BG_C' => $bg_c,
922 'activ' => $activ,
923 'disabled' => $disabled,
924 'noprint' => $noprint,
925 'style' => array(
926 'font' => $this->mpdf->FontFamily,
927 'fontsize' => $this->mpdf->FontSizePt,
928 'fontcolor' => $this->mpdf->TextColor,
929 )
930 );
931 if ($this->mpdf->keep_block_together) { $this->mpdf->ktForms[]= $f; }
932 else if ($this->mpdf->writingHTMLheader || $this->mpdf->writingHTMLfooter) { $this->mpdf->HTMLheaderPageForms[]= $f; }
933 else {
934 if ($this->mpdf->ColActive) {
935 $this->mpdf->columnbuffer[] = array('s' => 'ACROFORM', 'col' => $this->mpdf->CurrCol, 'x' => $this->mpdf->x, 'y' => $this->mpdf->y,
936 'h' => $hh);
937 $this->mpdf->columnForms[$this->mpdf->CurrCol][INTVAL($this->mpdf->x)][INTVAL($this->mpdf->y)] = $this->formn;
938 }
939 $this->forms[$this->formn] = $f;
940 }
941 if (!in_array($this->mpdf->FontFamily, $this->form_fonts)) {
942 $this->form_fonts[] = $this->mpdf->FontFamily;
943 $this->mpdf->fonts[$this->mpdf->FontFamily]['used'] = true;
944 }
945
946 $this->form_button_text = NULL;
947 $this->form_button_text_over = NULL;
948 $this->form_button_text_click = NULL;
949 }
950
951
952
953 function SetFormBorderWidth ( $string ) {
954 switch( $string ) {
955 case 'S': $this->form_border_width = '1';
956 break;
957 case 'M': $this->form_border_width = '2';
958 break;
959 case 'B': $this->form_border_width = '3';
960 break;
961 case '0': $this->form_border_width = '0';
962 break;
963 default: $this->form_border_width = '0';
964 break;
965 }
966 }
967
968
969 function SetFormBorderStyle ( $string ) {
970 switch( $string ) {
971 case 'S': $this->form_border_style = 'S';
972 break;
973 case 'D': $this->form_border_style = 'D /D [3]';
974 break;
975 case 'B': $this->form_border_style = 'B';
976 break;
977 case 'I': $this->form_border_style = 'I';
978 break;
979 case 'U': $this->form_border_style = 'U';
980 break;
981 default: $this->form_border_style = 'B';
982 break;
983 }
984 }
985
986 function SetFormBorderColor ( $r, $g=-1, $b=-1 ) {
987 if ( ($r==0 and $g==0 and $b==0) || $g==-1 )
988 $this->form_border_color = sprintf('%.3F', $r/255);
989 else
990 $this->form_border_color = sprintf('%.3F %.3F %.3F', $r/255, $g/255, $b/255);
991 }
992
993 function SetFormBackgroundColor ( $r, $g=-1, $b=-1 ) {
994 if ( ($r==0 and $g==0 and $b==0) || $g==-1 )
995 $this->form_background_color = sprintf('%.3F', $r/255);
996 else
997 $this->form_background_color = sprintf('%.3F %.3F %.3F', $r/255, $g/255, $b/255);
998 }
999
1000 function SetFormD ( $W, $S, $BC, $BG ) {
1001 $this->SetFormBorderWidth ( $W );
1002 $this->SetFormBorderStyle ( $S );
1003 $this->SetFormBorderColor ( $BC );
1004 $this->SetFormBackgroundColor ( $BG );
1005 }
1006
1007 function _setflag( $array ) {
1008 $flag = 0;
1009 foreach($array as $val) { $flag += 1 << ($val-1); }
1010 return $flag;
1011 }
1012
1013 function _form_rect( $x, $y, $w, $h, $hPt ) {
1014 $x = $x * _MPDFK;
1015 $y = $hPt - ($y * _MPDFK);
1016 $x2 = $x + ($w * _MPDFK);
1017 $y2 = $y - ($h * _MPDFK);
1018 $rect = sprintf('%.3F %.3F %.3F %.3F', $x, $y2, $x2, $y );
1019 return $rect;
1020 }
1021
1022
1023 function _put_button_icon( $array , $w, $h ) {
1024 if (isset($array['image_id'])) {
1025 $info = false;
1026 foreach($this->mpdf->images AS $iid=>$img) {
1027 if ($img['i'] == $array['image_id']) {
1028 $info = $this->mpdf->images[$iid];
1029 break;
1030 }
1031 }
1032 }
1033 if (!$info) { die("Cannot find Button image"); }
1034 $this->mpdf->_newobj();
1035 $this->mpdf->_out('<<');
1036 $this->mpdf->_out('/Type /XObject');
1037 $this->mpdf->_out('/Subtype /Image');
1038 $this->mpdf->_out('/BBox [0 0 1 1]');
1039 $this->mpdf->_out('/Length '.strlen($info['data']));
1040 $this->mpdf->_out('/BitsPerComponent '.$info['bpc']);
1041 if ($info['cs']=='Indexed') {
1042 $this->mpdf->_out('/ColorSpace [/Indexed /DeviceRGB '.(strlen($info['pal'])/3-1).' '.($this->mpdf->n+1).' 0 R]');
1043 }
1044 else {
1045 $this->mpdf->_out('/ColorSpace /'.$info['cs']);
1046 if ($info['cs']=='DeviceCMYK')
1047 if($info['type']=='jpg') { $this->mpdf->_out('/Decode [1 0 1 0 1 0 1 0]'); }
1048 }
1049 if ( isset($info['f']) )
1050 $this->mpdf->_out('/Filter /'.$info['f']);
1051 if ( isset($info['parms']) )
1052 $this->mpdf->_out($info['parms']);
1053 $this->mpdf->_out('/Width '.$info['w']);
1054 $this->mpdf->_out('/Height '.$info['h']);
1055 $this->mpdf->_out('>>');
1056 $this->mpdf->_putstream($info['data']);
1057 $this->mpdf->_out('endobj');
1058 unset($array);
1059 //Palette
1060 if($info['cs']=='Indexed') {
1061 $filter=($this->mpdf->compress) ? '/Filter /FlateDecode ' : '';
1062 $this->mpdf->_newobj();
1063 $pal=($this->mpdf->compress) ? gzcompress($info['pal']) : $info['pal'];
1064 $this->mpdf->_out('<<'.$filter.'/Length '.strlen($pal).'>>');
1065 $this->mpdf->_putstream($pal);
1066 $this->mpdf->_out('endobj');
1067 }
1068
1069 }
1070
1071
1072 function _putform_bt( $form, $hPt ) {
1073 $cc = 0;
1074 $put_xobject = 0;
1075 $put_js = 0;
1076 $put_icon = 0;
1077 $this->mpdf->_newobj();
1078 $n = $this->mpdf->n;
1079 if ($form['subtype'] != 'radio') $this->pdf_acro_array .= $n.' 0 R '; // Add to /Field element
1080 $this->forms[ $form['n'] ]['obj'] = $n;
1081 $this->mpdf->_out('<<');
1082 $this->mpdf->_out('/Type /Annot ');
1083 $this->mpdf->_out('/Subtype /Widget');
1084 $this->mpdf->_out('/NM '.$this->mpdf->_textstring(sprintf('%04u-%04u', $n, (7000 + $form['n']))));
1085 $this->mpdf->_out('/M '.$this->mpdf->_textstring('D:'.date('YmdHis')));
1086 $this->mpdf->_out('/Rect [ '.$this->_form_rect($form['x'],$form['y'],$form['w'],$form['h'], $hPt).' ]');
1087 $form['noprint'] ? $this->mpdf->_out('/F 0 ') : $this->mpdf->_out('/F 4 ');
1088 $this->mpdf->_out('/FT /Btn ');
1089 $this->mpdf->_out('/H /P ');
1090 if ( $form['subtype'] != 'radio' ) // mPDF 5.3.23
1091 $this->mpdf->_out('/T '.$this->mpdf->_textstring($form['T']) );
1092 $this->mpdf->_out('/TU '.$this->mpdf->_textstring($form['TU']) );
1093 if ( isset( $this->form_button_icon[ $form['T'] ] ) ) { $form['BS_W'] = 0; }
1094 if ($form['BS_W'] == 0) { $form['BC_C'] = $form['BG_C']; }
1095 $bstemp = '';
1096 $bstemp .= '/W '.$form['BS_W'].' ';
1097 $bstemp .= '/S /'.$form['BS_S'].' ';
1098 $temp = '';
1099 $temp .= '/BC [ '.$form['BC_C']." ] ";
1100 $temp .= '/BG [ '.$form['BG_C']." ] ";
1101 if ( $form['subtype'] == 'checkbox' ) {
1102 if ($form['disabled']) {
1103 $radio_color = '0.5 0.5 0.5';
1104 $radio_background_color = '0.9 0.9 0.9';
1105 }
1106 else {
1107 $radio_color = $this->form_radio_color;
1108 $radio_background_color = $this->form_radio_background_color;
1109 }
1110 $temp = '';
1111 $temp .= '/BC [ '.$radio_color." ] ";
1112 $temp .= '/BG [ '.$radio_background_color." ] ";
1113 $this->mpdf->_out("/BS << /W 1 /S /S >>");
1114 $this->mpdf->_out("/MK << $temp >>");
1115 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']) );
1116 if ( $form['activ'] ) {
1117 $this->mpdf->_out('/V /'.$this->mpdf->_escape($form['V']).' ');
1118 $this->mpdf->_out('/DV /'.$this->mpdf->_escape($form['V']).' ');
1119 $this->mpdf->_out('/AS /'.$this->mpdf->_escape($form['V']).' ');
1120 } else {
1121 $this->mpdf->_out('/AS /Off ');
1122 }
1123 if ($this->formUseZapD) {
1124 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts['czapfdingbats']['i'].' 0 Tf '.$radio_color.' rg)');
1125 $this->mpdf->_out("/AP << /N << /".$this->mpdf->_escape($form['V'])." ".($this->mpdf->n+1)." 0 R /Off /Off >> >>");
1126 }
1127 else {
1128 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$this->mpdf->CurrentFont['fontkey']]['i'].' 0 Tf '.$radio_color.' rg)');
1129 $this->mpdf->_out("/AP << /N << /".$this->mpdf->_escape($form['V'])." ".($this->mpdf->n+1)." 0 R /Off ".($this->mpdf->n+2)." 0 R >> >>");
1130 }
1131 $this->mpdf->_out('/Opt [ '.$this->mpdf->_textstring($form['OPT']).' '.$this->mpdf->_textstring($form['OPT']).' ]');
1132 }
1133
1134
1135 if ( $form['subtype'] == 'radio' ) {
1136 if ($form['disabled'] || $this->form_radio_groups[$form['T']]['disabled']) {
1137 $radio_color = '0.5 0.5 0.5';
1138 $radio_background_color = '0.9 0.9 0.9';
1139 }
1140 else {
1141 $radio_color = $this->form_radio_color;
1142 $radio_background_color = $this->form_radio_background_color;
1143 }
1144 $this->mpdf->_out('/Parent '.$this->form_radio_groups[$form['T']]['obj_id'].' 0 R ');
1145 $temp = '';
1146 $temp .= '/BC [ '.$radio_color." ] ";
1147 $temp .= '/BG [ '.$radio_background_color." ] ";
1148 $this->mpdf->_out("/BS << /W 1 /S /S >>");
1149 $this->mpdf->_out('/MK << '.$temp.' >> ');
1150 $form['FF'][] = 16; // Radiobutton
1151 $form['FF'][] = 15; // NoToggleOff - must be same as radio button group setting?
1152 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']) );
1153 if ($this->formUseZapD)
1154 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts['czapfdingbats']['i'].' 0 Tf '.$radio_color.' rg)');
1155 else
1156 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$this->mpdf->CurrentFont['fontkey']]['i'].' 0 Tf '.$radio_color.' rg)');
1157 $this->mpdf->_out("/AP << /N << /".$this->mpdf->_escape($form['V'])." ".($this->mpdf->n+1)." 0 R /Off ".($this->mpdf->n+2)." 0 R >> >>");
1158 if ( $form['activ'] ) {
1159 $this->mpdf->_out('/V /'.$this->mpdf->_escape($form['V']).' ');
1160 $this->mpdf->_out('/DV /'.$this->mpdf->_escape($form['V']).' ');
1161 $this->mpdf->_out('/AS /'.$this->mpdf->_escape($form['V']).' ');
1162 }
1163 else {
1164 $this->mpdf->_out('/AS /Off ');
1165 }
1166 $this->mpdf->_out("/AP << /N << /".$this->mpdf->_escape($form['V'])." ".($this->mpdf->n+1)." 0 R /Off ".($this->mpdf->n+2)." 0 R >> >>");
1167 // $this->mpdf->_out('/Opt [ '.$this->mpdf->_textstring($form['OPT']).' '.$this->mpdf->_textstring($form['OPT']).' ]');
1168 }
1169
1170 if ( $form['subtype'] == 'reset' ) {
1171 $temp .= $form['CA'] ? '/CA '.$this->mpdf->_textstring($form['CA']).' ' : '/CA '.$this->mpdf->_textstring($form['T']).' ';
1172 $temp .= $form['RC'] ? '/RC '.$this->mpdf->_textstring($form['RC']).' ' : '/RC '.$this->mpdf->_textstring($form['T']).' ';
1173 $temp .= $form['AC'] ? '/AC '.$this->mpdf->_textstring($form['AC']).' ' : '/AC '.$this->mpdf->_textstring($form['T']).' ';
1174 $this->mpdf->_out("/BS << $bstemp >>");
1175 $this->mpdf->_out('/MK << '.$temp.' >>');
1176 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$form['style']['font']]['i'].' '.$form['style']['fontsize'].' Tf '.$form['style']['fontcolor'].')');
1177 $this->mpdf->_out('/AA << /D << /S /ResetForm /Flags 1 >> >>');
1178 $form['FF'][] = 17;
1179 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']) );
1180 }
1181
1182
1183 if ( $form['subtype'] == 'submit' ) {
1184 $temp .= $form['CA'] ? '/CA '.$this->mpdf->_textstring($form['CA']).' ' : '/CA '.$this->mpdf->_textstring($form['T']).' ';
1185 $temp .= $form['RC'] ? '/RC '.$this->mpdf->_textstring($form['RC']).' ' : '/RC '.$this->mpdf->_textstring($form['T']).' ';
1186 $temp .= $form['AC'] ? '/AC '.$this->mpdf->_textstring($form['AC']).' ' : '/AC '.$this->mpdf->_textstring($form['T']).' ';
1187 $this->mpdf->_out("/BS << $bstemp >>");
1188 $this->mpdf->_out("/MK << $temp >>");
1189 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$form['style']['font']]['i'].' '.$form['style']['fontsize'].' Tf '.$form['style']['fontcolor'].')');
1190 // Bit 4 (8) = useGETmethod else use POST
1191 // Bit 3 (4) = HTML export format (charset chosen by Adobe)--- OR ---
1192 // Bit 6 (32) = XFDF export format (form of XML in UTF-8)
1193 if ($form['exporttype'] == 'xfdf') { $flag = 32; } // 'xfdf' or 'html'
1194 else {
1195 if ($form['method'] == 'GET') { $flag = 12; }
1196 else { $flag = 4; }
1197 }
1198 // Bit 2 (2) = IncludeNoValueFields
1199 if ($this->formSubmitNoValueFields) $flag += 2;
1200 // To submit a value, needs to be in /AP dictionary, AND this object must contain a /Fields entry
1201 // listing all fields to output
1202 $this->mpdf->_out('/AA << /D << /S /SubmitForm /F ('.$form['URL'].') /Flags '.$flag.' >> >>');
1203 $form['FF'][] = 17;
1204 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']) );
1205 }
1206
1207 if ( $form['subtype'] == 'js_button' ) {
1208 // Icon / image
1209 if ( isset( $this->form_button_icon[ $form['T'] ] ) ) {
1210 $cc++;
1211 $temp .= '/TP '.$this->form_button_icon[$form['T']]['pos'].' ';
1212 $temp .= '/I '.($cc + $this->mpdf->n).' 0 R '; // Normal icon
1213 $temp .= '/RI '.($cc + $this->mpdf->n).' 0 R '; // onMouseOver
1214 $temp .= '/IX '.($cc + $this->mpdf->n).' 0 R '; // onClick / onMouseDown
1215 $temp .= '/IF << /SW /A /S /A /A [0.0 0.0] >> '; // Icon fit dictionary
1216 if ($this->form_button_icon[ $form['T'] ]['Indexed']) { $cc++; }
1217 $put_icon = 1;
1218 }
1219 $temp .= $form['CA'] ? '/CA '.$this->mpdf->_textstring($form['CA']).' ' : '/CA '.$this->mpdf->_textstring($form['T']).' ';
1220 $temp .= $form['RC'] ? '/RC '.$this->mpdf->_textstring($form['RC']).' ' : '/RC '.$this->mpdf->_textstring($form['T']).' ';
1221 $temp .= $form['AC'] ? '/AC '.$this->mpdf->_textstring($form['AC']).' ' : '/AC '.$this->mpdf->_textstring($form['T']).' ';
1222 $this->mpdf->_out("/BS << $bstemp >>");
1223 $this->mpdf->_out("/MK << $temp >>");
1224 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$form['style']['font']]['i'].' '.$form['style']['fontsize'].' Tf '.$form['style']['fontcolor'].')');
1225 $form['FF'][] = 17;
1226 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']) );
1227 // Javascript
1228 if ( isset($this->array_form_button_js[$form['T']]) ) {
1229 $cc++;
1230 $this->mpdf->_out("/AA << /D ".($cc + $this->mpdf->n)." 0 R >>");
1231 $put_js = 1;
1232 }
1233 }
1234
1235 $this->mpdf->_out('>>');
1236 $this->mpdf->_out('endobj');
1237
1238 // additional objects
1239 // obj icon
1240 if ( $put_icon == 1 ) {
1241 $this->_put_button_icon( $this->form_button_icon[ $form['T'] ], $form['w'], $form['h'] );
1242 $put_icon = NULL;
1243 }
1244 // obj + 1
1245 if ( $put_js == 1 ) {
1246 $this->mpdf->_set_object_javascript( $this->array_form_button_js[$form['T']]['js'] );
1247 unset( $this->array_form_button_js[$form['T']] );
1248 $put_js = NULL;
1249 }
1250
1251 // RADIO and CHECK BOX appearance streams
1252 $filter=($this->mpdf->compress) ? '/Filter /FlateDecode ' : '';
1253 if ( $form['subtype'] == 'radio' ) {
1254 // output 2 appearance streams for radio buttons on/off
1255 if ($this->formUseZapD) {
1256 $fs = sprintf('%.3F', $form['style']['fontsize']*1.25);
1257 $fi = 'czapfdingbats';
1258 $r_on = 'q '.$radio_color .' rg BT /F'.$this->mpdf->fonts[$fi]['i'].' '.$fs.' Tf 0 0 Td (4) Tj ET Q';
1259 $r_off = 'q '.$radio_color .' rg BT /F'.$this->mpdf->fonts[$fi]['i'].' '.$fs.' Tf 0 0 Td (8) Tj ET Q';
1260 }
1261 else {
1262 $matrix = sprintf('%.3F 0 0 %.3F 0 %.3F', $form['style']['fontsize']*1.33/10, $form['style']['fontsize']*1.25/10, $form['style']['fontsize']);
1263 $fill = $radio_background_color.' rg 3.778 -7.410 m 2.800 -7.410 1.947 -7.047 1.225 -6.322 c 0.500 -5.600 0.138 -4.747 0.138 -3.769 c 0.138 -2.788 0.500 -1.938 1.225 -1.213 c 1.947 -0.491 2.800 -0.128 3.778 -0.128 c 4.757 -0.128 5.610 -0.491 6.334 -1.213 c 7.056 -1.938 7.419 -2.788 7.419 -3.769 c 7.419 -4.747 7.056 -5.600 6.334 -6.322 c 5.610 -7.047 4.757 -7.410 3.778 -7.410 c h f ';
1264 $circle = '3.778 -6.963 m 4.631 -6.963 5.375 -6.641 6.013 -6.004 c 6.653 -5.366 6.972 -4.619 6.972 -3.769 c 6.972 -2.916 6.653 -2.172 6.013 -1.532 c 5.375 -0.894 4.631 -0.576 3.778 -0.576 c 2.928 -0.576 2.182 -0.894 1.544 -1.532 c 0.904 -2.172 0.585 -2.916 0.585 -3.769 c 0.585 -4.619 0.904 -5.366 1.544 -6.004 c 2.182 -6.641 2.928 -6.963 3.778 -6.963 c h 3.778 -7.410 m 2.800 -7.410 1.947 -7.047 1.225 -6.322 c 0.500 -5.600 0.138 -4.747 0.138 -3.769 c 0.138 -2.788 0.500 -1.938 1.225 -1.213 c 1.947 -0.491 2.800 -0.128 3.778 -0.128 c 4.757 -0.128 5.610 -0.491 6.334 -1.213 c 7.056 -1.938 7.419 -2.788 7.419 -3.769 c 7.419 -4.747 7.056 -5.600 6.334 -6.322 c 5.610 -7.047 4.757 -7.410 3.778 -7.410 c h f ';
1265 $r_on = 'q '.$matrix.' cm '.$fill .$radio_color.' rg '.$circle.' '.$radio_color.' rg
1266 5.184 -5.110 m 4.800 -5.494 4.354 -5.685 3.841 -5.685 c 3.331 -5.685 2.885 -5.494 2.501 -5.110 c 2.119 -4.725 1.925 -4.279 1.925 -3.769 c 1.925 -3.257 2.119 -2.810 2.501 -2.429 c 2.885 -2.044 3.331 -1.853 3.841 -1.853 c 4.354 -1.853 4.800 -2.044 5.184 -2.429 c 5.566 -2.810 5.760 -3.257 5.760 -3.769 c 5.760 -4.279 5.566 -4.725 5.184 -5.110 c h
1267 f Q ';
1268 $r_off = 'q '.$matrix.' cm '.$fill .$radio_color.' rg '.$circle.' Q ';
1269 }
1270
1271 $this->mpdf->_newobj();
1272 $p=($this->mpdf->compress) ? gzcompress($r_on) : $r_on;
1273 $this->mpdf->_out('<<'.$filter.'/Length '.strlen($p).' /Resources 2 0 R>>');
1274 $this->mpdf->_putstream($p);
1275 $this->mpdf->_out('endobj');
1276
1277 $this->mpdf->_newobj();
1278 $p=($this->mpdf->compress) ? gzcompress($r_off) : $r_off;
1279 $this->mpdf->_out('<<'.$filter.'/Length '.strlen($p).' /Resources 2 0 R>>');
1280 $this->mpdf->_putstream($p);
1281 $this->mpdf->_out('endobj');
1282 }
1283 if ( $form['subtype'] == 'checkbox' ) {
1284 // First output appearance stream for check box on
1285 if ($this->formUseZapD) {
1286 $fs = sprintf('%.3F', $form['style']['fontsize']*1.25);
1287 $fi = 'czapfdingbats';
1288 $cb_on = 'q '.$radio_color .' rg BT /F'.$this->mpdf->fonts[$fi]['i'].' '.$fs.' Tf 0 0 Td (4) Tj ET Q';
1289 $cb_off = 'q '.$radio_color .' rg BT /F'.$this->mpdf->fonts[$fi]['i'].' '.$fs.' Tf 0 0 Td (8) Tj ET Q';
1290 }
1291 else {
1292 $matrix = sprintf('%.3F 0 0 %.3F 0 %.3F', $form['style']['fontsize']*1.33/10, $form['style']['fontsize']*1.25/10, $form['style']['fontsize']);
1293 $fill = $radio_background_color.' rg 7.395 -0.070 m 7.395 -7.344 l 0.121 -7.344 l 0.121 -0.070 l 7.395 -0.070 l h f ';
1294 $square = '0.508 -6.880 m 6.969 -6.880 l 6.969 -0.534 l 0.508 -0.534 l 0.508 -6.880 l h 7.395 -0.070 m 7.395 -7.344 l 0.121 -7.344 l 0.121 -0.070 l 7.395 -0.070 l h ';
1295 $cb_on = 'q '.$matrix.' cm '.$fill. $radio_color.' rg '.$square.' f '.$radio_color.' rg
1296 6.321 -1.352 m 5.669 -2.075 5.070 -2.801 4.525 -3.532 c 3.979 -4.262 3.508 -4.967 3.112 -5.649 c 3.080 -5.706 3.039 -5.779 2.993 -5.868 c 2.858 -6.118 2.638 -6.243 2.334 -6.243 c 2.194 -6.243 2.100 -6.231 2.052 -6.205 c 2.003 -6.180 1.954 -6.118 1.904 -6.020 c 1.787 -5.788 1.688 -5.523 1.604 -5.226 c 1.521 -4.930 1.480 -4.721 1.480 -4.600 c 1.480 -4.535 1.491 -4.484 1.512 -4.447 c 1.535 -4.410 1.579 -4.367 1.647 -4.319 c 1.733 -4.259 1.828 -4.210 1.935 -4.172 c 2.040 -4.134 2.131 -4.115 2.205 -4.115 c 2.267 -4.115 2.341 -4.232 2.429 -4.469 c 2.437 -4.494 2.444 -4.511 2.448 -4.522 c 2.451 -4.531 2.456 -4.546 2.465 -4.568 c 2.546 -4.795 2.614 -4.910 2.668 -4.910 c 2.714 -4.910 2.898 -4.652 3.219 -4.136 c 3.539 -3.620 3.866 -3.136 4.197 -2.683 c 4.426 -2.367 4.633 -2.103 4.816 -1.889 c 4.998 -1.676 5.131 -1.544 5.211 -1.493 c 5.329 -1.426 5.483 -1.368 5.670 -1.319 c 5.856 -1.271 6.066 -1.238 6.296 -1.217 c 6.321 -1.352 l h f Q ';
1297 $cb_off = 'q '.$matrix.' cm '.$fill. $radio_color.' rg '.$square.' f Q ';
1298
1299 }
1300 $this->mpdf->_newobj();
1301 $p=($this->mpdf->compress) ? gzcompress($cb_on) : $cb_on;
1302 $this->mpdf->_out('<<'.$filter.'/Length '.strlen($p).' /Resources 2 0 R>>');
1303 $this->mpdf->_putstream($p);
1304 $this->mpdf->_out('endobj');
1305
1306 // output appearance stream for check box off (only if not using ZapfDingbats)
1307 if (!$this->formUseZapD) {
1308 $this->mpdf->_newobj();
1309 $p=($this->mpdf->compress) ? gzcompress($cb_off) : $cb_off;
1310 $this->mpdf->_out('<<'.$filter.'/Length '.strlen($p).' /Resources 2 0 R>>');
1311 $this->mpdf->_putstream($p);
1312 $this->mpdf->_out('endobj');
1313 }
1314
1315 }
1316 return $n;
1317 }
1318
1319
1320 function _putform_ch( $form, $hPt ) {
1321 $put_js = 0;
1322 $this->mpdf->_newobj();
1323 $n = $this->mpdf->n;
1324 $this->pdf_acro_array .= $n.' 0 R ';
1325 $this->forms[ $form['n'] ]['obj'] = $n;
1326
1327 $this->mpdf->_out('<<');
1328 $this->mpdf->_out('/Type /Annot ');
1329 $this->mpdf->_out('/Subtype /Widget');
1330 $this->mpdf->_out('/Rect [ '.$this->_form_rect($form['x'],$form['y'],$form['w'],$form['h'], $hPt).' ]');
1331 $this->mpdf->_out('/F 4');
1332 $this->mpdf->_out('/FT /Ch');
1333 if ($form['Q']) $this->mpdf->_out('/Q '.$form['Q'].'');
1334 $temp = '';
1335 $temp .= '/W '.$form['BS_W'].' ';
1336 $temp .= '/S /'.$form['BS_S'].' ';
1337 $this->mpdf->_out("/BS << $temp >>");
1338
1339 $temp = '';
1340 $temp .= '/BC [ '.$form['BC_C']." ] ";
1341 $temp .= '/BG [ '.$form['BG_C']." ] ";
1342 $this->mpdf->_out('/MK << '.$temp.' >>');
1343
1344 $this->mpdf->_out('/NM '.$this->mpdf->_textstring(sprintf('%04u-%04u', $n, (6000 + $form['n']))));
1345 $this->mpdf->_out('/M '.$this->mpdf->_textstring('D:'.date('YmdHis')));
1346
1347 $this->mpdf->_out('/T '.$this->mpdf->_textstring($form['T']) );
1348 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$form['style']['font']]['i'].' '.$form['style']['fontsize'].' Tf '.$form['style']['fontcolor'].')');
1349
1350 $opt = '';
1351 for( $i = 0; $i < count($form['OPT']['VAL']) ; $i++ ) {
1352 $opt .= '[ '.$this->mpdf->_textstring($form['OPT']['VAL'][$i]).' '.$this->mpdf->_textstring($form['OPT']['OPT'][$i]).' ] ';
1353 }
1354 $this->mpdf->_out('/Opt [ '.$opt.']');
1355
1356 // selected
1357 $selectItem = false;
1358 $selectIndex = false;
1359 foreach ( $form['OPT']['SEL'] as $selectKey => $selectVal ) {
1360 $selectName = $this->mpdf->_textstring($form['OPT']['VAL'][$selectVal]);
1361 $selectItem .= ' '.$selectName.' ';
1362 $selectIndex .= ' '.$selectVal.' ';
1363 }
1364 if ( $selectItem ) {
1365 if (count($form['OPT']['SEL']) < 2) {
1366 $this->mpdf->_out('/V '.$selectItem.' ');
1367 $this->mpdf->_out('/DV '.$selectItem.' ');
1368 }
1369 else {
1370 $this->mpdf->_out('/V ['.$selectItem.'] ');
1371 $this->mpdf->_out('/DV ['.$selectItem.'] ');
1372 }
1373 $this->mpdf->_out('/I ['.$selectIndex.'] ');
1374 }
1375
1376 if ( is_array($form['FF']) && count($form['FF'])>0 ) {
1377 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']).' ');
1378 }
1379 // Javascript
1380 if ( isset($this->array_form_choice_js[$form['T']]) ) {
1381 $this->mpdf->_out("/AA << /V ".($this->mpdf->n+1)." 0 R >>");
1382 $put_js = 1;
1383 }
1384
1385 $this->mpdf->_out('>>');
1386 $this->mpdf->_out('endobj');
1387 // obj + 1
1388 if ( $put_js == 1 ) {
1389 $this->mpdf->_set_object_javascript( $this->array_form_choice_js[$form['T']]['js'] );
1390 unset( $this->array_form_choice_js[$form['T']] );
1391 $put_js = NULL;
1392 }
1393
1394 return $n;
1395 }
1396
1397
1398 function _putform_tx( $form, $hPt ) {
1399 $put_js = 0;
1400 $this->mpdf->_newobj();
1401 $n = $this->mpdf->n;
1402 $this->pdf_acro_array .= $n.' 0 R ';
1403 $this->forms[ $form['n'] ]['obj'] = $n;
1404
1405 $this->mpdf->_out('<<');
1406 $this->mpdf->_out('/Type /Annot ');
1407 $this->mpdf->_out('/Subtype /Widget ');
1408
1409 $this->mpdf->_out('/Rect [ '.$this->_form_rect($form['x'],$form['y'],$form['w'],$form['h'], $hPt).' ] ');
1410 $form['hidden'] ? $this->mpdf->_out('/F 2 ') : $this->mpdf->_out('/F 4 ');
1411 $this->mpdf->_out('/FT /Tx ');
1412
1413 $this->mpdf->_out('/H /N ');
1414 $this->mpdf->_out('/R 0 ');
1415
1416 if ( is_array($form['FF']) && count($form['FF'])>0 ) {
1417 $this->mpdf->_out('/Ff '.$this->_setflag($form['FF']).' ');
1418 }
1419 if ( isset($form['maxlen']) && $form['maxlen']>0 ) {
1420 $this->mpdf->_out('/MaxLen '.$form['maxlen']);
1421 }
1422
1423 $temp = '';
1424 $temp .= '/W '.$form['BS_W'].' ';
1425 $temp .= '/S /'.$form['BS_S'].' ';
1426 $this->mpdf->_out("/BS << $temp >>");
1427
1428 $temp = '';
1429 $temp .= '/BC [ '.$form['BC_C']." ] ";
1430 $temp .= '/BG [ '.$form['BG_C']." ] ";
1431 $this->mpdf->_out('/MK <<'.$temp.' >>');
1432
1433 $this->mpdf->_out('/T '.$this->mpdf->_textstring($form['T']) );
1434 $this->mpdf->_out('/TU '.$this->mpdf->_textstring($form['TU']) );
1435 if ($form['V'] || $form['V']==='0')
1436 $this->mpdf->_out('/V '.$this->mpdf->_textstring($form['V']) );
1437 $this->mpdf->_out('/DV '.$this->mpdf->_textstring($form['DV']) );
1438 $this->mpdf->_out('/DA (/F'.$this->mpdf->fonts[$form['style']['font']]['i'].' '.$form['style']['fontsize'].' Tf '.$form['style']['fontcolor'].')');
1439 if ( $form['Q'] ) $this->mpdf->_out('/Q '.$form['Q'].'');
1440
1441 $this->mpdf->_out('/NM '.$this->mpdf->_textstring(sprintf('%04u-%04u', $n, (5000 + $form['n']))));
1442 $this->mpdf->_out('/M '.$this->mpdf->_textstring('D:'.date('YmdHis')));
1443
1444
1445 if ( isset($this->array_form_text_js[$form['T']]) ) {
1446 $put_js = 1;
1447 $cc = 0;
1448 $js_str = '';
1449
1450 if ( isset($this->array_form_text_js[$form['T']]['F']) ) {
1451 $cc++;
1452 $js_str .= '/F '.($cc + $this->mpdf->n).' 0 R ';
1453 }
1454 if ( isset($this->array_form_text_js[$form['T']]['K']) ) {
1455 $cc++;
1456 $js_str .= '/K '.($cc + $this->mpdf->n).' 0 R ';
1457 }
1458 if ( isset($this->array_form_text_js[$form['T']]['V']) ) {
1459 $cc++;
1460 $js_str .= '/V '.($cc + $this->mpdf->n).' 0 R ';
1461 }
1462 if ( isset($this->array_form_text_js[$form['T']]['C']) ) {
1463 $cc++;
1464 $js_str .= '/C '.($cc + $this->mpdf->n).' 0 R ';
1465 $this->pdf_array_co .= $this->mpdf->n.' 0 R ';
1466 }
1467 $this->mpdf->_out('/AA << '.$js_str.' >>');
1468 }
1469
1470 $this->mpdf->_out('>>');
1471 $this->mpdf->_out('endobj');
1472
1473 if ( $put_js == 1 ) {
1474 if ( isset($this->array_form_text_js[$form['T']]['F']) ) {
1475 $this->mpdf->_set_object_javascript( $this->array_form_text_js[$form['T']]['F']['js'] );
1476 unset( $this->array_form_text_js[$form['T']]['F'] );
1477 }
1478 if ( isset($this->array_form_text_js[$form['T']]['K']) ) {
1479 $this->mpdf->_set_object_javascript( $this->array_form_text_js[$form['T']]['K']['js'] );
1480 unset( $this->array_form_text_js[$form['T']]['K'] );
1481 }
1482 if ( isset($this->array_form_text_js[$form['T']]['V']) ) {
1483 $this->mpdf->_set_object_javascript( $this->array_form_text_js[$form['T']]['V']['js'] );
1484 unset( $this->array_form_text_js[$form['T']]['V'] );
1485 }
1486 if ( isset($this->array_form_text_js[$form['T']]['C']) ) {
1487 $this->mpdf->_set_object_javascript( $this->array_form_text_js[$form['T']]['C']['js'] );
1488 unset( $this->array_form_text_js[$form['T']]['C'] );
1489 }
1490 }
1491 return $n;
1492 }
1493
1494
1495
1496 }
1497
1498 ?>