PageRenderTime 64ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 3ms

/application/helpers/mpdf/mpdf.php

https://bitbucket.org/Korrigan33/fusioninvoice
PHP | 13048 lines | 10673 code | 1240 blank | 1135 comment | 4328 complexity | 6c9dc135cb0588ed57876750254b172b MD5 | raw file
Possible License(s): LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. <?php
  2. // ******************************************************************************
  3. // Software: mPDF, Unicode-HTML Free PDF generator *
  4. // Version: 5.6 based on *
  5. // FPDF by Olivier PLATHEY *
  6. // HTML2FPDF by Renato Coelho *
  7. // Date: 2013-01-20 *
  8. // Author: Ian Back <ianb@bpm1.com> *
  9. // License: GPL *
  10. // *
  11. // Changes: See changelog.txt *
  12. // ******************************************************************************
  13. define('mPDF_VERSION','5.6');
  14. //Scale factor
  15. define('_MPDFK', (72/25.4));
  16. /*-- HTML-CSS --*/
  17. define('AUTOFONT_CJK',1);
  18. define('AUTOFONT_THAIVIET',2);
  19. define('AUTOFONT_RTL',4);
  20. define('AUTOFONT_INDIC',8);
  21. define('AUTOFONT_ALL',15);
  22. define('_BORDER_ALL',15);
  23. define('_BORDER_TOP',8);
  24. define('_BORDER_RIGHT',4);
  25. define('_BORDER_BOTTOM',2);
  26. define('_BORDER_LEFT',1);
  27. /*-- END HTML-CSS --*/
  28. if (!defined('_MPDF_PATH')) define('_MPDF_PATH', dirname(preg_replace('/\\\\/','/',__FILE__)) . '/');
  29. if (!defined('_MPDF_URI')) define('_MPDF_URI',_MPDF_PATH);
  30. require_once(_MPDF_PATH.'includes/functions.php');
  31. require_once(_MPDF_PATH.'config_cp.php');
  32. if (!defined('_JPGRAPH_PATH')) define("_JPGRAPH_PATH", _MPDF_PATH.'jpgraph/');
  33. if (!defined('_MPDF_TEMP_PATH')) define("_MPDF_TEMP_PATH", _MPDF_PATH.'tmp/');
  34. if (!defined('_MPDF_TTFONTPATH')) { define('_MPDF_TTFONTPATH',_MPDF_PATH.'ttfonts/'); }
  35. if (!defined('_MPDF_TTFONTDATAPATH')) { define('_MPDF_TTFONTDATAPATH',_MPDF_PATH.'ttfontdata/'); }
  36. $errorlevel=error_reporting();
  37. $errorlevel=error_reporting($errorlevel & ~E_NOTICE);
  38. //error_reporting(E_ALL);
  39. if(function_exists("date_default_timezone_set")) {
  40. if (ini_get("date.timezone")=="") { date_default_timezone_set("Europe/London"); }
  41. }
  42. if (!function_exists("mb_strlen")) { die("Error - mPDF requires mb_string functions. Ensure that PHP is compiled with php_mbstring.dll enabled."); }
  43. if (!defined('PHP_VERSION_ID')) {
  44. $version = explode('.', PHP_VERSION);
  45. define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
  46. }
  47. // Machine dependent number of bytes used to pack "double" into binary (used in cacheTables)
  48. $test = pack("d", 134455.474557333333666);
  49. define("_DSIZE", strlen($test));
  50. class mPDF
  51. {
  52. ///////////////////////////////
  53. // EXTERNAL (PUBLIC) VARIABLES
  54. // Define these in config.php
  55. ///////////////////////////////
  56. var $margBuffer; // mPDF 5.4.04
  57. var $splitTableBorderWidth; // mPDF 5.4.16
  58. var $cacheTables;
  59. var $bookmarkStyles;
  60. var $useActiveForms;
  61. var $repackageTTF;
  62. var $allowCJKorphans;
  63. var $allowCJKoverflow;
  64. var $useKerning;
  65. var $restrictColorSpace;
  66. var $bleedMargin;
  67. var $crossMarkMargin;
  68. var $cropMarkMargin;
  69. var $cropMarkLength;
  70. var $nonPrintMargin;
  71. var $PDFX;
  72. var $PDFXauto;
  73. var $PDFA;
  74. var $PDFAauto;
  75. var $ICCProfile;
  76. var $printers_info;
  77. var $iterationCounter;
  78. var $smCapsScale;
  79. var $smCapsStretch;
  80. var $backupSubsFont;
  81. var $backupSIPFont;
  82. var $debugfonts;
  83. var $useAdobeCJK;
  84. var $percentSubset;
  85. var $maxTTFFilesize;
  86. var $BMPonly;
  87. var $tableMinSizePriority;
  88. var $dpi;
  89. var $watermarkImgAlphaBlend;
  90. var $watermarkImgBehind;
  91. var $justifyB4br;
  92. var $packTableData;
  93. var $pgsIns;
  94. var $simpleTables;
  95. var $enableImports;
  96. var $debug;
  97. var $showStats;
  98. var $setAutoTopMargin;
  99. var $setAutoBottomMargin;
  100. var $autoMarginPadding;
  101. var $collapseBlockMargins;
  102. var $falseBoldWeight;
  103. var $normalLineheight;
  104. var $progressBar;
  105. var $incrementFPR1;
  106. var $incrementFPR2;
  107. var $incrementFPR3;
  108. var $incrementFPR4;
  109. var $hyphenate;
  110. var $hyphenateTables;
  111. var $SHYlang;
  112. var $SHYleftmin;
  113. var $SHYrightmin;
  114. var $SHYcharmin;
  115. var $SHYcharmax;
  116. var $SHYlanguages;
  117. // PageNumber Conditional Text
  118. var $pagenumPrefix;
  119. var $pagenumSuffix;
  120. var $nbpgPrefix;
  121. var $nbpgSuffix;
  122. var $showImageErrors;
  123. var $allow_output_buffering;
  124. var $autoPadding;
  125. var $useGraphs;
  126. var $autoFontGroupSize;
  127. var $tabSpaces;
  128. var $useLang;
  129. var $restoreBlockPagebreaks;
  130. var $watermarkTextAlpha;
  131. var $watermarkImageAlpha;
  132. var $watermark_size;
  133. var $watermark_pos;
  134. var $annotSize;
  135. var $annotMargin;
  136. var $annotOpacity;
  137. var $title2annots;
  138. var $keepColumns;
  139. var $keep_table_proportions;
  140. var $ignore_table_widths;
  141. var $ignore_table_percents;
  142. var $list_align_style;
  143. var $list_number_suffix;
  144. var $useSubstitutions;
  145. var $CSSselectMedia;
  146. var $forcePortraitHeaders;
  147. var $forcePortraitMargins;
  148. var $displayDefaultOrientation;
  149. var $ignore_invalid_utf8;
  150. var $allowedCSStags;
  151. var $onlyCoreFonts;
  152. var $allow_charset_conversion;
  153. var $jSWord;
  154. var $jSmaxChar;
  155. var $jSmaxCharLast;
  156. var $jSmaxWordLast;
  157. var $orphansAllowed;
  158. var $max_colH_correction;
  159. var $table_error_report;
  160. var $table_error_report_param;
  161. var $biDirectional;
  162. var $text_input_as_HTML;
  163. var $anchor2Bookmark;
  164. var $list_indent_first_level;
  165. var $shrink_tables_to_fit;
  166. var $allow_html_optional_endtags;
  167. var $img_dpi;
  168. var $defaultheaderfontsize;
  169. var $defaultheaderfontstyle;
  170. var $defaultheaderline;
  171. var $defaultfooterfontsize;
  172. var $defaultfooterfontstyle;
  173. var $defaultfooterline;
  174. var $header_line_spacing;
  175. var $footer_line_spacing;
  176. var $pregUHCchars;
  177. var $pregSJISchars;
  178. var $pregCJKchars;
  179. var $pregASCIIchars1;
  180. var $pregASCIIchars2;
  181. var $pregASCIIchars3;
  182. var $pregVIETchars;
  183. var $pregVIETPluschars;
  184. var $pregRTLchars;
  185. var $pregHEBchars;
  186. var $pregARABICchars;
  187. var $pregNonARABICchars;
  188. // INDIC
  189. var $pregHIchars;
  190. var $pregBNchars;
  191. var $pregPAchars;
  192. var $pregGUchars;
  193. var $pregORchars;
  194. var $pregTAchars;
  195. var $pregTEchars;
  196. var $pregKNchars;
  197. var $pregMLchars;
  198. var $pregSHchars;
  199. var $pregINDextra;
  200. var $mirrorMargins;
  201. var $default_lineheight_correction;
  202. var $watermarkText;
  203. var $watermarkImage;
  204. var $showWatermarkText;
  205. var $showWatermarkImage;
  206. var $fontsizes;
  207. // Aliases for backward compatability
  208. var $UnvalidatedText; // alias = $watermarkText
  209. var $TopicIsUnvalidated; // alias = $showWatermarkText
  210. var $useOddEven; // alias = $mirrorMargins
  211. var $useSubstitutionsMB; // alias = $useSubstitutions
  212. //////////////////////
  213. // CLASS OBJECTS
  214. //////////////////////
  215. var $grad;
  216. var $bmp;
  217. var $wmf;
  218. var $tocontents;
  219. var $form;
  220. var $directw;
  221. //////////////////////
  222. // INTERNAL VARIABLES
  223. //////////////////////
  224. var $inMeter; // mPDF 5.5.09
  225. var $CJKleading;
  226. var $CJKfollowing;
  227. var $CJKoverflow;
  228. var $textshadow;
  229. var $colsums;
  230. var $spanborder;
  231. var $spanborddet;
  232. var $visibility;
  233. var $useRC128encryption;
  234. var $uniqid;
  235. var $kerning;
  236. var $fixedlSpacing;
  237. var $minwSpacing;
  238. var $lSpacingCSS;
  239. var $wSpacingCSS;
  240. var $listDir;
  241. var $spotColorIDs;
  242. var $SVGcolors;
  243. var $spotColors;
  244. var $defTextColor;
  245. var $defDrawColor;
  246. var $defFillColor;
  247. var $tableBackgrounds;
  248. var $inlineDisplayOff;
  249. var $kt_y00;
  250. var $kt_p00;
  251. var $upperCase;
  252. var $checkSIP;
  253. var $checkSMP;
  254. var $checkCJK;
  255. var $tableCJK;
  256. var $watermarkImgAlpha;
  257. var $PDFAXwarnings;
  258. var $MetadataRoot;
  259. var $OutputIntentRoot;
  260. var $InfoRoot;
  261. var $current_filename;
  262. var $parsers;
  263. var $current_parser;
  264. var $_obj_stack;
  265. var $_don_obj_stack;
  266. var $_current_obj_id;
  267. var $tpls;
  268. var $tpl;
  269. var $tplprefix;
  270. var $_res;
  271. var $pdf_version;
  272. var $noImageFile;
  273. var $lastblockbottommargin;
  274. var $baselineC;
  275. var $subPos;
  276. var $subArrMB;
  277. var $ReqFontStyle;
  278. var $tableClipPath ;
  279. var $forceExactLineheight;
  280. var $listOcc;
  281. var $fullImageHeight;
  282. var $inFixedPosBlock; // Internal flag for position:fixed block
  283. var $fixedPosBlock; // Buffer string for position:fixed block
  284. var $fixedPosBlockDepth;
  285. var $fixedPosBlockBBox;
  286. var $fixedPosBlockSave;
  287. var $maxPosL;
  288. var $maxPosR;
  289. var $loaded;
  290. var $extraFontSubsets;
  291. var $docTemplateStart; // Internal flag for page (page no. -1) that docTemplate starts on
  292. var $time0;
  293. // Classes
  294. var $indic;
  295. var $barcode;
  296. var $SHYpatterns;
  297. var $loadedSHYpatterns;
  298. var $loadedSHYdictionary;
  299. var $SHYdictionary;
  300. var $SHYdictionaryWords;
  301. var $spanbgcolorarray;
  302. var $default_font;
  303. var $list_lineheight;
  304. var $headerbuffer;
  305. var $lastblocklevelchange;
  306. var $nestedtablejustfinished;
  307. var $linebreakjustfinished;
  308. var $cell_border_dominance_L;
  309. var $cell_border_dominance_R;
  310. var $cell_border_dominance_T;
  311. var $cell_border_dominance_B;
  312. var $tbCSSlvl;
  313. var $listCSSlvl;
  314. var $table_keep_together;
  315. var $plainCell_properties;
  316. var $inherit_lineheight;
  317. var $listitemtype;
  318. var $shrin_k1;
  319. var $outerfilled;
  320. var $blockContext;
  321. var $floatDivs;
  322. var $tablecascadeCSS;
  323. var $listcascadeCSS;
  324. var $patterns;
  325. var $pageBackgrounds;
  326. var $bodyBackgroundGradient;
  327. var $bodyBackgroundImage;
  328. var $bodyBackgroundColor;
  329. var $writingHTMLheader; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
  330. var $writingHTMLfooter;
  331. var $autoFontGroups;
  332. var $angle;
  333. var $gradients;
  334. var $kwt_Reference;
  335. var $kwt_BMoutlines;
  336. var $kwt_toc;
  337. var $tbrot_Reference;
  338. var $tbrot_BMoutlines;
  339. var $tbrot_toc;
  340. var $col_Reference;
  341. var $col_BMoutlines;
  342. var $col_toc;
  343. var $currentGraphId;
  344. var $graphs;
  345. var $floatbuffer;
  346. var $floatmargins;
  347. var $bullet;
  348. var $bulletarray;
  349. var $rtlAsArabicFarsi; // DEPRACATED
  350. var $currentLang;
  351. var $default_lang;
  352. var $default_available_fonts;
  353. var $pageTemplate;
  354. var $docTemplate;
  355. var $docTemplateContinue;
  356. var $arabGlyphs;
  357. var $arabHex;
  358. var $persianGlyphs;
  359. var $persianHex;
  360. var $arabVowels;
  361. var $arabPrevLink;
  362. var $arabNextLink;
  363. var $formobjects; // array of Form Objects for WMF
  364. var $InlineProperties;
  365. var $InlineAnnots;
  366. var $ktAnnots;
  367. var $tbrot_Annots;
  368. var $kwt_Annots;
  369. var $columnAnnots;
  370. var $columnForms;
  371. var $PageAnnots;
  372. var $pageDim; // Keep track of page wxh for orientation changes - set in _beginpage, used in _putannots
  373. var $breakpoints;
  374. var $tableLevel;
  375. var $tbctr;
  376. var $innermostTableLevel;
  377. var $saveTableCounter;
  378. var $cellBorderBuffer;
  379. var $saveHTMLFooter_height;
  380. var $saveHTMLFooterE_height;
  381. var $firstPageBoxHeader;
  382. var $firstPageBoxHeaderEven;
  383. var $firstPageBoxFooter;
  384. var $firstPageBoxFooterEven;
  385. var $page_box;
  386. var $show_marks; // crop or cross marks
  387. var $basepathIsLocal;
  388. var $use_kwt;
  389. var $kwt;
  390. var $kwt_height;
  391. var $kwt_y0;
  392. var $kwt_x0;
  393. var $kwt_buffer;
  394. var $kwt_Links;
  395. var $kwt_moved;
  396. var $kwt_saved;
  397. var $PageNumSubstitutions;
  398. var $table_borders_separate;
  399. var $base_table_properties;
  400. var $borderstyles;
  401. var $listjustfinished;
  402. var $blockjustfinished;
  403. var $orig_bMargin;
  404. var $orig_tMargin;
  405. var $orig_lMargin;
  406. var $orig_rMargin;
  407. var $orig_hMargin;
  408. var $orig_fMargin;
  409. var $pageheaders;
  410. var $pagefooters;
  411. var $pageHTMLheaders;
  412. var $pageHTMLfooters;
  413. var $saveHTMLHeader;
  414. var $saveHTMLFooter;
  415. var $HTMLheaderPageLinks;
  416. var $HTMLheaderPageAnnots;
  417. var $HTMLheaderPageForms;
  418. // See config_fonts.php for these next 5 values
  419. var $available_unifonts;
  420. var $sans_fonts;
  421. var $serif_fonts;
  422. var $mono_fonts;
  423. var $defaultSubsFont;
  424. // List of ALL available CJK fonts (incl. styles) (Adobe add-ons) hw removed
  425. var $available_CJK_fonts;
  426. var $cascadeCSS;
  427. var $HTMLHeader;
  428. var $HTMLFooter;
  429. var $HTMLHeaderE;
  430. var $HTMLFooterE;
  431. var $bufferoutput;
  432. var $showdefaultpagenos; // DEPRACATED -left for backward compatability
  433. // CJK fonts
  434. var $Big5_widths;
  435. var $GB_widths;
  436. var $SJIS_widths;
  437. var $UHC_widths;
  438. // SetProtection
  439. var $encrypted; //whether document is protected
  440. var $Uvalue; //U entry in pdf document
  441. var $Ovalue; //O entry in pdf document
  442. var $Pvalue; //P entry in pdf document
  443. var $enc_obj_id; //encryption object id
  444. var $last_rc4_key; //last RC4 key encrypted (cached for optimisation)
  445. var $last_rc4_key_c; //last RC4 computed key
  446. var $encryption_key;
  447. var $padding; //used for encryption
  448. // Bookmark
  449. var $BMoutlines;
  450. var $OutlineRoot;
  451. // INDEX
  452. var $ColActive;
  453. var $Reference;
  454. var $CurrCol;
  455. var $NbCol;
  456. var $y0; //Top ordinate of columns
  457. var $ColL;
  458. var $ColWidth;
  459. var $ColGap;
  460. // COLUMNS
  461. var $ColR;
  462. var $ChangeColumn;
  463. var $columnbuffer;
  464. var $ColDetails;
  465. var $columnLinks;
  466. var $colvAlign;
  467. // Substitutions
  468. var $substitute; // Array of substitution strings e.g. <ttz>112</ttz>
  469. var $entsearch; // Array of HTML entities (>ASCII 127) to substitute
  470. var $entsubstitute; // Array of substitution decimal unicode for the Hi entities
  471. // Default values if no style sheet offered (cf. http://www.w3.org/TR/CSS21/sample.html)
  472. var $defaultCSS;
  473. var $linemaxfontsize;
  474. var $lineheight_correction;
  475. var $lastoptionaltag; // Save current block item which HTML specifies optionsl endtag
  476. var $pageoutput;
  477. var $charset_in;
  478. var $blk;
  479. var $blklvl;
  480. var $ColumnAdjust;
  481. var $ws; // Word spacing
  482. var $HREF;
  483. var $pgwidth;
  484. var $fontlist;
  485. var $oldx;
  486. var $oldy;
  487. var $B;
  488. var $U; //underlining flag
  489. var $S; // SmallCaps flag
  490. var $I;
  491. var $tdbegin;
  492. var $table;
  493. var $cell;
  494. var $col;
  495. var $row;
  496. var $divbegin;
  497. var $divalign;
  498. var $divwidth;
  499. var $divheight;
  500. var $divrevert;
  501. var $spanbgcolor;
  502. var $spanlvl;
  503. var $listlvl;
  504. var $listnum;
  505. var $listtype;
  506. var $listoccur;
  507. var $listlist;
  508. var $listitem;
  509. var $pjustfinished;
  510. var $ignorefollowingspaces;
  511. var $SUP;
  512. var $SUB;
  513. var $SMALL;
  514. var $BIG;
  515. var $toupper;
  516. var $tolower;
  517. var $capitalize;
  518. var $dash_on;
  519. var $dotted_on;
  520. var $strike;
  521. var $CSS;
  522. var $textbuffer;
  523. var $currentfontstyle;
  524. var $currentfontfamily;
  525. var $currentfontsize;
  526. var $colorarray;
  527. var $bgcolorarray;
  528. var $internallink;
  529. var $enabledtags;
  530. var $lineheight;
  531. var $basepath;
  532. var $outlineparam;
  533. var $outline_on;
  534. var $specialcontent;
  535. var $selectoption;
  536. var $objectbuffer;
  537. // Table Rotation
  538. var $table_rotate;
  539. var $tbrot_maxw;
  540. var $tbrot_maxh;
  541. var $tablebuffer;
  542. var $tbrot_align;
  543. var $tbrot_Links;
  544. var $divbuffer; // Buffer used when keeping DIV on one page
  545. var $keep_block_together; // Keep a Block from page-break-inside: avoid
  546. var $ktLinks; // Keep-together Block links array
  547. var $ktBlock; // Keep-together Block array
  548. var $ktForms;
  549. var $ktReference;
  550. var $ktBMoutlines;
  551. var $_kttoc;
  552. var $tbrot_y0;
  553. var $tbrot_x0;
  554. var $tbrot_w;
  555. var $tbrot_h;
  556. var $mb_enc;
  557. var $directionality;
  558. var $extgstates; // Used for alpha channel - Transparency (Watermark)
  559. var $mgl;
  560. var $mgt;
  561. var $mgr;
  562. var $mgb;
  563. var $tts;
  564. var $ttz;
  565. var $tta;
  566. var $headerDetails;
  567. var $footerDetails;
  568. // Best to alter the below variables using default stylesheet above
  569. var $page_break_after_avoid;
  570. var $margin_bottom_collapse;
  571. var $list_indent;
  572. var $list_align;
  573. var $list_margin_bottom;
  574. var $default_font_size; // in pts
  575. var $original_default_font_size; // used to save default sizes when using table default
  576. var $original_default_font;
  577. var $watermark_font;
  578. var $defaultAlign;
  579. // TABLE
  580. var $defaultTableAlign;
  581. var $tablethead;
  582. var $thead_font_weight;
  583. var $thead_font_style;
  584. var $thead_font_smCaps;
  585. var $thead_valign_default;
  586. var $thead_textalign_default;
  587. var $tabletfoot;
  588. var $tfoot_font_weight;
  589. var $tfoot_font_style;
  590. var $tfoot_font_smCaps;
  591. var $tfoot_valign_default;
  592. var $tfoot_textalign_default;
  593. var $trow_text_rotate;
  594. var $cellPaddingL;
  595. var $cellPaddingR;
  596. var $cellPaddingT;
  597. var $cellPaddingB;
  598. var $table_lineheight;
  599. var $table_border_attr_set;
  600. var $table_border_css_set;
  601. var $shrin_k; // factor with which to shrink tables - used internally - do not change
  602. var $shrink_this_table_to_fit; // 0 or false to disable; value (if set) gives maximum factor to reduce fontsize
  603. var $MarginCorrection; // corrects for OddEven Margins
  604. var $margin_footer;
  605. var $margin_header;
  606. var $tabletheadjustfinished;
  607. var $usingCoreFont;
  608. var $charspacing;
  609. //Private properties FROM FPDF
  610. var $DisplayPreferences;
  611. var $outlines;
  612. var $flowingBlockAttr;
  613. var $page; //current page number
  614. var $n; //current object number
  615. var $offsets; //array of object offsets
  616. var $buffer; //buffer holding in-memory PDF
  617. var $pages; //array containing pages
  618. var $state; //current document state
  619. var $compress; //compression flag
  620. var $DefOrientation; //default orientation
  621. var $CurOrientation; //current orientation
  622. var $OrientationChanges; //array indicating orientation changes
  623. var $k; //scale factor (number of points in user unit)
  624. var $fwPt;
  625. var $fhPt; //dimensions of page format in points
  626. var $fw;
  627. var $fh; //dimensions of page format in user unit
  628. var $wPt;
  629. var $hPt; //current dimensions of page in points
  630. var $w;
  631. var $h; //current dimensions of page in user unit
  632. var $lMargin; //left margin
  633. var $tMargin; //top margin
  634. var $rMargin; //right margin
  635. var $bMargin; //page break margin
  636. var $cMarginL; //cell margin Left
  637. var $cMarginR; //cell margin Right
  638. var $cMarginT; //cell margin Left
  639. var $cMarginB; //cell margin Right
  640. var $DeflMargin; //Default left margin
  641. var $DefrMargin; //Default right margin
  642. var $x;
  643. var $y; //current position in user unit for cell positioning
  644. var $lasth; //height of last cell printed
  645. var $LineWidth; //line width in user unit
  646. var $CoreFonts; //array of standard font names
  647. var $fonts; //array of used fonts
  648. var $FontFiles; //array of font files
  649. var $images; //array of used images
  650. var $PageLinks; //array of links in pages
  651. var $links; //array of internal links
  652. var $FontFamily; //current font family
  653. var $FontStyle; //current font style
  654. var $CurrentFont; //current font info
  655. var $FontSizePt; //current font size in points
  656. var $FontSize; //current font size in user unit
  657. var $DrawColor; //commands for drawing color
  658. var $FillColor; //commands for filling color
  659. var $TextColor; //commands for text color
  660. var $ColorFlag; //indicates whether fill and text colors are different
  661. var $autoPageBreak; //automatic page breaking
  662. var $PageBreakTrigger; //threshold used to trigger page breaks
  663. var $InFooter; //flag set when processing footer
  664. var $InHTMLFooter;
  665. var $processingFooter; //flag set when processing footer - added for columns
  666. var $processingHeader; //flag set when processing header - added for columns
  667. var $ZoomMode; //zoom display mode
  668. var $LayoutMode; //layout display mode
  669. var $title; //title
  670. var $subject; //subject
  671. var $author; //author
  672. var $keywords; //keywords
  673. var $creator; //creator
  674. var $aliasNbPg; //alias for total number of pages
  675. var $aliasNbPgGp; //alias for total number of pages in page group
  676. var $aliasNbPgHex;
  677. var $aliasNbPgGpHex;
  678. var $ispre;
  679. var $outerblocktags;
  680. var $innerblocktags;
  681. // **********************************
  682. // **********************************
  683. // **********************************
  684. // **********************************
  685. // **********************************
  686. // **********************************
  687. // **********************************
  688. // **********************************
  689. // **********************************
  690. function mPDF($mode='',$format='A4',$default_font_size=0,$default_font='',$mgl=15,$mgr=15,$mgt=16,$mgb=16,$mgh=9,$mgf=9, $orientation='P') {
  691. /*-- BACKGROUNDS --*/
  692. if (!class_exists('grad', false)) { include(_MPDF_PATH.'classes/grad.php'); }
  693. if (empty($this->grad)) { $this->grad = new grad($this); }
  694. /*-- END BACKGROUNDS --*/
  695. /*-- FORMS --*/
  696. if (!class_exists('form', false)) { include(_MPDF_PATH.'classes/form.php'); }
  697. if (empty($this->form)) { $this->form = new form($this); }
  698. /*-- END FORMS --*/
  699. $this->time0 = microtime(true);
  700. //Some checks
  701. $this->_dochecks();
  702. // Set up Aliases for backwards compatability
  703. $this->UnvalidatedText =& $this->watermarkText;
  704. $this->TopicIsUnvalidated =& $this->showWatermarkText;
  705. $this->AliasNbPg =& $this->aliasNbPg;
  706. $this->AliasNbPgGp =& $this->aliasNbPgGp;
  707. $this->BiDirectional =& $this->biDirectional;
  708. $this->Anchor2Bookmark =& $this->anchor2Bookmark;
  709. $this->KeepColumns =& $this->keepColumns;
  710. $this->useOddEven =& $this->mirrorMargins;
  711. $this->useSubstitutionsMB =& $this->useSubstitutions;
  712. $this->visibility='visible';
  713. //Initialization of properties
  714. $this->spotColors=array();
  715. $this->spotColorIDs = array();
  716. $this->tableBackgrounds = array();
  717. $this->kt_y00 = '';
  718. $this->kt_p00 = '';
  719. $this->iterationCounter = false;
  720. $this->BMPonly = array();
  721. $this->page=0;
  722. $this->n=2;
  723. $this->buffer='';
  724. $this->objectbuffer = array();
  725. $this->pages=array();
  726. $this->OrientationChanges=array();
  727. $this->state=0;
  728. $this->fonts=array();
  729. $this->FontFiles=array();
  730. $this->images=array();
  731. $this->links=array();
  732. $this->InFooter=false;
  733. $this->processingFooter=false;
  734. $this->processingHeader=false;
  735. $this->lasth=0;
  736. $this->FontFamily='';
  737. $this->FontStyle='';
  738. $this->FontSizePt=9;
  739. $this->U=false;
  740. // Small Caps
  741. $this->upperCase = array();
  742. $this->S = false;
  743. $this->smCapsScale = 1;
  744. $this->smCapsStretch = 100;
  745. $this->margBuffer = 0; // mPDF 5.4.04
  746. $this->inMeter = false; // mPDF 5.5.09
  747. $this->defTextColor = $this->TextColor = $this->SetTColor($this->ConvertColor(0),true);
  748. $this->defDrawColor = $this->DrawColor = $this->SetDColor($this->ConvertColor(0),true);
  749. $this->defFillColor = $this->FillColor = $this->SetFColor($this->ConvertColor(255),true);
  750. //SVG color names array
  751. //http://www.w3schools.com/css/css_colornames.asp
  752. $this->SVGcolors = array('antiquewhite'=>'#FAEBD7','aqua'=>'#00FFFF','aquamarine'=>'#7FFFD4','beige'=>'#F5F5DC','black'=>'#000000',
  753. 'blue'=>'#0000FF','brown'=>'#A52A2A','cadetblue'=>'#5F9EA0','chocolate'=>'#D2691E','cornflowerblue'=>'#6495ED','crimson'=>'#DC143C',
  754. 'darkblue'=>'#00008B','darkgoldenrod'=>'#B8860B','darkgreen'=>'#006400','darkmagenta'=>'#8B008B','darkorange'=>'#FF8C00',
  755. 'darkred'=>'#8B0000','darkseagreen'=>'#8FBC8F','darkslategray'=>'#2F4F4F','darkviolet'=>'#9400D3','deepskyblue'=>'#00BFFF',
  756. 'dodgerblue'=>'#1E90FF','firebrick'=>'#B22222','forestgreen'=>'#228B22','fuchsia'=>'#FF00FF','gainsboro'=>'#DCDCDC','gold'=>'#FFD700',
  757. 'gray'=>'#808080','green'=>'#008000','greenyellow'=>'#ADFF2F','hotpink'=>'#FF69B4','indigo'=>'#4B0082','khaki'=>'#F0E68C',
  758. 'lavenderblush'=>'#FFF0F5','lemonchiffon'=>'#FFFACD','lightcoral'=>'#F08080','lightgoldenrodyellow'=>'#FAFAD2','lightgreen'=>'#90EE90',
  759. 'lightsalmon'=>'#FFA07A','lightskyblue'=>'#87CEFA','lightslategray'=>'#778899','lightyellow'=>'#FFFFE0','lime'=>'#00FF00','limegreen'=>'#32CD32',
  760. 'magenta'=>'#FF00FF','maroon'=>'#800000','mediumaquamarine'=>'#66CDAA','mediumorchid'=>'#BA55D3','mediumseagreen'=>'#3CB371',
  761. 'mediumspringgreen'=>'#00FA9A','mediumvioletred'=>'#C71585','midnightblue'=>'#191970','mintcream'=>'#F5FFFA','moccasin'=>'#FFE4B5','navy'=>'#000080',
  762. 'olive'=>'#808000','orange'=>'#FFA500','orchid'=>'#DA70D6','palegreen'=>'#98FB98',
  763. 'palevioletred'=>'#D87093','peachpuff'=>'#FFDAB9','pink'=>'#FFC0CB','powderblue'=>'#B0E0E6','purple'=>'#800080',
  764. 'red'=>'#FF0000','royalblue'=>'#4169E1','salmon'=>'#FA8072','seagreen'=>'#2E8B57','sienna'=>'#A0522D','silver'=>'#C0C0C0','skyblue'=>'#87CEEB',
  765. 'slategray'=>'#708090','springgreen'=>'#00FF7F','steelblue'=>'#4682B4','tan'=>'#D2B48C','teal'=>'#008080','thistle'=>'#D8BFD8','turquoise'=>'#40E0D0',
  766. 'violetred'=>'#D02090','white'=>'#FFFFFF','yellow'=>'#FFFF00',
  767. 'aliceblue'=>'#f0f8ff', 'azure'=>'#f0ffff', 'bisque'=>'#ffe4c4', 'blanchedalmond'=>'#ffebcd', 'blueviolet'=>'#8a2be2', 'burlywood'=>'#deb887',
  768. 'chartreuse'=>'#7fff00', 'coral'=>'#ff7f50', 'cornsilk'=>'#fff8dc', 'cyan'=>'#00ffff', 'darkcyan'=>'#008b8b', 'darkgray'=>'#a9a9a9',
  769. 'darkgrey'=>'#a9a9a9', 'darkkhaki'=>'#bdb76b', 'darkolivegreen'=>'#556b2f', 'darkorchid'=>'#9932cc', 'darksalmon'=>'#e9967a',
  770. 'darkslateblue'=>'#483d8b', 'darkslategrey'=>'#2f4f4f', 'darkturquoise'=>'#00ced1', 'deeppink'=>'#ff1493', 'dimgray'=>'#696969',
  771. 'dimgrey'=>'#696969', 'floralwhite'=>'#fffaf0', 'ghostwhite'=>'#f8f8ff', 'goldenrod'=>'#daa520', 'grey'=>'#808080', 'honeydew'=>'#f0fff0',
  772. 'indianred'=>'#cd5c5c', 'ivory'=>'#fffff0', 'lavender'=>'#e6e6fa', 'lawngreen'=>'#7cfc00', 'lightblue'=>'#add8e6', 'lightcyan'=>'#e0ffff',
  773. 'lightgray'=>'#d3d3d3', 'lightgrey'=>'#d3d3d3', 'lightpink'=>'#ffb6c1', 'lightseagreen'=>'#20b2aa', 'lightslategrey'=>'#778899',
  774. 'lightsteelblue'=>'#b0c4de', 'linen'=>'#faf0e6', 'mediumblue'=>'#0000cd', 'mediumpurple'=>'#9370db', 'mediumslateblue'=>'#7b68ee',
  775. 'mediumturquoise'=>'#48d1cc', 'mistyrose'=>'#ffe4e1', 'navajowhite'=>'#ffdead', 'oldlace'=>'#fdf5e6', 'olivedrab'=>'#6b8e23', 'orangered'=>'#ff4500',
  776. 'palegoldenrod'=>'#eee8aa', 'paleturquoise'=>'#afeeee', 'papayawhip'=>'#ffefd5', 'peru'=>'#cd853f', 'plum'=>'#dda0dd', 'rosybrown'=>'#bc8f8f',
  777. 'saddlebrown'=>'#8b4513', 'sandybrown'=>'#f4a460', 'seashell'=>'#fff5ee', 'slateblue'=>'#6a5acd', 'slategrey'=>'#708090', 'snow'=>'#fffafa',
  778. 'tomato'=>'#ff6347', 'violet'=>'#ee82ee', 'wheat'=>'#f5deb3', 'whitesmoke'=>'#f5f5f5', 'yellowgreen'=>'#9acd32');
  779. $this->ColorFlag=false;
  780. $this->extgstates = array();
  781. $this->mb_enc='windows-1252';
  782. $this->directionality='ltr';
  783. $this->defaultAlign = 'L';
  784. $this->defaultTableAlign = 'L';
  785. $this->fixedPosBlockSave = array();
  786. $this->extraFontSubsets = 0;
  787. $this->SHYpatterns = array();
  788. $this->loadedSHYdictionary = false;
  789. $this->SHYdictionary = array();
  790. $this->SHYdictionaryWords = array();
  791. $this->blockContext = 1;
  792. $this->floatDivs = array();
  793. $this->DisplayPreferences='';
  794. $this->tablecascadeCSS = array();
  795. $this->listcascadeCSS = array();
  796. $this->patterns = array(); // Tiling patterns used for backgrounds
  797. $this->pageBackgrounds = array();
  798. $this->writingHTMLheader = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
  799. $this->writingHTMLfooter = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
  800. $this->gradients = array();
  801. $this->kwt_Reference = array();
  802. $this->kwt_BMoutlines = array();
  803. $this->kwt_toc = array();
  804. $this->tbrot_Reference = array();
  805. $this->tbrot_BMoutlines = array();
  806. $this->tbrot_toc = array();
  807. $this->col_Reference = array();
  808. $this->col_BMoutlines = array();
  809. $this->col_toc = array();
  810. $this->graphs = array();
  811. $this->pgsIns = array();
  812. $this->PDFAXwarnings = array();
  813. $this->inlineDisplayOff = false;
  814. $this->kerning = false;
  815. $this->lSpacingCSS = '';
  816. $this->wSpacingCSS = '';
  817. $this->fixedlSpacing = false;
  818. $this->minwSpacing = 0;
  819. $this->baselineC = 0.35; // Baseline for text
  820. $this->noImageFile = str_replace("\\","/",dirname(__FILE__)) . '/includes/no_image.jpg';
  821. $this->subPos = 0;
  822. $this->forceExactLineheight = false;
  823. $this->listOcc = 0;
  824. $this->normalLineheight = 1.3;
  825. // These are intended as configuration variables, and should be set in config.php - which will override these values;
  826. // set here as failsafe as will cause an error if not defined
  827. $this->incrementFPR1 = 10;
  828. $this->incrementFPR2 = 10;
  829. $this->incrementFPR3 = 10;
  830. $this->incrementFPR4 = 10;
  831. $this->fullImageHeight = false;
  832. $this->floatbuffer = array();
  833. $this->floatmargins = array();
  834. $this->autoFontGroups = 0;
  835. $this->formobjects=array(); // array of Form Objects for WMF
  836. $this->InlineProperties=array();
  837. $this->InlineAnnots=array();
  838. $this->ktAnnots=array();
  839. $this->tbrot_Annots=array();
  840. $this->kwt_Annots=array();
  841. $this->columnAnnots=array();
  842. $this->pageDim=array();
  843. $this->breakpoints = array(); // used in columnbuffer
  844. $this->tableLevel=0;
  845. $this->tbctr=array(); // counter for nested tables at each level
  846. $this->page_box = array();
  847. $this->show_marks = ''; // crop or cross marks
  848. $this->kwt = false;
  849. $this->kwt_height = 0;
  850. $this->kwt_y0 = 0;
  851. $this->kwt_x0 = 0;
  852. $this->kwt_buffer = array();
  853. $this->kwt_Links = array();
  854. $this->kwt_moved = false;
  855. $this->kwt_saved = false;
  856. $this->PageNumSubstitutions = array();
  857. $this->base_table_properties=array();
  858. $this->borderstyles = array('inset','groove','outset','ridge','dotted','dashed','solid','double');
  859. $this->tbrot_align = 'C';
  860. $this->pageheaders=array();
  861. $this->pagefooters=array();
  862. $this->pageHTMLheaders=array();
  863. $this->pageHTMLfooters=array();
  864. $this->HTMLheaderPageLinks = array();
  865. $this->HTMLheaderPageAnnots = array();
  866. $this->ktForms = array();
  867. $this->HTMLheaderPageForms = array();
  868. $this->columnForms = array();
  869. $this->tbrotForms = array();
  870. $this->useRC128encryption = false;
  871. $this->uniqid = '';
  872. $this->cascadeCSS = array();
  873. $this->bufferoutput = false;
  874. $this->encrypted=false; //whether document is protected
  875. $this->BMoutlines=array();
  876. $this->ColActive=0; //Flag indicating that columns are on (the index is being processed)
  877. $this->Reference=array(); //Array containing the references
  878. $this->CurrCol=0; //Current column number
  879. $this->ColL = array(0); // Array of Left pos of columns - absolute - needs Margin correction for Odd-Even
  880. $this->ColR = array(0); // Array of Right pos of columns - absolute pos - needs Margin correction for Odd-Even
  881. $this->ChangeColumn = 0;
  882. $this->columnbuffer = array();
  883. $this->ColDetails = array(); // Keeps track of some column details
  884. $this->columnLinks = array(); // Cross references PageLinks
  885. $this->substitute = array(); // Array of substitution strings e.g. <ttz>112</ttz>
  886. $this->entsearch = array(); // Array of HTML entities (>ASCII 127) to substitute
  887. $this->entsubstitute = array(); // Array of substitution decimal unicode for the Hi entities
  888. $this->lastoptionaltag = '';
  889. $this->charset_in = '';
  890. $this->blk = array();
  891. $this->blklvl = 0;
  892. $this->tts = false;
  893. $this->ttz = false;
  894. $this->tta = false;
  895. $this->ispre=false;
  896. $this->checkSIP = false;
  897. $this->checkSMP = false;
  898. $this->checkCJK = false;
  899. $this->tableCJK = false;
  900. $this->headerDetails=array();
  901. $this->footerDetails=array();
  902. $this->page_break_after_avoid = false;
  903. $this->margin_bottom_collapse = false;
  904. $this->tablethead = 0;
  905. $this->tabletfoot = 0;
  906. $this->table_border_attr_set = 0;
  907. $this->table_border_css_set = 0;
  908. $this->shrin_k = 1.0;
  909. $this->shrink_this_table_to_fit = 0;
  910. $this->MarginCorrection = 0;
  911. $this->tabletheadjustfinished = false;
  912. $this->usingCoreFont = false;
  913. $this->charspacing=0;
  914. $this->outlines=array();
  915. $this->autoPageBreak = true;
  916. require(_MPDF_PATH.'config.php'); // config data
  917. $this->_setPageSize($format, $orientation);
  918. $this->DefOrientation=$orientation;
  919. $this->margin_header=$mgh;
  920. $this->margin_footer=$mgf;
  921. $bmargin=$mgb;
  922. $this->DeflMargin = $mgl;
  923. $this->DefrMargin = $mgr;
  924. $this->orig_tMargin = $mgt;
  925. $this->orig_bMargin = $bmargin;
  926. $this->orig_lMargin = $this->DeflMargin;
  927. $this->orig_rMargin = $this->DefrMargin;
  928. $this->orig_hMargin = $this->margin_header;
  929. $this->orig_fMargin = $this->margin_footer;
  930. if ($this->setAutoTopMargin=='pad') { $mgt += $this->margin_header; }
  931. if ($this->setAutoBottomMargin=='pad') { $mgb += $this->margin_footer; }
  932. $this->SetMargins($this->DeflMargin,$this->DefrMargin,$mgt); // sets l r t margin
  933. //Automatic page break
  934. $this->SetAutoPageBreak($this->autoPageBreak,$bmargin); // sets $this->bMargin & PageBreakTrigger
  935. $this->pgwidth = $this->w - $this->lMargin - $this->rMargin;
  936. //Interior cell margin (1 mm) ? not used
  937. $this->cMarginL = 1;
  938. $this->cMarginR = 1;
  939. //Line width (0.2 mm)
  940. $this->LineWidth=.567/_MPDFK;
  941. //To make the function Footer() work - replaces {nb} with page number
  942. $this->AliasNbPages();
  943. $this->AliasNbPageGroups();
  944. $this->aliasNbPgHex = '{nbHEXmarker}';
  945. $this->aliasNbPgGpHex = '{nbpgHEXmarker}';
  946. //Enable all tags as default
  947. $this->DisableTags();
  948. //Full width display mode
  949. $this->SetDisplayMode(100); // fullwidth? 'fullpage'
  950. //Compression
  951. $this->SetCompression(true);
  952. //Set default display preferences
  953. $this->SetDisplayPreferences('');
  954. // Font data
  955. require(_MPDF_PATH.'config_fonts.php');
  956. // Available fonts
  957. $this->available_unifonts = array();
  958. foreach ($this->fontdata AS $f => $fs) {
  959. if (isset($fs['R']) && $fs['R']) { $this->available_unifonts[] = $f; }
  960. if (isset($fs['B']) && $fs['B']) { $this->available_unifonts[] = $f.'B'; }
  961. if (isset($fs['I']) && $fs['I']) { $this->available_unifonts[] = $f.'I'; }
  962. if (isset($fs['BI']) && $fs['BI']) { $this->available_unifonts[] = $f.'BI'; }
  963. }
  964. $this->default_available_fonts = $this->available_unifonts;
  965. $optcore = false;
  966. $onlyCoreFonts = false;
  967. if (preg_match('/([\-+])aCJK/i',$mode, $m)) {
  968. preg_replace('/([\-+])aCJK/i','',$mode);
  969. if ($m[1]=='+') { $this->useAdobeCJK = true; }
  970. else { $this->useAdobeCJK = false; }
  971. }
  972. if (strlen($mode)==1) {
  973. if ($mode=='s') { $this->percentSubset = 100; $mode = ''; }
  974. else if ($mode=='c') { $onlyCoreFonts = true; $mode = ''; }
  975. }
  976. else if (substr($mode,-2)=='-s') {
  977. $this->percentSubset = 100;
  978. $mode = substr($mode,0,strlen($mode)-2);
  979. }
  980. else if (substr($mode,-2)=='-c') {
  981. $onlyCoreFonts = true;
  982. $mode = substr($mode,0,strlen($mode)-2);
  983. }
  984. else if (substr($mode,-2)=='-x') {
  985. $optcore = true;
  986. $mode = substr($mode,0,strlen($mode)-2);
  987. }
  988. // Autodetect if mode is a language_country string (en-GB or en_GB or en)
  989. if ((strlen($mode) == 5 && $mode != 'UTF-8') || strlen($mode) == 2) {
  990. list ($coreSuitable,$mpdf_pdf_unifonts) = GetLangOpts($mode, $this->useAdobeCJK);
  991. if ($coreSuitable && $optcore) { $onlyCoreFonts = true; }
  992. if ($mpdf_pdf_unifonts) {
  993. $this->RestrictUnicodeFonts($mpdf_pdf_unifonts);
  994. $this->default_available_fonts = $mpdf_pdf_unifonts;
  995. }
  996. $this->currentLang = $mode;
  997. $this->default_lang = $mode;
  998. }
  999. $this->onlyCoreFonts = $onlyCoreFonts;
  1000. if ($this->onlyCoreFonts) {
  1001. $this->setMBencoding('windows-1252'); // sets $this->mb_enc
  1002. }
  1003. else {
  1004. $this->setMBencoding('UTF-8'); // sets $this->mb_enc
  1005. }
  1006. @mb_regex_encoding('UTF-8'); // required only for mb_ereg... and mb_split functions
  1007. // Adobe CJK fonts
  1008. $this->available_CJK_fonts = array('gb','big5','sjis','uhc','gbB','big5B','sjisB','uhcB','gbI','big5I','sjisI','uhcI',
  1009. 'gbBI','big5BI','sjisBI','uhcBI');
  1010. //Standard fonts
  1011. $this->CoreFonts=array('ccourier'=>'Courier','ccourierB'=>'Courier-Bold','ccourierI'=>'Courier-Oblique','ccourierBI'=>'Courier-BoldOblique',
  1012. 'chelvetica'=>'Helvetica','chelveticaB'=>'Helvetica-Bold','chelveticaI'=>'Helvetica-Oblique','chelveticaBI'=>'Helvetica-BoldOblique',
  1013. 'ctimes'=>'Times-Roman','ctimesB'=>'Times-Bold','ctimesI'=>'Times-Italic','ctimesBI'=>'Times-BoldItalic',
  1014. 'csymbol'=>'Symbol','czapfdingbats'=>'ZapfDingbats');
  1015. $this->fontlist=array("ctimes","ccourier","chelvetica","csymbol","czapfdingbats");
  1016. // Substitutions
  1017. $this->setHiEntitySubstitutions();
  1018. if ($this->onlyCoreFonts) {
  1019. $this->useSubstitutions = true;
  1020. $this->SetSubstitutions();
  1021. }
  1022. else { $this->useSubstitutions = false; }
  1023. /*-- HTML-CSS --*/
  1024. if (file_exists(_MPDF_PATH.'mpdf.css')) {
  1025. $css = file_get_contents(_MPDF_PATH.'mpdf.css');
  1026. $css2 = $this->ReadDefaultCSS($css);
  1027. $this->defaultCSS = $this->array_merge_recursive_unique($this->defaultCSS,$css2);
  1028. }
  1029. /*-- END HTML-CSS --*/
  1030. if ($default_font=='') {
  1031. if ($this->onlyCoreFonts) {
  1032. if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->mono_fonts)) { $default_font = 'ccourier'; }
  1033. else if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->sans_fonts)) { $default_font = 'chelvetica'; }
  1034. else { $default_font = 'ctimes'; }
  1035. }
  1036. else { $default_font = $this->defaultCSS['BODY']['FONT-FAMILY']; }
  1037. }
  1038. if (!$default_font_size) {
  1039. $mmsize = $this->ConvertSize($this->defaultCSS['BODY']['FONT-SIZE']);
  1040. $default_font_size = $mmsize*(_MPDFK);
  1041. }
  1042. if ($default_font) { $this->SetDefaultFont($default_font); }
  1043. if ($default_font_size) { $this->SetDefaultFontSize($default_font_size); }
  1044. $this->SetLineHeight(); // lineheight is in mm
  1045. $this->SetFColor($this->ConvertColor(255));
  1046. $this->HREF='';
  1047. $this->oldy=-1;
  1048. $this->B=0;
  1049. $this->U=false;
  1050. $this->S=false;
  1051. $this->I=0;
  1052. $this->listlvl=0;
  1053. $this->listnum=0;
  1054. $this->listtype='';
  1055. $this->listoccur=array();
  1056. $this->listlist=array();
  1057. $this->listitem=array();
  1058. $this->tdbegin=false;
  1059. $this->table=array();
  1060. $this->cell=array();
  1061. $this->col=-1;
  1062. $this->row=-1;
  1063. $this->cellBorderBuffer = array();
  1064. $this->divbegin=false;
  1065. $this->divalign='';
  1066. $this->divwidth=0;
  1067. $this->divheight=0;
  1068. $this->spanbgcolor=false;
  1069. $this->divrevert=false;
  1070. $this->spanborder=false;
  1071. $this->spanborddet=array();
  1072. $this->blockjustfinished=false;
  1073. $this->listjustfinished=false;
  1074. $this->ignorefollowingspaces = true; //in order to eliminate exceeding left-side spaces
  1075. $this->toupper=false;
  1076. $this->tolower=false;
  1077. $this->capitalize=false;
  1078. $this->dash_on=false;
  1079. $this->dotted_on=false;
  1080. $this->SUP=false;
  1081. $this->SUB=false;
  1082. $this->strike=false;
  1083. $this->textshadow='';
  1084. $this->currentfontfamily='';
  1085. $this->currentfontsize='';
  1086. $this->currentfontstyle='';
  1087. $this->colorarray=array();
  1088. $this->spanbgcolorarray=array();
  1089. $this->textbuffer=array();
  1090. $this->CSS=array();
  1091. $this->internallink=array();
  1092. $this->basepath = "";
  1093. $this->SetBasePath('');
  1094. $this->outlineparam = array();
  1095. $this->outline_on = false;
  1096. $this->specialcontent = '';
  1097. $this->selectoption = array();
  1098. /*-- IMPORTS --*/
  1099. $this->tpls = array();
  1100. $this->tpl = 0;
  1101. $this->tplprefix = "/TPL";
  1102. $this->res = array();
  1103. if ($this->enableImports) {
  1104. $this->SetImportUse();
  1105. }
  1106. /*-- END IMPORTS --*/
  1107. if ($this->progressBar) { $this->StartProgressBarOutput($this->progressBar) ; } // *PROGRESS-BAR*
  1108. }
  1109. function _setPageSize($format, &$orientation) {
  1110. //Page format
  1111. if(is_string($format))
  1112. {
  1113. if ($format=='') { $format = 'A4'; }
  1114. $pfo = 'P';
  1115. if(preg_match('/([0-9a-zA-Z]*)-L/i',$format,$m)) { // e.g. A4-L = A4 landscape
  1116. $format=$m[1];
  1117. $pfo='L';
  1118. }
  1119. $format = $this->_getPageFormat($format);
  1120. if (!$format) { $this->Error('Unknown page format: '.$format); }
  1121. else { $orientation = $pfo; }
  1122. $this->fwPt=$format[0];
  1123. $this->fhPt=$format[1];
  1124. }
  1125. else
  1126. {
  1127. if (!$format[0] || !$format[1]) { $this->Error('Invalid page format: '.$format[0].' '.$format[1]); }
  1128. $this->fwPt=$format[0]*_MPDFK;
  1129. $this->fhPt=$format[1]*_MPDFK;
  1130. }
  1131. $this->fw=$this->fwPt/_MPDFK;
  1132. $this->fh=$this->fhPt/_MPDFK;
  1133. //Page orientation
  1134. $orientation=strtolower($orientation);
  1135. if($orientation=='p' or $orientation=='portrait')
  1136. {
  1137. $orientation='P';
  1138. $this->wPt=$this->fwPt;
  1139. $this->hPt=$this->fhPt;
  1140. }
  1141. elseif($orientation=='l' or $orientation=='landscape')
  1142. {
  1143. $orientation='L';
  1144. $this->wPt=$this->fhPt;
  1145. $this->hPt=$this->fwPt;
  1146. }
  1147. else $this->Error('Incorrect orientation: '.$orientation);
  1148. $this->CurOrientation=$orientation;
  1149. $this->w=$this->wPt/_MPDFK;
  1150. $this->h=$this->hPt/_MPDFK;
  1151. }
  1152. function _getPageFormat($format) {
  1153. switch (strtoupper($format)) {
  1154. case '4A0': {$format = array(4767.87,6740.79); break;}
  1155. case '2A0': {$format = array(3370.39,4767.87); break;}
  1156. case 'A0': {$format = array(2383.94,3370.39); break;}
  1157. case 'A1': {$format = array(1683.78,2383.94); break;}
  1158. case 'A2': {$format = array(1190.55,1683.78); break;}
  1159. case 'A3': {$format = array(841.89,1190.55); break;}
  1160. case 'A4': default: {$format = array(595.28,841.89); break;}
  1161. case 'A5': {$format = array(419.53,595.28); break;}
  1162. case 'A6': {$format = array(297.64,419.53); break;}
  1163. case 'A7': {$format = array(209.76,297.64); break;}
  1164. case 'A8': {$format = array(147.40,209.76); break;}
  1165. case 'A9': {$format = array(104.88,147.40); break;}
  1166. case 'A10': {$format = array(73.70,104.88); break;}
  1167. case 'B0': {$format = array(2834.65,4008.19); break;}
  1168. case 'B1': {$format = array(2004.09,2834.65); break;}
  1169. case 'B2': {$format = array(1417.32,2004.09); break;}
  1170. case 'B3': {$format = array(1000.63,1417.32); break;}
  1171. case 'B4': {$format = array(708.66,1000.63); break;}
  1172. case 'B5': {$format = array(498.90,708.66); break;}
  1173. case 'B6': {$format = array(354.33,498.90); break;}
  1174. case 'B7': {$format = array(249.45,354.33); break;}
  1175. case 'B8': {$format = array(175.75,249.45); break;}
  1176. case 'B9': {$format = array(124.72,175.75); break;}
  1177. case 'B10': {$format = array(87.87,124.72); break;}
  1178. case 'C0': {$format = array(2599.37,3676.54); break;}
  1179. case 'C1': {$format = array(1836.85,2599.37); break;}
  1180. case 'C2': {$format = array(1298.27,1836.85); break;}
  1181. case 'C3': {$format = array(918.43,1298.27); break;}
  1182. case 'C4': {$format = array(649.13,918.43); break;}
  1183. case 'C5': {$format = array(459.21,649.13); break;}
  1184. case 'C6': {$format = array(323.15,459.21); break;}
  1185. case 'C7': {$format = array(229.61,323.15); break;}
  1186. case 'C8': {$format = array(161.57,229.61); break;}
  1187. case 'C9': {$format = array(113.39,161.57); break;}
  1188. case 'C10': {$format = array(79.37,113.39); break;}
  1189. case 'RA0': {$format = array(2437.80,3458.27); break;}
  1190. case 'RA1': {$format = array(1729.13,2437.80); break;}
  1191. case 'RA2': {$format = array(1218.90,1729.13); break;}
  1192. case 'RA3': {$format = array(864.57,1218.90); break;}
  1193. case 'RA4': {$format = array(609.45,864.57); break;}
  1194. case 'SRA0': {$format = array(2551.18,3628.35); break;}
  1195. case 'SRA1': {$format = array(1814.17,2551.18); break;}
  1196. case 'SRA2': {$format = array(1275.59,1814.17); break;}
  1197. case 'SRA3': {$format = array(907.09,1275.59); break;}
  1198. case 'SRA4': {$format = array(637.80,907.09); break;}
  1199. case 'LETTER': {$format = array(612.00,792.00); break;}
  1200. case 'LEGAL': {$format = array(612.00,1008.00); break;}
  1201. case 'LEDGER': {$format = array(279.00,432.00); break;}
  1202. case 'TABLOID': {$format = array(279.00,432.00); break;}
  1203. case 'EXECUTIVE': {$format = array(521.86,756.00); break;}
  1204. case 'FOLIO': {$format = array(612.00,936.00); break;}
  1205. case 'B': {$format=array(362.83,561.26 ); break;} // 'B' format paperback size 128x198mm
  1206. case 'A': {$format=array(314.65,504.57 ); break;} // 'A' format paperback size 111x178mm
  1207. case 'DEMY': {$format=array(382.68,612.28 ); break;} // 'Demy' format paperback size 135x216mm
  1208. case 'ROYAL': {$format=array(433.70,663.30 ); break;} // 'Royal' format paperback size 153x234mm
  1209. default: $format = false;
  1210. }
  1211. return $format;
  1212. }
  1213. /*-- PROGRESS-BAR --*/
  1214. function StartProgressBarOutput($mode=1) {
  1215. // must be relative path, or URI (not a file system path)
  1216. if (!defined('_MPDF_URI')) {
  1217. $this->progressBar = false;
  1218. if ($this->debug) { $this->Error("You need to define _MPDF_URI to use the progress bar!"); }
  1219. else return false;
  1220. }
  1221. $this->progressBar = $mode;
  1222. if ($this->progbar_altHTML) {
  1223. echo $this->progbar_altHTML;
  1224. }
  1225. else {
  1226. echo '<html>
  1227. <head>
  1228. <title>mPDF File Progress</title>
  1229. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  1230. <link rel="stylesheet" type="text/css" href="'._MPDF_URI.'progbar.css" />
  1231. </head>
  1232. <body>
  1233. <div class="main">
  1234. <div class="heading">'.$this->progbar_heading.'</div>
  1235. <div class="demo">
  1236. ';
  1237. if ($this->progressBar==2) { echo ' <table width="100%"><tr><td style="width: 50%;">
  1238. <span class="barheading">Writing HTML code</span> <br/>
  1239. <div class="progressBar">
  1240. <div id="element1" class="innerBar">&nbsp;</div>
  1241. </div>
  1242. <span class="code" id="box1"></span>
  1243. </td><td style="width: 50%;">
  1244. <span class="barheading">Autosizing elements</span> <br/>
  1245. <div class="progressBar">
  1246. <div id="element4" class="innerBar">&nbsp;</div>
  1247. </div>
  1248. <span class="code" id="box4"></span>
  1249. <br/><br/>
  1250. <span class="barheading">Writing Tables</span> <br/>
  1251. <div class="progressBar">
  1252. <div id="element7" class="innerBar">&nbsp;</div>
  1253. </div>
  1254. <span class="code" id="box7"></span>
  1255. </td></tr>
  1256. <tr><td><br /><br /></td><td></td></tr>
  1257. <tr><td style="width: 50%;">
  1258. '; }
  1259. echo ' <span class="barheading">Writing PDF file</span> <br/>
  1260. <div class="progressBar">
  1261. <div id="element2" class="innerBar">&nbsp;</div>
  1262. </div>
  1263. <span class="code" id="box2"></span>
  1264. ';
  1265. if ($this->progressBar==2) { echo '
  1266. </td><td style="width: 50%;">
  1267. <span class="barheading">Memory usage</span> <br/>
  1268. <div class="progressBar">
  1269. <div id="element5" class="innerBar">&nbsp;</div>
  1270. </div>
  1271. <span id="box5">0</span> '.ini_get("memory_limit").'<br />
  1272. <br/><br/>
  1273. <span class="barheading">Memory usage (peak)</span> <br/>
  1274. <div class="progressBar">
  1275. <div id="element6" class="innerBar">&nbsp;</div>
  1276. </div>
  1277. <span id="box6">0</span> '.ini_get("memory_limit").'<br />
  1278. </td></tr>
  1279. </table>
  1280. '; }
  1281. echo ' <br/><br/>
  1282. <span id="box3"></span>
  1283. </div>
  1284. ';
  1285. }
  1286. ob_flush();
  1287. flush();
  1288. }
  1289. function UpdateProgressBar($el,$val,$txt='') {
  1290. // $val should be a string - 5 = actual value, +15 = increment
  1291. if ($this->progressBar<2) {
  1292. if ($el>3) { return; }
  1293. else if ($el ==1) { $el = 2; }
  1294. }
  1295. echo '<script type="text/javascript">';
  1296. if ($val) { echo ' document.getElementById(\'element'.$el.'\').style.width=\''.$val.'%\'; '; }
  1297. if ($txt) { echo ' document.getElementById(\'box'.$el.'\').innerHTML=\''.$txt.'\'; '; }
  1298. if ($this->progressBar==2) {
  1299. $m = round(memory_get_usage(true)/1048576);
  1300. $m2 = round(memory_get_peak_usage(true)/1048576);
  1301. $mem = $m * 100 / (ini_get("memory_limit")+0);
  1302. $mem2 = $m2 * 100 / (ini_get("memory_limit")+0);
  1303. echo ' document.getElementById(\'element5\').style.width=\''.$mem.'%\'; ';
  1304. echo ' document.getElementById(\'element6\').style.width=\''.$mem2.'%\'; ';
  1305. echo ' document.getElementById(\'box5\').innerHTML=\''.$m.'MB / \'; ';
  1306. echo ' document.getElementById(\'box6\').innerHTML=\''.$m2.'MB / \'; ';
  1307. }
  1308. echo '</script>'."\n";
  1309. ob_flush();
  1310. flush();
  1311. }
  1312. /*-- END PROGRESS-BAR --*/
  1313. function RestrictUnicodeFonts($res) {
  1314. // $res = array of (Unicode) fonts to restrict to: e.g. norasi|norasiB - language specific
  1315. if (count($res)) { // Leave full list of available fonts if passed blank array
  1316. $this->available_unifonts = $res;
  1317. }
  1318. else { $this->available_unifonts = $this->default_available_fonts; }
  1319. if (count($this->available_unifonts) == 0) { $this->available_unifonts[] = $this->default_available_fonts[0]; }
  1320. $this->available_unifonts = array_values($this->available_unifonts);
  1321. }
  1322. function setMBencoding($enc) {
  1323. if ($this->mb_enc != $enc) {
  1324. $this->mb_enc = $enc;
  1325. mb_internal_encoding($this->mb_enc);
  1326. }
  1327. }
  1328. function SetMargins($left,$right,$top) {
  1329. //Set left, top and right margins
  1330. $this->lMargin=$left;
  1331. $this->rMargin=$right;
  1332. $this->tMargin=$top;
  1333. }
  1334. function ResetMargins() {
  1335. //ReSet left, top margins
  1336. if (($this->forcePortraitHeaders || $this->forcePortraitMargins) && $this->DefOrientation=='P' && $this->CurOrientation=='L') {
  1337. if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN
  1338. $this->tMargin=$this->orig_rMargin;
  1339. $this->bMargin=$this->orig_lMargin;
  1340. }
  1341. else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS
  1342. $this->tMargin=$this->orig_lMargin;
  1343. $this->bMargin=$this->orig_rMargin;
  1344. }
  1345. $this->lMargin=$this->DeflMargin;
  1346. $this->rMargin=$this->DefrMargin;
  1347. $this->MarginCorrection = 0;
  1348. $this->PageBreakTrigger=$this->h-$this->bMargin;
  1349. }
  1350. else if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN
  1351. $this->lMargin=$this->DefrMargin;
  1352. $this->rMargin=$this->DeflMargin;
  1353. $this->MarginCorrection = $this->DefrMargin-$this->DeflMargin;
  1354. }
  1355. else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS
  1356. $this->lMargin=$this->DeflMargin;
  1357. $this->rMargin=$this->DefrMargin;
  1358. if ($this->mirrorMargins) { $this->MarginCorrection = $this->DeflMargin-$this->DefrMargin; }
  1359. }
  1360. $this->x=$this->lMargin;
  1361. }
  1362. function SetLeftMargin($margin) {
  1363. //Set left margin
  1364. $this->lMargin=$margin;
  1365. if($this->page>0 and $this->x<$margin) $this->x=$margin;
  1366. }
  1367. function SetTopMargin($margin) {
  1368. //Set top margin
  1369. $this->tMargin=$margin;
  1370. }
  1371. function SetRightMargin($margin) {
  1372. //Set right margin
  1373. $this->rMargin=$margin;
  1374. }
  1375. function SetAutoPageBreak($auto,$margin=0) {
  1376. //Set auto page break mode and triggering margin
  1377. $this->autoPageBreak=$auto;
  1378. $this->bMargin=$margin;
  1379. $this->PageBreakTrigger=$this->h-$margin;
  1380. }
  1381. function SetDisplayMode($zoom,$layout='continuous') {
  1382. //Set display mode in viewer
  1383. if($zoom=='fullpage' or $zoom=='fullwidth' or $zoom=='real' or $zoom=='default' or !is_string($zoom))
  1384. $this->ZoomMode=$zoom;
  1385. else
  1386. $this->Error('Incorrect zoom display mode: '.$zoom);
  1387. if($layout=='single' or $layout=='continuous' or $layout=='two' or $layout=='twoleft' or $layout=='tworight' or $layout=='default')
  1388. $this->LayoutMode=$layout;
  1389. else
  1390. $this->Error('Incorrect layout display mode: '.$layout);
  1391. }
  1392. function SetCompression($compress) {
  1393. //Set page compression
  1394. if(function_exists('gzcompress')) $this->compress=$compress;
  1395. else $this->compress=false;
  1396. }
  1397. function SetTitle($title) {
  1398. //Title of document // Arrives as UTF-8
  1399. $this->title = $title;
  1400. }
  1401. function SetSubject($subject) {
  1402. //Subject of document
  1403. $this->subject= $subject;
  1404. }
  1405. function SetAutho

Large files files are truncated, but you can click here to view the full file