PageRenderTime 101ms CodeModel.GetById 50ms RepoModel.GetById 0ms app.codeStats 3ms

/php/codeigniter/pdf/application/third_party/mpdf/mpdf.php

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

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