PageRenderTime 62ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/abu-saleh77/termsCondition/vendor/mpdf/mpdf/mpdf.php

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