17d101cc1SGerry Weißbach<?php 27d101cc1SGerry Weißbach/** 37d101cc1SGerry Weißbach * Site Export Plugin - mPDF Extension 47d101cc1SGerry Weißbach * 57d101cc1SGerry Weißbach * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 67d101cc1SGerry Weißbach * @author i-net software <tools@inetsoftware.de> 77d101cc1SGerry Weißbach * @author Gerry Weissbach <gweissbach@inetsoftware.de> 87d101cc1SGerry Weißbach */ 97d101cc1SGerry Weißbach 10ed507305SGerry Weißbachif (file_exists(DOKU_PLUGIN . 'dw2pdf/mpdf/mpdf.php')) { 117d101cc1SGerry Weißbach 127d101cc1SGerry Weißbach global $conf; 13*a8c17ab5Si-net /// software if (!defined('_MPDF_TEMP_PATH')) { 14*a8c17ab5Si-net /// software define('_MPDF_TEMP_PATH', $conf['tmpdir'] . '/dwpdf/' . rand(1, 1000) . '/'); 15*a8c17ab5Si-net /// software } 16*a8c17ab5Si-net /// software if (!defined('_MPDF_TTFONTDATAPATH')) { 17*a8c17ab5Si-net /// software define('_MPDF_TTFONTDATAPATH', $conf['cachedir'] . '/mpdf_ttf/'); 18*a8c17ab5Si-net /// software } 197d101cc1SGerry Weißbach 20ed507305SGerry Weißbach require_once(DOKU_PLUGIN . 'dw2pdf/mpdf/mpdf.php'); 217d101cc1SGerry Weißbach 22ed507305SGerry Weißbach class siteexportPDF extends mpdf { 237d101cc1SGerry Weißbach 24*a8c17ab5Si-net /// software private $debugObj = null; 257d101cc1SGerry Weißbach 26*a8c17ab5Si-net /// software public function __construct($debug) { 277f6f0f99SGerry Weißbach global $INPUT; 28ed507305SGerry Weißbach global $conf; 29a4a5b91dSGerry Weißbach 30bca58ac1SGerry Weißbach $dw2pdf = plugin_load('action', 'dw2pdf'); 317f6f0f99SGerry Weißbach 327f6f0f99SGerry Weißbach // decide on the paper setup from param or config 337f6f0f99SGerry Weißbach $pagesize = $INPUT->str('pagesize', $dw2pdf->getConf('pagesize'), true); 347f6f0f99SGerry Weißbach $orientation = $INPUT->str('orientation', $dw2pdf->getConf('orientation'), true); 357f6f0f99SGerry Weißbach 36ed507305SGerry Weißbach io_mkdir_p(_MPDF_TTFONTDATAPATH); 37ed507305SGerry Weißbach io_mkdir_p(_MPDF_TEMP_PATH); 38ed507305SGerry Weißbach 39ed507305SGerry Weißbach $format = $pagesize; 40*a8c17ab5Si-net /// software if ($orientation == 'landscape') { 41*a8c17ab5Si-net /// software $format .= '-L'; 42*a8c17ab5Si-net /// software } 43ed507305SGerry Weißbach 44ed507305SGerry Weißbach switch ($conf['lang']) { 45ed507305SGerry Weißbach case 'zh': 46ed507305SGerry Weißbach case 'zh-tw': 47ed507305SGerry Weißbach case 'ja': 48ed507305SGerry Weißbach case 'ko': 49ed507305SGerry Weißbach $mode = '+aCJK'; 50ed507305SGerry Weißbach break; 51ed507305SGerry Weißbach default: 52ed507305SGerry Weißbach $mode = 'UTF-8-s'; 53ed507305SGerry Weißbach 54ed507305SGerry Weißbach } 55ed507305SGerry Weißbach 56ed507305SGerry Weißbach // we're always UTF-8 57ed507305SGerry Weißbach parent::__construct($mode, $format); 58ed507305SGerry Weißbach $this->ignore_invalid_utf8 = true; 59ed507305SGerry Weißbach $this->tabSpaces = 4; 607d101cc1SGerry Weißbach $this->debugObj = $debug; 617f6f0f99SGerry Weißbach $this->debug = $debug !== false; 627d101cc1SGerry Weißbach $this->shrink_tables_to_fit = 1; // Does not shrink tables by default, only in emergency 637d101cc1SGerry Weißbach $this->use_kwt = true; // avoids page-breaking in H1-H6 if a table follows directly 64d8d141cfSGerry Weißbach $this->useSubstitutions = true; 657d101cc1SGerry Weißbach } 667d101cc1SGerry Weißbach 67*a8c17ab5Si-net /// software public function message($msg, $vars = null, $lvl = 1) 687d101cc1SGerry Weißbach { 69*a8c17ab5Si-net /// software if ($this->debugObj !== null) { 70a4a5b91dSGerry Weißbach $this->debugObj->message($msg, $vars, $lvl); 717d101cc1SGerry Weißbach } 727d101cc1SGerry Weißbach } 737d101cc1SGerry Weißbach 74*a8c17ab5Si-net /// software public function Error($msg) 757d101cc1SGerry Weißbach { 76*a8c17ab5Si-net /// software if ($this->debugObj !== null && method_exists($this->debugObj, 'runtimeException')) { 777f6f0f99SGerry Weißbach $this->debugObj->runtimeException($msg); 787d101cc1SGerry Weißbach } else { 797d101cc1SGerry Weißbach parent::Error($msg); 807d101cc1SGerry Weißbach } 817d101cc1SGerry Weißbach } 827d101cc1SGerry Weißbach 83*a8c17ab5Si-net /// software public function GetFullPath(&$path,$basepath='') { 84a4a5b91dSGerry Weißbach 85a4a5b91dSGerry Weißbach // Full Path might return a doubled path like /~gamma/documentation/lib//~gamma/documentation/lib/tpl/clearreports/./_print-images/background-bottom.jpg 86a4a5b91dSGerry Weißbach 87a4a5b91dSGerry Weißbach $path = str_replace("\\","/",$path); //If on Windows 88a4a5b91dSGerry Weißbach $path = preg_replace('/^\/\//','http://',$path); // mPDF 5.6.27 89a4a5b91dSGerry Weißbach $regexp = '|^./|'; // Inadvertently corrects "./path/etc" and "//www.domain.com/etc" 90a4a5b91dSGerry Weißbach $path = preg_replace($regexp,'',$path); 91a4a5b91dSGerry Weißbach 92a4a5b91dSGerry Weißbach if ( preg_match("/^.+\/\.\.\//", $path) ) { 93a4a5b91dSGerry Weißbach // ../ not at the beginning 94a4a5b91dSGerry Weißbach $newpath = array(); 95a4a5b91dSGerry Weißbach $oldpath = explode('/', $path); 96a4a5b91dSGerry Weißbach 97a4a5b91dSGerry Weißbach foreach( $oldpath as $slice ) { 98a4a5b91dSGerry Weißbach if ( $slice == ".." && count($newpath) > 0 ) { 99a4a5b91dSGerry Weißbach array_pop($newpath); 100a4a5b91dSGerry Weißbach continue; 101a4a5b91dSGerry Weißbach } 102a4a5b91dSGerry Weißbach 103a4a5b91dSGerry Weißbach $newpath[] = $slice; 104a4a5b91dSGerry Weißbach } 105a4a5b91dSGerry Weißbach 106a4a5b91dSGerry Weißbach $path = implode('/', $newpath); 107a4a5b91dSGerry Weißbach } 108a4a5b91dSGerry Weißbach 109a4a5b91dSGerry Weißbach parent::GetFullPath($path, $basepath); 110a4a5b91dSGerry Weißbach 11156923262SGerry Weißbach $regex = "/^(". preg_quote(DOKU_BASE, '/') .".+)\\1/"; 112a4a5b91dSGerry Weißbach if ( preg_match($regex, $path, $matches) ) { 113a4a5b91dSGerry Weißbach $path = preg_replace($regex, "\\1", $path); 114a4a5b91dSGerry Weißbach } 11556923262SGerry Weißbach 116a4a5b91dSGerry Weißbach } 117a4a5b91dSGerry Weißbach 118fff1dd3dSGerry Weißbach /* 119fff1dd3dSGerry Weißbach Only when the toc is being generated 120fff1dd3dSGerry Weißbach */ 121*a8c17ab5Si-net /// software public function MovePages($target_page, $start_page, $end_page = -1) { 122fff1dd3dSGerry Weißbach parent::MovePages($target_page, $start_page, $end_page); 123fff1dd3dSGerry Weißbach } 124fff1dd3dSGerry Weißbach 125*a8c17ab5Si-net /// software public function OpenTag($tag, $attr, &$ahtml, &$ihtml) { 1267d101cc1SGerry Weißbach switch ($tag) { 1277d101cc1SGerry Weißbach case 'BOOKMARK': 1287d101cc1SGerry Weißbach case 'TOCENTRY': 1297d101cc1SGerry Weißbach if ($attr['CONTENT']) { 1307d101cc1SGerry Weißbach // resolve double encoding 1317d101cc1SGerry Weißbach $attr['CONTENT'] = htmlspecialchars_decode($attr['CONTENT'], ENT_QUOTES); 1327d101cc1SGerry Weißbach } 1337d101cc1SGerry Weißbach break; 1347d101cc1SGerry Weißbach } 135876523d1SGerry Weißbach return parent::OpenTag($tag, $attr, $ahtml, $ihtml); 1367d101cc1SGerry Weißbach } 1377d101cc1SGerry Weißbach } 138d10fa28aSGerry Weißbach 139d10fa28aSGerry Weißbach if (file_exists(DOKU_PLUGIN . 'dw2pdf/mpdf/classes/cssmgr.php') && !class_exists('cssmgr', false)) { 140ed507305SGerry Weißbach//* 141d10fa28aSGerry Weißbach require_once(DOKU_PLUGIN . 'siteexport/inc/patchCSSmgr.php'); 142d10fa28aSGerry Weißbach $objPatch = new CSSMgrPatch(DOKU_PLUGIN . 'dw2pdf/mpdf/classes/cssmgr.php'); 143ed507305SGerry Weißbach if ($objPatch->redefineFunction(file_get_contents(DOKU_PLUGIN . 'siteexport/inc/readCSS.patch'))) { 144d10fa28aSGerry Weißbach eval($objPatch->getCode()); 145d10fa28aSGerry Weißbach } 146ed507305SGerry Weißbach/*/ 147ed507305SGerry Weißbach//*/ 148ed507305SGerry Weißbach } 149d10fa28aSGerry Weißbach 1507d101cc1SGerry Weißbach} 151