/applications/pm/helpers/mpdf/mpdf.php
PHP | 1691 lines | 1362 code | 233 blank | 96 comment | 102 complexity | 865bd907e000db6f8764f3d1b3f65a04 MD5 | raw file
- <?php
- // ******************************************************************************
- // Software: mPDF, Unicode-HTML Free PDF generator *
- // Version: 5.3 based on *
- // FPDF by Olivier PLATHEY *
- // HTML2FPDF by Renato Coelho *
- // Date: 2011-07-21 *
- // Author: Ian Back <ianb@bpm1.com> *
- // License: GPL *
- // *
- // Changes: See changelog.txt *
- // ******************************************************************************
- define('mPDF_VERSION','5.3');
- define('AUTOFONT_CJK',1);
- define('AUTOFONT_THAIVIET',2);
- define('AUTOFONT_RTL',4);
- define('AUTOFONT_INDIC',8);
- define('AUTOFONT_ALL',15);
- define('_BORDER_ALL',15);
- define('_BORDER_TOP',8);
- define('_BORDER_RIGHT',4);
- define('_BORDER_BOTTOM',2);
- define('_BORDER_LEFT',1);
- if (!defined('_MPDF_PATH')) define('_MPDF_PATH', dirname(preg_replace('/\\\\/','/',__FILE__)) . '/');
- if (!defined('_MPDF_URI')) define('_MPDF_URI',_MPDF_PATH);
- require_once(_MPDF_PATH.'includes/functions.php');
- require_once(_MPDF_PATH.'config_cp.php');
- if (!defined('_JPGRAPH_PATH')) define("_JPGRAPH_PATH", _MPDF_PATH.'jpgraph/');
- if (!defined('_MPDF_TEMP_PATH')) define("_MPDF_TEMP_PATH", _MPDF_PATH.'tmp/');
- if (!defined('_MPDF_TTFONTPATH')) { define('_MPDF_TTFONTPATH',_MPDF_PATH.'ttfonts/'); }
- if (!defined('_MPDF_TTFONTDATAPATH')) { define('_MPDF_TTFONTDATAPATH',_MPDF_PATH.'ttfontdata/'); }
- $errorlevel=error_reporting();
- $errorlevel=error_reporting($errorlevel & ~E_NOTICE);
- //error_reporting(E_ALL);
- if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get"))
- @date_default_timezone_set(@date_default_timezone_get());
- if (!function_exists("mb_strlen")) { die("Error - mPDF requires mb_string functions. Ensure that PHP is compiled with php_mbstring.dll enabled."); }
- if (!defined('PHP_VERSION_ID')) {
- $version = explode('.', PHP_VERSION);
- define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
- }
- class mPDF
- {
- ///////////////////////////////
- // EXTERNAL (PUBLIC) VARIABLES
- // Define these in config.php
- ///////////////////////////////
- var $repackageTTF; // mPDF 5.2
- var $allowCJKorphans;
- var $allowCJKoverflow;
- var $CJKleading;
- var $CJKfollowing;
- var $CJKoverflow;
- var $useKerning;
- var $restrictColorSpace;
- var $bleedMargin;
- var $crossMarkMargin;
- var $cropMarkMargin;
- var $cropMarkLength;
- var $nonPrintMargin;
- var $PDFX;
- var $PDFXauto;
- var $PDFA;
- var $PDFAauto;
- var $ICCProfile;
- var $printers_info;
- var $iterationCounter;
- var $smCapsScale;
- var $smCapsStretch;
- var $backupSubsFont;
- var $backupSIPFont;
- var $debugfonts;
- var $useAdobeCJK;
- var $percentSubset;
- var $maxTTFFilesize;
- var $BMPonly;
- var $tableMinSizePriority;
- var $dpi;
- var $watermarkImgAlphaBlend;
- var $watermarkImgBehind;
- var $justifyB4br;
- var $packTableData;
- var $pgsIns;
- var $simpleTables;
- var $enableImports;
- var $debug;
- var $showStats;
- var $setAutoTopMargin;
- var $setAutoBottomMargin;
- var $autoMarginPadding;
- var $collapseBlockMargins;
- var $falseBoldWeight;
- var $normalLineheight;
- var $progressBar;
- var $incrementFPR1;
- var $incrementFPR2;
- var $incrementFPR3;
- var $incrementFPR4;
- var $hyphenate;
- var $hyphenateTables;
- var $SHYlang;
- var $SHYleftmin;
- var $SHYrightmin;
- var $SHYcharmin;
- var $SHYcharmax;
- var $SHYlanguages;
- // PageNumber Conditional Text
- var $pagenumPrefix;
- var $pagenumSuffix;
- var $nbpgPrefix;
- var $nbpgSuffix;
- var $showImageErrors;
- var $allow_output_buffering;
- var $autoPadding;
- var $useGraphs;
- var $autoFontGroupSize;
- var $tabSpaces;
- var $useLang;
- var $restoreBlockPagebreaks;
- var $watermarkTextAlpha;
- var $watermarkImageAlpha;
- var $watermark_size;
- var $watermark_pos;
- var $annotSize;
- var $annotMargin;
- var $annotOpacity;
- var $title2annots;
- var $keepColumns;
- var $keep_table_proportions;
- var $ignore_table_widths;
- var $ignore_table_percents;
- var $list_align_style;
- var $list_number_suffix;
- var $useSubstitutions;
- var $CSSselectMedia;
- // $disablePrintCSS depracated
- var $forcePortraitHeaders;
- var $forcePortraitMargins;
- var $displayDefaultOrientation;
- var $ignore_invalid_utf8;
- var $allowedCSStags;
- var $onlyCoreFonts;
- var $allow_charset_conversion;
- var $jSWord;
- var $jSmaxChar;
- var $jSmaxCharLast;
- var $jSmaxWordLast;
- var $orphansAllowed;
- var $max_colH_correction;
- var $table_error_report;
- var $table_error_report_param;
- var $biDirectional;
- var $text_input_as_HTML;
- var $anchor2Bookmark;
- var $list_indent_first_level;
- var $shrink_tables_to_fit;
- var $allow_html_optional_endtags;
- var $img_dpi;
- var $defaultheaderfontsize;
- var $defaultheaderfontstyle;
- var $defaultheaderline;
- var $defaultfooterfontsize;
- var $defaultfooterfontstyle;
- var $defaultfooterline;
- var $header_line_spacing;
- var $footer_line_spacing;
- var $textarea_lineheight;
- var $pregRTLchars;
- var $pregUHCchars;
- var $pregSJISchars;
- var $pregCJKchars;
- var $pregASCIIchars1;
- var $pregASCIIchars2;
- var $pregASCIIchars3;
- var $pregVIETchars;
- var $pregVIETPluschars;
- var $pregHEBchars;
- var $pregARABICchars;
- var $pregNonARABICchars;
- // INDIC
- var $pregHIchars;
- var $pregBNchars;
- var $pregPAchars;
- var $pregGUchars;
- var $pregORchars;
- var $pregTAchars;
- var $pregTEchars;
- var $pregKNchars;
- var $pregMLchars;
- var $pregSHchars;
- var $pregINDextra;
- var $mirrorMargins;
- var $default_lineheight_correction;
- var $watermarkText;
- var $watermarkImage;
- var $showWatermarkText;
- var $showWatermarkImage;
- var $fontsizes;
- // Aliases for backward compatability
- var $UnvalidatedText; // alias = $watermarkText
- var $TopicIsUnvalidated; // alias = $showWatermarkText
- var $useOddEven; // alias = $mirrorMargins
- var $useSubstitutionsMB; // alias = $useSubstitutions
- // mPDF 5.3 Active Forms
- var $formSubmitNoValueFields;
- var $useActiveForms;
- var $formExportType;
- var $formSelectDefaultOption;
- var $formUseZapD;
- /* Form Styles */
- var $form_border_color;
- var $form_background_color;
- var $form_border_width;
- var $form_border_style;
- var $form_button_border_color;
- var $form_button_background_color;
- var $form_button_border_width;
- var $form_button_border_style;
- var $form_radio_color;
- var $form_radio_background_color;
- //////////////////////
- // INTERNAL VARIABLES
- //////////////////////
- // mPDF 5.2.09
- var $useRC128encryption;
- var $uniqid;
- // mPDF 5.2.03
- // Active forms
- var $formMethod;
- var $formAction;
- var $form_fonts;
- var $form_radio_groups;
- var $pdf_acro_array;
- var $form_checkboxes;
- var $forms;
- var $formn;
- var $pdf_array_co; // mPDF 5.2.10
- var $array_form_button_js;
- var $array_form_choice_js;
- var $array_form_text_js;
- /* Button Text */
- var $form_button_text;
- var $form_button_text_over;
- var $form_button_text_click;
- var $form_button_icon;
- var $kerning;
- var $fixedlSpacing;
- var $minwSpacing;
- var $lSpacingCSS;
- var $wSpacingCSS;
- var $listDir;
- var $spotColorIDs;
- var $SVGcolors;
- var $spotColors;
- var $defTextColor;
- var $defDrawColor;
- var $defFillColor;
- var $tableBackgrounds;
- var $inlineDisplayOff;
- var $kt_y00;
- var $kt_p00;
- var $upperCase;
- var $checkSIP;
- var $checkSMP;
- var $checkCJK;
- var $tableCJK;
- var $watermarkImgAlpha;
- var $PDFAXwarnings;
- var $MetadataRoot;
- var $OutputIntentRoot;
- var $InfoRoot;
- var $current_filename;
- var $parsers;
- var $current_parser;
- var $_obj_stack;
- var $_don_obj_stack;
- var $_current_obj_id;
- var $tpls;
- var $tpl;
- var $tplprefix;
- var $_res;
- var $pdf_version;
- var $noImageFile;
- var $lastblockbottommargin;
- var $baselineC;
- var $subPos;
- var $subArrMB;
- var $ReqFontStyle;
- var $tableClipPath ;
- var $forceExactLineheight;
- var $listOcc;
- var $fullImageHeight;
- var $inFixedPosBlock; // Internal flag for position:fixed block
- var $fixedPosBlock; // Buffer string for position:fixed block
- var $fixedPosBlockDepth;
- var $fixedPosBlockBBox;
- var $fixedPosBlockSave;
- var $maxPosL;
- var $maxPosR;
- var $loaded;
- var $extraFontSubsets;
- var $docTemplateStart; // Internal flag for page (page no. -1) that docTemplate starts on
- var $time0;
- // Classes
- var $indic;
- var $barcode;
- var $SHYpatterns;
- var $loadedSHYpatterns;
- var $loadedSHYdictionary;
- var $SHYdictionary;
- var $SHYdictionaryWords;
- var $spanbgcolorarray;
- var $default_font;
- var $list_lineheight;
- var $headerbuffer;
- var $lastblocklevelchange;
- var $nestedtablejustfinished;
- var $linebreakjustfinished;
- var $cell_border_dominance_L;
- var $cell_border_dominance_R;
- var $cell_border_dominance_T;
- var $cell_border_dominance_B;
- var $tbCSSlvl;
- var $listCSSlvl;
- var $table_keep_together;
- var $plainCell_properties;
- var $inherit_lineheight;
- var $listitemtype;
- var $shrin_k1;
- var $outerfilled;
- var $blockContext;
- var $floatDivs;
- var $tablecascadeCSS;
- var $listcascadeCSS;
- var $patterns;
- var $pageBackgrounds;
- var $bodyBackgroundGradient;
- var $bodyBackgroundImage;
- var $bodyBackgroundColor;
- var $writingHTMLheader; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
- var $writingHTMLfooter;
- var $autoFontGroups;
- var $angle;
- var $gradients;
- var $kwt_Reference;
- var $kwt_BMoutlines;
- var $kwt_toc;
- var $tbrot_Reference;
- var $tbrot_BMoutlines;
- var $tbrot_toc;
- var $col_Reference;
- var $col_BMoutlines;
- var $col_toc;
- var $currentGraphId;
- var $graphs;
- var $floatbuffer;
- var $floatmargins;
- var $bullet;
- var $bulletarray;
- var $rtlAsArabicFarsi; // DEPRACATED
- var $currentLang;
- var $default_lang;
- var $default_available_fonts;
- var $pageTemplate;
- var $docTemplate;
- var $docTemplateContinue;
- var $arabGlyphs;
- var $arabHex;
- var $persianGlyphs;
- var $persianHex;
- var $arabVowels;
- var $arabPrevLink;
- var $arabNextLink;
- var $formobjects; // array of Form Objects for WMF
- var $gdiObjectArray; // array of GDI objects for WMF
- var $InlineProperties; // Should have done this a long time ago
- var $InlineAnnots;
- var $ktAnnots;
- var $tbrot_Annots;
- var $kwt_Annots;
- var $columnAnnots;
- var $columnForms; // mPDF 5.2.03
- var $PageAnnots;
- var $pageDim; // Keep track of page wxh for orientation changes - set in _beginpage, used in _putannots
- var $breakpoints;
- var $tableLevel;
- var $tbctr;
- var $innermostTableLevel;
- var $saveTableCounter;
- var $cellBorderBuffer;
- var $saveHTMLFooter_height;
- var $saveHTMLFooterE_height;
- var $firstPageBoxHeader;
- var $firstPageBoxHeaderEven;
- var $firstPageBoxFooter;
- var $firstPageBoxFooterEven;
- var $page_box;
- var $show_marks; // crop or cross marks
- var $basepathIsLocal;
- var $use_kwt;
- var $kwt;
- var $kwt_height;
- var $kwt_y0;
- var $kwt_x0;
- var $kwt_buffer;
- var $kwt_Links;
- var $kwt_moved;
- var $kwt_saved;
- var $PageNumSubstitutions;
-
- var $table_borders_separate;
- var $base_table_properties;
- var $borderstyles;
- // doesn't include none or hidden
- var $listjustfinished;
- var $blockjustfinished;
- var $orig_bMargin;
- var $orig_tMargin;
- var $orig_lMargin;
- var $orig_rMargin;
- var $orig_hMargin;
- var $orig_fMargin;
- var $pageheaders;
- var $pagefooters;
- var $pageHTMLheaders;
- var $pageHTMLfooters;
- var $saveHTMLHeader;
- var $saveHTMLFooter;
- var $HTMLheaderPageLinks;
- var $HTMLheaderPageAnnots;
- var $HTMLheaderPageForms; // mPDF 5.2.03
- // See config_fonts.php for these next 5 values
- var $available_unifonts;
- var $sans_fonts;
- var $serif_fonts;
- var $mono_fonts;
- var $defaultSubsFont;
- // List of ALL available CJK fonts (incl. styles) (Adobe add-ons) hw removed
- var $available_CJK_fonts;
- var $cascadeCSS;
- var $HTMLHeader;
- var $HTMLFooter;
- var $HTMLHeaderE;
- var $HTMLFooterE;
- var $bufferoutput;
- var $showdefaultpagenos; // DEPRACATED -left for backward compatability
- var $chrs;
- var $ords;
- // CJK fonts
- var $Big5_widths;
- var $GB_widths;
- var $SJIS_widths;
- var $UHC_widths;
- // SetProtection
- var $encrypted; //whether document is protected
- var $Uvalue; //U entry in pdf document
- var $Ovalue; //O entry in pdf document
- var $Pvalue; //P entry in pdf document
- var $enc_obj_id; //encryption object id
- var $last_rc4_key; //last RC4 key encrypted (cached for optimisation)
- var $last_rc4_key_c; //last RC4 computed key
- var $encryption_key;
- var $padding; //used for encryption
- // Bookmark
- var $BMoutlines;
- var $OutlineRoot;
- // TOC
- var $_toc;
- var $TOCmark;
- var $TOCfont;
- var $TOCfontsize;
- var $TOCindent;
- var $TOCheader;
- var $TOCfooter;
- var $TOCpreHTML;
- var $TOCpostHTML;
- var $TOCbookmarkText;
- var $TOCusePaging;
- var $TOCuseLinking;
- var $TOCorientation;
- var $TOC_margin_left;
- var $TOC_margin_right;
- var $TOC_margin_top;
- var $TOC_margin_bottom;
- var $TOC_margin_header;
- var $TOC_margin_footer;
- var $TOC_odd_header_name;
- var $TOC_even_header_name;
- var $TOC_odd_footer_name;
- var $TOC_even_footer_name;
- var $TOC_odd_header_value;
- var $TOC_even_header_value;
- var $TOC_odd_footer_value;
- var $TOC_even_footer_value;
- var $TOC_start;
- var $TOC_end;
- var $TOC_npages;
- var $m_TOC;
- // INDEX
- var $ColActive;
- var $ChangePage; //Flag indicating that a page break has occurred
- var $Reference;
- var $CurrCol;
- var $NbCol;
- var $y0; //Top ordinate of columns
- var $ColL;
- var $ColWidth;
- var $ColGap;
- // COLUMNS
- var $ColR;
- var $ChangeColumn;
- var $columnbuffer;
- var $ColDetails;
- var $columnLinks;
- var $colvAlign;
- // Substitutions
- var $substitute; // Array of substitution strings e.g. <ttz>112</ttz>
- var $entsearch; // Array of HTML entities (>ASCII 127) to substitute
- var $entsubstitute; // Array of substitution decimal unicode for the Hi entities
- // Default values if no style sheet offered (cf. http://www.w3.org/TR/CSS21/sample.html)
- var $defaultCSS;
- var $form_element_spacing;
- var $linemaxfontsize;
- var $lineheight_correction;
- var $lastoptionaltag; // Save current block item which HTML specifies optionsl endtag
- var $pageoutput;
- var $charset_in;
- var $blk;
- var $blklvl;
- var $ColumnAdjust;
- var $ws; // Word spacing
- var $HREF;
- var $pgwidth;
- var $fontlist;
- var $issetfont;
- var $issetcolor;
- var $oldx;
- var $oldy;
- var $B;
- var $U; //underlining flag
- var $S; // SmallCaps flag
- var $I;
- var $tdbegin;
- var $table;
- var $cell;
- var $col;
- var $row;
- var $divbegin;
- var $divalign;
- var $divwidth;
- var $divheight;
- var $divrevert;
- var $spanbgcolor;
- var $spanlvl;
- var $listlvl;
- var $listnum;
- var $listtype;
- var $listoccur;
- var $listlist;
- var $listitem;
- var $pjustfinished;
- var $ignorefollowingspaces;
- var $SUP;
- var $SUB;
- var $SMALL;
- var $BIG;
- var $toupper;
- var $tolower;
- var $capitalize;
- var $dash_on;
- var $dotted_on;
- var $strike;
- var $CSS;
- var $textbuffer;
- var $currentfontstyle;
- var $currentfontfamily;
- var $currentfontsize;
- var $colorarray;
- var $bgcolorarray;
- var $internallink;
- var $enabledtags;
- var $lineheight;
- var $basepath;
- var $outlineparam;
- var $outline_on;
- var $specialcontent;
- var $selectoption;
- var $usecss;
- var $usepre;
- var $usetableheader;
- var $tableheadernrows;
- var $tablefooternrows;
- var $objectbuffer;
- // Table Rotation
- var $table_rotate;
- var $tbrot_maxw;
- var $tbrot_maxh;
- var $tablebuffer;
- var $tbrot_align;
- var $tbrot_Links;
- var $divbuffer; // Buffer used when keeping DIV on one page
- var $keep_block_together; // Keep a Block from page-break-inside: avoid
- var $ktLinks; // Keep-together Block links array
- var $ktBlock; // Keep-together Block array
- var $ktForms; // mPDF 5.2.03
- var $ktReference;
- var $ktBMoutlines;
- var $_kttoc;
- var $tbrot_y0;
- var $tbrot_x0;
- var $tbrot_w;
- var $tbrot_h;
- var $mb_enc;
- var $directionality;
- var $extgstates; // Used for alpha channel - Transparency (Watermark)
- var $mgl;
- var $mgt;
- var $mgr;
- var $mgb;
- var $tts;
- var $ttz;
- var $tta;
- var $headerDetails;
- var $footerDetails;
- // Best to alter the below variables using default stylesheet above
- var $div_margin_bottom;
- var $div_bottom_border;
- var $p_margin_bottom;
- var $p_bottom_border;
- var $page_break_after_avoid;
- var $margin_bottom_collapse;
- var $img_margin_top; // default is set at top of fn.openTag 'IMG'
- var $img_margin_bottom;
- var $list_indent;
- var $list_align;
- var $list_margin_bottom;
- var $default_font_size; // in pts
- var $original_default_font_size; // used to save default sizes when using table default
- var $original_default_font;
- var $watermark_font;
- var $defaultAlign;
- // TABLE
- var $defaultTableAlign;
- var $tablethead;
- var $thead_font_weight;
- var $thead_font_style;
- var $thead_font_smCaps;
- var $thead_valign_default;
- var $thead_textalign_default;
- var $tabletfoot;
- var $tfoot_font_weight;
- var $tfoot_font_style;
- var $tfoot_font_smCaps;
- var $tfoot_valign_default;
- var $tfoot_textalign_default;
- var $trow_text_rotate;
- var $cellPaddingL;
- var $cellPaddingR;
- var $cellPaddingT;
- var $cellPaddingB;
- var $table_lineheight;
- var $table_border_attr_set;
- var $table_border_css_set;
- var $shrin_k; // factor with which to shrink tables - used internally - do not change
- var $shrink_this_table_to_fit; // 0 or false to disable; value (if set) gives maximum factor to reduce fontsize
- var $MarginCorrection; // corrects for OddEven Margins
- var $margin_footer;
- var $margin_header;
- var $tabletheadjustfinished;
- var $usingCoreFont;
- var $charspacing;
- //Private properties FROM FPDF
- var $DisplayPreferences;
- var $outlines;
- var $flowingBlockAttr;
- var $page; //current page number
- var $n; //current object number
- var $offsets; //array of object offsets
- var $buffer; //buffer holding in-memory PDF
- var $pages; //array containing pages
- var $state; //current document state
- var $compress; //compression flag
- var $DefOrientation; //default orientation
- var $CurOrientation; //current orientation
- var $OrientationChanges; //array indicating orientation changes
- var $k; //scale factor (number of points in user unit)
- var $fwPt;
- var $fhPt; //dimensions of page format in points
- var $fw;
- var $fh; //dimensions of page format in user unit
- var $wPt;
- var $hPt; //current dimensions of page in points
- var $w;
- var $h; //current dimensions of page in user unit
- var $lMargin; //left margin
- var $tMargin; //top margin
- var $rMargin; //right margin
- var $bMargin; //page break margin
- var $cMarginL; //cell margin Left
- var $cMarginR; //cell margin Right
- var $cMarginT; //cell margin Left
- var $cMarginB; //cell margin Right
- var $DeflMargin; //Default left margin
- var $DefrMargin; //Default right margin
- var $x;
- var $y; //current position in user unit for cell positioning
- var $lasth; //height of last cell printed
- var $LineWidth; //line width in user unit
- var $CoreFonts; //array of standard font names
- var $fonts; //array of used fonts
- var $FontFiles; //array of font files
- var $diffs; //array of encoding differences
- var $images; //array of used images
- var $PageLinks; //array of links in pages
- var $links; //array of internal links
- var $FontFamily; //current font family
- var $FontStyle; //current font style
- var $CurrentFont; //current font info
- var $FontSizePt; //current font size in points
- var $FontSize; //current font size in user unit
- var $DrawColor; //commands for drawing color
- var $FillColor; //commands for filling color
- var $TextColor; //commands for text color
- var $ColorFlag; //indicates whether fill and text colors are different
- var $autoPageBreak; //automatic page breaking
- var $PageBreakTrigger; //threshold used to trigger page breaks
- var $InFooter; //flag set when processing footer
- var $InHTMLFooter;
- var $processingFooter; //flag set when processing footer - added for columns
- var $processingHeader; //flag set when processing header - added for columns
- var $ZoomMode; //zoom display mode
- var $LayoutMode; //layout display mode
- var $title; //title
- var $subject; //subject
- var $author; //author
- var $keywords; //keywords
- var $creator; //creator
- var $aliasNbPg; //alias for total number of pages
- var $aliasNbPgGp; //alias for total number of pages in page group
- var $aliasNbPgHex;
- var $aliasNbPgGpHex;
- var $ispre;
- var $outerblocktags;
- var $innerblocktags;
- // NOT Currently used
- var $inlinetags;
- var $listtags;
- var $tabletags;
- var $formtags;
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- // **********************************
- 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') {
- $this->time0 = microtime(true);
- $unit='mm';
- //Some checks
- $this->_dochecks();
- // Set up Aliases for backwards compatability
- $this->UnvalidatedText =& $this->watermarkText;
- $this->TopicIsUnvalidated =& $this->showWatermarkText;
- $this->AliasNbPg =& $this->aliasNbPg;
- $this->AliasNbPgGp =& $this->aliasNbPgGp;
- $this->BiDirectional =& $this->biDirectional;
- $this->Anchor2Bookmark =& $this->anchor2Bookmark;
- $this->KeepColumns =& $this->keepColumns;
- $this->useOddEven =& $this->mirrorMargins;
- $this->useSubstitutionsMB =& $this->useSubstitutions;
- //Initialization of properties
- $this->spotColors=array();
- $this->spotColorIDs = array();
- $this->tableBackgrounds = array();
- $this->kt_y00 = '';
- $this->kt_p00 = '';
- $this->iterationCounter = false;
- $this->BMPonly = array();
- $this->page=0;
- $this->n=2;
- $this->buffer='';
- $this->objectbuffer = array();
- $this->pages=array();
- $this->OrientationChanges=array();
- $this->state=0;
- $this->fonts=array();
- $this->FontFiles=array();
- $this->diffs=array();
- $this->images=array();
- $this->links=array();
- $this->InFooter=false;
- $this->processingFooter=false;
- $this->processingHeader=false;
- $this->lasth=0;
- $this->FontFamily='';
- $this->FontStyle='';
- $this->FontSizePt=9;
- $this->U=false;
- // Small Caps
- $this->upperCase = array();
- @include(_MPDF_PATH.'includes/upperCase.php');
- $this->S = false;
- $this->smCapsScale = 1;
- $this->smCapsStretch = 100;
- $this->defTextColor = $this->TextColor = $this->SetTColor($this->ConvertColor(0),true);
- $this->defDrawColor = $this->DrawColor = $this->SetDColor($this->ConvertColor(0),true);
- $this->defFillColor = $this->FillColor = $this->SetFColor($this->ConvertColor(255),true);
- //SVG color names array
- //http://www.w3schools.com/css/css_colornames.asp
- $this->SVGcolors = array('antiquewhite'=>'#FAEBD7','aqua'=>'#00FFFF','aquamarine'=>'#7FFFD4','beige'=>'#F5F5DC','black'=>'#000000',
- 'blue'=>'#0000FF','brown'=>'#A52A2A','cadetblue'=>'#5F9EA0','chocolate'=>'#D2691E','cornflowerblue'=>'#6495ED','crimson'=>'#DC143C',
- 'darkblue'=>'#00008B','darkgoldenrod'=>'#B8860B','darkgreen'=>'#006400','darkmagenta'=>'#8B008B','darkorange'=>'#FF8C00',
- 'darkred'=>'#8B0000','darkseagreen'=>'#8FBC8F','darkslategray'=>'#2F4F4F','darkviolet'=>'#9400D3','deepskyblue'=>'#00BFFF',
- 'dodgerblue'=>'#1E90FF','firebrick'=>'#B22222','forestgreen'=>'#228B22','fuchsia'=>'#FF00FF','gainsboro'=>'#DCDCDC','gold'=>'#FFD700',
- 'gray'=>'#808080','green'=>'#008000','greenyellow'=>'#ADFF2F','hotpink'=>'#FF69B4','indigo'=>'#4B0082','khaki'=>'#F0E68C',
- 'lavenderblush'=>'#FFF0F5','lemonchiffon'=>'#FFFACD','lightcoral'=>'#F08080','lightgoldenrodyellow'=>'#FAFAD2','lightgreen'=>'#90EE90',
- 'lightsalmon'=>'#FFA07A','lightskyblue'=>'#87CEFA','lightslategray'=>'#778899','lightyellow'=>'#FFFFE0','lime'=>'#00FF00','limegreen'=>'#32CD32',
- 'magenta'=>'#FF00FF','maroon'=>'#800000','mediumaquamarine'=>'#66CDAA','mediumorchid'=>'#BA55D3','mediumseagreen'=>'#3CB371',
- 'mediumspringgreen'=>'#00FA9A','mediumvioletred'=>'#C71585','midnightblue'=>'#191970','mintcream'=>'#F5FFFA','moccasin'=>'#FFE4B5','navy'=>'#000080',
- 'olive'=>'#808000','orange'=>'#FFA500','orchid'=>'#DA70D6','palegreen'=>'#98FB98',
- 'palevioletred'=>'#D87093','peachpuff'=>'#FFDAB9','pink'=>'#FFC0CB','powderblue'=>'#B0E0E6','purple'=>'#800080',
- 'red'=>'#FF0000','royalblue'=>'#4169E1','salmon'=>'#FA8072','seagreen'=>'#2E8B57','sienna'=>'#A0522D','silver'=>'#C0C0C0','skyblue'=>'#87CEEB',
- 'slategray'=>'#708090','springgreen'=>'#00FF7F','steelblue'=>'#4682B4','tan'=>'#D2B48C','teal'=>'#008080','thistle'=>'#D8BFD8','turquoise'=>'#40E0D0',
- 'violetred'=>'#D02090','white'=>'#FFFFFF','yellow'=>'#FFFF00',
- 'aliceblue'=>'#f0f8ff', 'azure'=>'#f0ffff', 'bisque'=>'#ffe4c4', 'blanchedalmond'=>'#ffebcd', 'blueviolet'=>'#8a2be2', 'burlywood'=>'#deb887',
- 'chartreuse'=>'#7fff00', 'coral'=>'#ff7f50', 'cornsilk'=>'#fff8dc', 'cyan'=>'#00ffff', 'darkcyan'=>'#008b8b', 'darkgray'=>'#a9a9a9',
- 'darkgrey'=>'#a9a9a9', 'darkkhaki'=>'#bdb76b', 'darkolivegreen'=>'#556b2f', 'darkorchid'=>'#9932cc', 'darksalmon'=>'#e9967a',
- 'darkslateblue'=>'#483d8b', 'darkslategrey'=>'#2f4f4f', 'darkturquoise'=>'#00ced1', 'deeppink'=>'#ff1493', 'dimgray'=>'#696969',
- 'dimgrey'=>'#696969', 'floralwhite'=>'#fffaf0', 'ghostwhite'=>'#f8f8ff', 'goldenrod'=>'#daa520', 'grey'=>'#808080', 'honeydew'=>'#f0fff0',
- 'indianred'=>'#cd5c5c', 'ivory'=>'#fffff0', 'lavender'=>'#e6e6fa', 'lawngreen'=>'#7cfc00', 'lightblue'=>'#add8e6', 'lightcyan'=>'#e0ffff',
- 'lightgray'=>'#d3d3d3', 'lightgrey'=>'#d3d3d3', 'lightpink'=>'#ffb6c1', 'lightseagreen'=>'#20b2aa', 'lightslategrey'=>'#778899',
- 'lightsteelblue'=>'#b0c4de', 'linen'=>'#faf0e6', 'mediumblue'=>'#0000cd', 'mediumpurple'=>'#9370db', 'mediumslateblue'=>'#7b68ee',
- 'mediumturquoise'=>'#48d1cc', 'mistyrose'=>'#ffe4e1', 'navajowhite'=>'#ffdead', 'oldlace'=>'#fdf5e6', 'olivedrab'=>'#6b8e23', 'orangered'=>'#ff4500',
- 'palegoldenrod'=>'#eee8aa', 'paleturquoise'=>'#afeeee', 'papayawhip'=>'#ffefd5', 'peru'=>'#cd853f', 'plum'=>'#dda0dd', 'rosybrown'=>'#bc8f8f',
- 'saddlebrown'=>'#8b4513', 'sandybrown'=>'#f4a460', 'seashell'=>'#fff5ee', 'slateblue'=>'#6a5acd', 'slategrey'=>'#708090', 'snow'=>'#fffafa',
- 'tomato'=>'#ff6347', 'violet'=>'#ee82ee', 'wheat'=>'#f5deb3', 'whitesmoke'=>'#f5f5f5', 'yellowgreen'=>'#9acd32');
- $this->ColorFlag=false;
- $this->extgstates = array();
- $this->mb_enc='windows-1252';
- $this->directionality='ltr';
- $this->defaultAlign = 'L';
- $this->defaultTableAlign = 'L';
- $this->fixedPosBlockSave = array();
- $this->extraFontSubsets = 0;
- $this->SHYpatterns = array();
- $this->loadedSHYdictionary = false;
- $this->SHYdictionary = array();
- $this->SHYdictionaryWords = array();
- $this->blockContext = 1;
- $this->floatDivs = array();
- $this->DisplayPreferences='';
- $this->tablecascadeCSS = array();
- $this->listcascadeCSS = array();
- $this->patterns = array(); // Tiling patterns used for backgrounds
- $this->pageBackgrounds = array();
- $this->writingHTMLheader = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
- $this->writingHTMLfooter = false; // internal flag - used both for writing HTMLHeaders/Footers and FixedPos block
- $this->gradients = array();
- $this->kwt_Reference = array();
- $this->kwt_BMoutlines = array();
- $this->kwt_toc = array();
- $this->tbrot_Reference = array();
- $this->tbrot_BMoutlines = array();
- $this->tbrot_toc = array();
- $this->col_Reference = array();
- $this->col_BMoutlines = array();
- $this->col_toc = array();
- $this->graphs = array();
- $this->pgsIns = array();
- $this->PDFAXwarnings = array();
- $this->inlineDisplayOff = false;
- $this->kerning = false;
- $this->lSpacingCSS = '';
- $this->wSpacingCSS = '';
- $this->fixedlSpacing = false;
- $this->minwSpacing = 0;
- $this->baselineC = 0.35; // Baseline for text
- $this->noImageFile = str_replace("\\","/",dirname(__FILE__)) . '/includes/no_image.jpg';
- $this->subPos = 0;
- $this->forceExactLineheight = false;
- $this->listOcc = 0;
- $this->normalLineheight = 1.3;
- // These are intended as configuration variables, and should be set in config.php - which will override these values;
- // set here as failsafe as will cause an error if not defined
- $this->incrementFPR1 = 10;
- $this->incrementFPR2 = 10;
- $this->incrementFPR3 = 10;
- $this->incrementFPR4 = 10;
- $this->fullImageHeight = false;
- $this->floatbuffer = array();
- $this->floatmargins = array();
- $this->autoFontGroups = 0;
- $this->formobjects=array(); // array of Form Objects for WMF
- $this->InlineProperties=array();
- $this->InlineAnnots=array();
- $this->ktAnnots=array();
- $this->tbrot_Annots=array();
- $this->kwt_Annots=array();
- $this->columnAnnots=array();
- $this->pageDim=array();
- $this->breakpoints = array(); // used in columnbuffer
- $this->tableLevel=0;
- $this->tbctr=array(); // counter for nested tables at each level
- $this->page_box = array();
- $this->show_marks = ''; // crop or cross marks
- $this->kwt = false;
- $this->kwt_height = 0;
- $this->kwt_y0 = 0;
- $this->kwt_x0 = 0;
- $this->kwt_buffer = array();
- $this->kwt_Links = array();
- $this->kwt_moved = false;
- $this->kwt_saved = false;
- $this->PageNumSubstitutions = array();
- $this->base_table_properties=array();
- $this->borderstyles = array('inset','groove','outset','ridge','dotted','dashed','solid','double');
- $this->tbrot_align = 'C';
- $this->pageheaders=array();
- $this->pagefooters=array();
- $this->pageHTMLheaders=array();
- $this->pageHTMLfooters=array();
- $this->HTMLheaderPageLinks = array();
- $this->HTMLheaderPageAnnots = array();
- $this->ktForms = array(); // mPDF 5.2.03
- $this->HTMLheaderPageForms = array(); // mPDF 5.2.03
- $this->columnForms = array(); // mPDF 5.2.03
- $this->tbrotForms = array(); // mPDF 5.2.03
- // mPDF 5.2.09
- $this->useRC128encryption = false;
- $this->uniqid = '';
- // mPDF 5.2.05
- $this->formMethod = 'POST';
- $this->formAction = '';
- $this->form_fonts = array();
- $this->form_radio_groups = array();
- $this->form_checkboxes = false;
- $this->forms = array();
- $this->pdf_array_co = ''; // mPDF 5.2.10
- $this->cascadeCSS = array();
- $this->bufferoutput = false;
- $this->encrypted=false; //whether document is protected
- $this->BMoutlines=array();
- $this->_toc=array();
- $this->TOCheader=false;
- $this->TOCfooter=false;
- $this->ColActive=0; //Flag indicating that columns are on (the index is being processed)
- $this->ChangePage=0; //Flag indicating that a page break has occurred
- $this->Reference=array(); //Array containing the references
- $this->CurrCol=0; //Current column number
- $this->ColL = array(0); // Array of Left pos of columns - absolute - needs Margin correction for Odd-Even
- $this->ColR = array(0); // Array of Right pos of columns - absolute pos - needs Margin correction for Odd-Even
- $this->ChangeColumn = 0;
- $this->columnbuffer = array();
- $this->ColDetails = array(); // Keeps track of some column details
- $this->columnLinks = array(); // Cross references PageLinks
- $this->substitute = array(); // Array of substitution strings e.g. <ttz>112</ttz>
- $this->entsearch = array(); // Array of HTML entities (>ASCII 127) to substitute
- $this->entsubstitute = array(); // Array of substitution decimal unicode for the Hi entities
- $this->lastoptionaltag = '';
- $this->charset_in = '';
- $this->blk = array();
- $this->blklvl = 0;
- $this->TOCmark = 0;
- $this->tts = false;
- $this->ttz = false;
- $this->tta = false;
- $this->ispre=false;
- $this->checkSIP = false;
- $this->checkSMP = false;
- $this->checkCJK = false;
- $this->tableCJK = false;
- $this->headerDetails=array();
- $this->footerDetails=array();
- $this->div_bottom_border = '';
- $this->p_bottom_border = '';
- $this->page_break_after_avoid = false;
- $this->margin_bottom_collapse = false;
- $this->tablethead = 0;
- $this->tabletfoot = 0;
- $this->table_border_attr_set = 0;
- $this->table_border_css_set = 0;
- $this->shrin_k = 1.0;
- $this->shrink_this_table_to_fit = 0;
- $this->MarginCorrection = 0;
- $this->tabletheadjustfinished = false;
- $this->usingCoreFont = false;
- $this->charspacing=0;
- $this->outlines=array();
- $this->autoPageBreak = true;
- /*-- FORMS --*/
- // FORM ELEMENT SPACING
- $this->form_element_spacing['select']['outer']['h'] = 0.5; // Horizontal spacing around SELECT
- $this->form_element_spacing['select']['outer']['v'] = 0.5; // Vertical spacing around SELECT
- $this->form_element_spacing['select']['inner']['h'] = 0.7; // Horizontal padding around SELECT
- $this->form_element_spacing['select']['inner']['v'] = 0.7; // Vertical padding around SELECT
- $this->form_element_spacing['input']['outer']['h'] = 0.5;
- $this->form_element_spacing['input']['outer']['v'] = 0.5;
- $this->form_element_spacing['input']['inner']['h'] = 0.7;
- $this->form_element_spacing['input']['inner']['v'] = 0.7;
- $this->form_element_spacing['textarea']['outer']['h'] = 0.5;
- $this->form_element_spacing['textarea']['outer']['v'] = 0.5;
- $this->form_element_spacing['textarea']['inner']['h'] = 1;
- $this->form_element_spacing['textarea']['inner']['v'] = 0.5;
- $this->form_element_spacing['button']['outer']['h'] = 0.5;
- $this->form_element_spacing['button']['outer']['v'] = 0.5;
- $this->form_element_spacing['button']['inner']['h'] = 2;
- $this->form_element_spacing['button']['inner']['v'] = 1;
- /*-- END FORMS --*/
- require(_MPDF_PATH.'config.php'); // config data
- //Scale factor
- $this->k=72/25.4; // Will only use mm
- $this->_setPageSize($format, $orientation);
- $this->DefOrientation=$orientation;
- $this->margin_header=$mgh;
- $this->margin_footer=$mgf;
- $bmargin=$mgb;
- $this->DeflMargin = $mgl;
- $this->DefrMargin = $mgr;
- // v1.4 Save orginal settings in case of changed orientation
- $this->orig_tMargin = $mgt;
- $this->orig_bMargin = $bmargin;
- $this->orig_lMargin = $this->DeflMargin;
- $this->orig_rMargin = $this->DefrMargin;
- $this->orig_hMargin = $this->margin_header;
- $this->orig_fMargin = $this->margin_footer;
- if ($this->setAutoTopMargin=='pad') { $mgt += $this->margin_header; }
- if ($this->setAutoBottomMargin=='pad') { $mgb += $this->margin_footer; }
- $this->SetMargins($this->DeflMargin,$this->DefrMargin,$mgt); // sets l r t margin
- //Automatic page break
- $this->SetAutoPageBreak($this->autoPageBreak,$bmargin); // sets $this->bMargin & PageBreakTrigger
- $this->pgwidth = $this->w - $this->lMargin - $this->rMargin;
- //Interior cell margin (1 mm) ? not used
- $this->cMarginL = 1;
- $this->cMarginR = 1;
- //Line width (0.2 mm)
- $this->LineWidth=.567/$this->k;
- //To make the function Footer() work - replaces {nb} with page number
- $this->AliasNbPages();
- $this->AliasNbPageGroups();
- $this->aliasNbPgHex = '{nbHEXmarker}';
- $this->aliasNbPgGpHex = '{nbpgHEXmarker}';
- //Enable all tags as default
- $this->DisableTags();
- //Full width display mode
- $this->SetDisplayMode(100); // fullwidth? 'fullpage'
- //Compression
- $this->SetCompression(true);
- //Set default display preferences
- $this->SetDisplayPreferences('');
- // Font data
- require(_MPDF_PATH.'config_fonts.php');
- // Available fonts
- $this->available_unifonts = array();
- foreach ($this->fontdata AS $f => $fs) {
- if (isset($fs['R']) && $fs['R']) { $this->available_unifonts[] = $f; }
- if (isset($fs['B']) && $fs['B']) { $this->available_unifonts[] = $f.'B'; }
- if (isset($fs['I']) && $fs['I']) { $this->available_unifonts[] = $f.'I'; }
- if (isset($fs['BI']) && $fs['BI']) { $this->available_unifonts[] = $f.'BI'; }
- }
- $this->default_available_fonts = $this->available_unifonts;
- $optcore = false;
- $onlyCoreFonts = false;
- if (preg_match('/([\-+])aCJK/i',$mode, $m)) {
- preg_replace('/([\-+])aCJK/i','',$mode);
- if ($m[1]=='+') { $this->useAdobeCJK = true; }
- else { $this->useAdobeCJK = false; }
- }
- if (strlen($mode)==1) {
- if ($mode=='s') { $this->percentSubset = 100; $mode = ''; }
- else if ($mode=='c') { $onlyCoreFonts = true; $mode = ''; }
- }
- else if (substr($mode,-2)=='-s') {
- $this->percentSubset = 100;
- $mode = substr($mode,0,strlen($mode)-2);
- }
- else if (substr($mode,-2)=='-c') {
- $onlyCoreFonts = true;
- $mode = substr($mode,0,strlen($mode)-2);
- }
- else if (substr($mode,-2)=='-x') {
- $optcore = true;
- $mode = substr($mode,0,strlen($mode)-2);
- }
- // Autodetect if mode is a language_country string (en-GB or en_GB or en)
- if ((strlen($mode) == 5 && $mode != 'UTF-8') || strlen($mode) == 2) {
- list ($coreSuitable,$mpdf_pdf_unifonts) = GetLangOpts($mode, $this->useAdobeCJK);
- if ($coreSuitable && $optcore) { $onlyCoreFonts = true; }
- if ($mpdf_pdf_unifonts) {
- $this->RestrictUnicodeFonts($mpdf_pdf_unifonts);
- $this->default_available_fonts = $mpdf_pdf_unifonts;
- }
- $this->currentLang = $mode;
- $this->default_lang = $mode;
- }
- $this->onlyCoreFonts = $onlyCoreFonts;
- if ($this->onlyCoreFonts) {
- $this->setMBencoding('windows-1252'); // sets $this->mb_enc
- }
- else {
- $this->setMBencoding('UTF-8'); // sets $this->mb_enc
- }
- @mb_regex_encoding('UTF-8');
- // Adobe CJK fonts
- $this->available_CJK_fonts = array('gb','big5','sjis','uhc','gbB','big5B','sjisB','uhcB','gbI','big5I','sjisI','uhcI',
- 'gbBI','big5BI','sjisBI','uhcBI');
- //Standard fonts
- $this->CoreFonts=array('ccourier'=>'Courier','ccourierB'=>'Courier-Bold','ccourierI'=>'Courier-Oblique','ccourierBI'=>'Courier-BoldOblique',
- 'chelvetica'=>'Helvetica','chelveticaB'=>'Helvetica-Bold','chelveticaI'=>'Helvetica-Oblique','chelveticaBI'=>'Helvetica-BoldOblique',
- 'ctimes'=>'Times-Roman','ctimesB'=>'Times-Bold','ctimesI'=>'Times-Italic','ctimesBI'=>'Times-BoldItalic',
- 'csymbol'=>'Symbol','czapfdingbats'=>'ZapfDingbats');
- $this->fontlist=array("ctimes","ccourier","chelvetica","csymbol","czapfdingbats");
- // Substitutions
- $this->setHiEntitySubstitutions();
- if ($this->onlyCoreFonts) {
- $this->useSubstitutions = true;
- $this->SetSubstitutions();
- }
- else { $this->useSubstitutions = false; }
- if (file_exists(_MPDF_PATH.'mpdf.css')) {
- $css = file_get_contents(_MPDF_PATH.'mpdf.css');
- $css2 = $this->ReadDefaultCSS($css);
- $this->defaultCSS = $this->array_merge_recursive_unique($this->defaultCSS,$css2);
- }
- if ($default_font=='') {
- if ($this->onlyCoreFonts) {
- if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->mono_fonts)) { $default_font = 'ccourier'; }
- else if (in_array(strtolower($this->defaultCSS['BODY']['FONT-FAMILY']),$this->sans_fonts)) { $default_font = 'chelvetica'; }
- else { $default_font = 'ctimes'; }
- }
- else { $default_font = $this->defaultCSS['BODY']['FONT-FAMILY']; }
- }
- if (!$default_font_size) {
- $mmsize = $this->ConvertSize($this->defaultCSS['BODY']['FONT-SIZE']);
- $default_font_size = $mmsize*($this->k);
- }
- if ($default_font) { $this->SetDefaultFont($default_font); }
- if ($default_font_size) { $this->SetDefaultFontSize($default_font_size); }
- $this->SetLineHeight(); // lineheight is in mm
- $this->SetFColor($this->ConvertColor(255));
- $this->HREF='';
- $this->oldy=-1;
- $this->B=0;
- $this->U=0;
- $this->S=0;
- $this->I=0;
- $this->listlvl=0;
- $this->listnum=0;
- $this->listtype='';
- $this->listoccur=array();
- $this->listlist=array();
- $this->listitem=array();
- $this->tdbegin=false;
- $this->table=array();
- $this->cell=array();
- $this->col=-1;
- $this->row=-1;
- $this->cellBorderBuffer = array();
- $this->divbegin=false;
- $this->divalign='';
- $this->divwidth=0;
- $this->divheight=0;
- $this->spanbgcolor=false;
- $this->divrevert=false;
- $this->issetfont=false;
- $this->issetcolor=false;
- $this->blockjustfinished=false;
- $this->listjustfinished=false;
- $this->ignorefollowingspaces = true; //in order to eliminate exceeding left-side spaces
- $this->toupper=false;
- $this->tolower=false;
- $this->capitalize=false;
- $this->dash_on=false;
- $this->dotted_on=false;
- $this->SUP=false;
- $this->SUB=false;
- $this->strike=false;
- $this->currentfontfamily='';
- $this->currentfontsize='';
- $this->currentfontstyle='';
- $this->colorarray=array();
- $this->spanbgcolorarray=array();
- $this->textbuffer=array();
- $this->CSS=array();
- $this->internallink=array();
- $this->basepath = "";
- $this->SetBasePath('');
- $this->outlineparam = array();
- $this->outline_on = false;
- $this->specialcontent = '';
- $this->selectoption = array();
- $this->usetableheader=false;
- $this->usecss=true;
- $this->usepre=true;
- for($i=0;$i<256;$i++) {
- $this->chrs[$i] = chr($i);
- $this->ords[chr($i)] = $i;
- }
- /*-- IMPORTS --*/
- $this->tpls = array();
- $this->tpl = 0;
- $this->tplprefix = "/TPL";
- $this->res = array();
- if ($this->enableImports) {
- $this->SetImportUse();
- }
- /*-- END IMPORTS --*/
- if ($this->progressBar) { $this->StartProgressBarOutput($this->progressBar) ; } // *PROGRESS-BAR*
- }
- function _setPageSize($format, &$orientation) {
- //Page format
- if(is_string($format))
- {
- if ($format=='') { $format = 'A4'; }
- $pfo = 'P';
- if(preg_match('/([0-9a-zA-Z]*)-L/i',$format,$m)) { // e.g. A4-L = A$ landscape
- $format=$m[1];
- $pfo='L';
- }
- $format = $this->_getPageFormat($format);
- if (!$format) { $this->Error('Unknown page format: '.$format); }
- else { $orientation = $pfo; }
- $this->fwPt=$format[0];
- $this->fhPt=$format[1];
- }
- else
- {
- if (!$format[0] || !$format[1]) { $this->Error('Invalid page format: '.$format[0].' '.$format[1]); }
- $this->fwPt=$format[0]*$this->k;
- $this->fhPt=$format[1]*$this->k;
- }
- $this->fw=$this->fwPt/$this->k;
- $this->fh=$this->fhPt/$this->k;
- //Page orientation
- $orientation=strtolower($orientation);
- if($orientation=='p' or $orientation=='portrait')
- {
- $orientation='P';
- $this->wPt=$this->fwPt;
- $this->hPt=$this->fhPt;
- }
- elseif($orientation=='l' or $orientation=='landscape')
- {
- $orientation='L';
- $this->wPt=$this->fhPt;
- $this->hPt=$this->fwPt;
- }
- else $this->Error('Incorrect orientation: '.$orientation);
- $this->CurOrientation=$orientation;
- $this->w=$this->wPt/$this->k;
- $this->h=$this->hPt/$this->k;
- }
- function _getPageFormat($format) {
- switch (strtoupper($format)) {
- case '4A0': {$format = array(4767.87,6740.79); break;}
- case '2A0': {$format = array(3370.39,4767.87); break;}
- case 'A0': {$format = array(2383.94,3370.39); break;}
- case 'A1': {$format = array(1683.78,2383.94); break;}
- case 'A2': {$format = array(1190.55,1683.78); break;}
- case 'A3': {$format = array(841.89,1190.55); break;}
- case 'A4': default: {$format = array(595.28,841.89); break;}
- case 'A5': {$format = array(419.53,595.28); break;}
- case 'A6': {$format = array(297.64,419.53); break;}
- case 'A7': {$format = array(209.76,297.64); break;}
- case 'A8': {$format = array(147.40,209.76); break;}
- case 'A9': {$format = array(104.88,147.40); break;}
- case 'A10': {$format = array(73.70,104.88); break;}
- case 'B0': {$format = array(2834.65,4008.19); break;}
- case 'B1': {$format = array(2004.09,2834.65); break;}
- case 'B2': {$format = array(1417.32,2004.09); break;}
- case 'B3': {$format = array(1000.63,1417.32); break;}
- case 'B4': {$format = array(708.66,1000.63); break;}
- case 'B5': {$format = array(498.90,708.66); break;}
- case 'B6': {$format = array(354.33,498.90); break;}
- case 'B7': {$format = array(249.45,354.33); break;}
- case 'B8': {$format = array(175.75,249.45); break;}
- case 'B9': {$format = array(124.72,175.75); break;}
- case 'B10': {$format = array(87.87,124.72); break;}
- case 'C0': {$format = array(2599.37,3676.54); break;}
- case 'C1': {$format = array(1836.85,2599.37); break;}
- case 'C2': {$format = array(1298.27,1836.85); break;}
- case 'C3': {$format = array(918.43,1298.27); break;}
- case 'C4': {$format = array(649.13,918.43); break;}
- case 'C5': {$format = array(459.21,649.13); break;}
- case 'C6': {$format = array(323.15,459.21); break;}
- case 'C7': {$format = array(229.61,323.15); break;}
- case 'C8': {$format = array(161.57,229.61); break;}
- case 'C9': {$format = array(113.39,161.57); break;}
- case 'C10': {$format = array(79.37,113.39); break;}
- case 'RA0': {$format = array(2437.80,3458.27); break;}
- case 'RA1': {$format = array(1729.13,2437.80); break;}
- case 'RA2': {$format = array(1218.90,1729.13); break;}
- case 'RA3': {$format = array(864.57,1218.90); break;}
- case 'RA4': {$format = array(609.45,864.57); break;}
- case 'SRA0': {$format = array(2551.18,3628.35); break;}
- case 'SRA1': {$format = array(1814.17,2551.18); break;}
- case 'SRA2': {$format = array(1275.59,1814.17); break;}
- case 'SRA3': {$format = array(907.09,1275.59); break;}
- case 'SRA4': {$format = array(637.80,907.09); break;}
- case 'LETTER': {$format = array(612.00,792.00); break;}
- case 'LEGAL': {$format = array(612.00,1008.00); break;}
- case 'EXECUTIVE': {$format = array(521.86,756.00); break;}
- case 'FOLIO': {$format = array(612.00,936.00); break;}
- case 'B': {$format=array(362.83,561.26 ); break;} // 'B' format paperback size 128x198mm
- case 'A': {$format=array(314.65,504.57 ); break;} // 'A' format paperback size 111x178mm
- case 'DEMY': {$format=array(382.68,612.28 ); break;} // 'Demy' format paperback size 135x216mm
- case 'ROYAL': {$format=array(433.70,663.30 ); break;} // 'Royal' format paperback size 153x234mm
- default: $format = false;
- }
- return $format;
- }
- /*-- PROGRESS-BAR --*/
- function StartProgressBarOutput($mode=1) {
- // must be relative path, or URI (not a file system path)
- if (!defined('_MPDF_URI')) {
- $this->progressBar = false;
- if ($this->debug) { $this->Error("You need to define _MPDF_URI to use the progress bar!"); }
- else return false;
- }
- $this->progressBar = $mode;
- if ($this->progbar_altHTML) {
- echo $this->progbar_altHTML;
- }
- else {
- echo '<html>
- <head>
- <title>mPDF File Progress</title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <link rel="stylesheet" type="text/css" href="'._MPDF_URI.'progbar.css" />
- </head>
- <body>
- <div class="main">
- <div class="heading">'.$this->progbar_heading.'</div>
- <div class="demo">
- ';
- if ($this->progressBar==2) { echo ' <table width="100%"><tr><td style="width: 50%;">
- <span class="barheading">Writing HTML code</span> <br/>
- <div class="progressBar">
- <div id="element1" class="innerBar"> </div>
- </div>
- <span class="code" id="box1"></span>
- </td><td style="width: 50%;">
- <span class="barheading">Autosizing elements</span> <br/>
- <div class="progressBar">
- <div id="element4" class="innerBar"> </div>
- </div>
- <span class="code" id="box4"></span>
- <br/><br/>
- <span class="barheading">Writing Tables</span> <br/>
- <div class="progressBar">
- <div id="element7" class="innerBar"> </div>
- </div>
- <span class="code" id="box7"></span>
- </td></tr>
- <tr><td><br /><br /></td><td></td></tr>
- <tr><td style="width: 50%;">
- '; }
- echo ' <span class="barheading">Writing PDF file</span> <br/>
- <div class="progressBar">
- <div id="element2" class="innerBar"> </div>
- </div>
- <span class="code" id="box2"></span>
- ';
- if ($this->progressBar==2) { echo '
- </td><td style="width: 50%;">
- <span class="barheading">Memory usage</span> <br/>
- <div class="progressBar">
- <div id="element5" class="innerBar"> </div>
- </div>
- <span id="box5">0</span> '.ini_get("memory_limit").'<br />
- <br/><br/>
- <span class="barheading">Memory usage (peak)</span> <br/>
- <div class="progressBar">
- <div id="element6" class="innerBar"> </div>
- </div>
- <span id="box6">0</span> '.ini_get("memory_limit").'<br />
- </td></tr>
- </table>
- '; }
- echo ' <br/><br/>
- <span id="box3"></span>
- </div>
- ';
- }
- ob_flush();
- flush();
- }
- function UpdateProgressBar($el,$val,$txt='') {
- // $val should be a string - 5 = actual value, +15 = increment
- if ($this->progressBar<2) {
- if ($el>3) { return; }
- else if ($el ==1) { $el = 2; }
- }
- echo '<script type="text/javascript">';
- if ($val) { echo ' document.getElementById(\'element'.$el.'\').style.width=\''.$val.'%\'; '; }
- if ($txt) { echo ' document.getElementById(\'box'.$el.'\').innerHTML=\''.$txt.'\'; '; }
- if ($this->progressBar==2) {
- $m = round(memory_get_usage()/1048576);
- $m2 = round(memory_get_peak_usage()/1048576);
- $mem = $m * 100 / (ini_get("memory_limit")+0);
- $mem2 = $m2 * 100 / (ini_get("memory_limit")+0);
- echo ' document.getElementById(\'element5\').style.width=\''.$mem.'%\'; ';
- echo ' document.getElementById(\'element6\').style.width=\''.$mem2.'%\'; ';
- echo ' document.getElementById(\'box5\').innerHTML=\''.$m.'MB / \'; ';
- echo ' document.getElementById(\'box6\').innerHTML=\''.$m2.'MB / \'; ';
- }
- echo '</script>'."\n";
- ob_flush();
- flush();
- }
- /*-- END PROGRESS-BAR --*/
- function RestrictUnicodeFonts($res) {
- // $res = array of (Unicode) fonts to restrict to: e.g. norasi|norasiB - language specific
- if (count($res)) { // Leave full list of available fonts if passed blank array
- $this->available_unifonts = $res;
- }
- else { $this->available_unifonts = $this->default_available_fonts; }
- if (count($this->available_unifonts) == 0) { $this->available_unifonts[] = $this->default_available_fonts[0]; }
- $this->available_unifonts = array_values($this->available_unifonts);
- }
- function setMBencoding($enc) {
- @mb_regex_encoding('UTF-8');
- $curr = $this->mb_enc;
- $this->mb_enc = $enc;
- if (!$this->mb_enc || $curr != $this->mb_enc) {
- mb_internal_encoding($this->mb_enc);
- if ($enc == 'UTF-8') { @mb_regex_encoding('UTF-8'); }
- // else if ($enc == 'windows-1252') { @mb_regex_encoding('ISO-8859-1'); }
- }
- }
- function SetMargins($left,$right,$top) {
- //Set left, top and right margins
- $this->lMargin=$left;
- $this->rMargin=$right;
- $this->tMargin=$top;
- }
- function ResetMargins() {
- //ReSet left, top margins
- if (($this->forcePortraitHeaders || $this->forcePortraitMargins) && $this->DefOrientation=='P' && $this->CurOrientation=='L') {
- if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN
- $this->tMargin=$this->orig_rMargin;
- $this->bMargin=$this->orig_lMargin;
- }
- else { // ODD // OR NOT MIRRORING MARGINS/FOOTERS
- $this->tMargin=$this->orig_lMargin;
- $this->bMargin=$this->orig_rMargin;
- }
- $this->lMargin=$this->DeflMargin;
- $this->rMargin=$this->DefrMargin;
- $this->MarginCorrection = 0;
- $this->PageBreakTrigger=$this->h-$this->bMargin;
- }
- else if (($this->mirrorMargins) && (($this->page)%2==0)) { // EVEN
- $this->lMargin=$this->DefrMargin;
- $this->rMar