PageRenderTime 83ms CodeModel.GetById 29ms RepoModel.GetById 1ms app.codeStats 3ms

/application/libraries/mpdf/mpdf5.2.php

https://bitbucket.org/mannysoft/erpts
PHP | 13223 lines | 10610 code | 1263 blank | 1350 comment | 4247 complexity | 95f4a7216122481a88d6f233a41c36f6 MD5 | raw file
Possible License(s): GPL-2.0

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

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