11ef68647SAndreas Gohr<?php 25db42babSAndreas Gohr/** 35db42babSAndreas Gohr * Wrapper around the mpdf library class 45db42babSAndreas Gohr * 55db42babSAndreas Gohr * This class overrides some functions to make mpdf make use of DokuWiki' 65db42babSAndreas Gohr * standard tools instead of its own. 75db42babSAndreas Gohr * 85db42babSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 95db42babSAndreas Gohr */ 1032ff69b6SAndreas Gohr 1132ff69b6SAndreas Gohruse dokuwiki\plugin\dw2pdf\DokuImageProcessorDecorator; 12ca0441e7SGerrit Uitslag 130119ca25SAndreas Gohrrequire_once __DIR__ . '/vendor/autoload.php'; 141ef68647SAndreas Gohr 15ca0441e7SGerrit Uitslag/** 16ca0441e7SGerrit Uitslag * Class DokuPDF 17ca0441e7SGerrit Uitslag * Some DokuWiki specific extentions 18ca0441e7SGerrit Uitslag */ 1932ff69b6SAndreas Gohrclass DokuPDF extends \Mpdf\Mpdf 2032ff69b6SAndreas Gohr{ 211ef68647SAndreas Gohr 222bf2edefSGerrit Uitslag /** 232bf2edefSGerrit Uitslag * DokuPDF constructor. 242bf2edefSGerrit Uitslag * 252bf2edefSGerrit Uitslag * @param string $pagesize 262bf2edefSGerrit Uitslag * @param string $orientation 272bf2edefSGerrit Uitslag * @param int $fontsize 282bf2edefSGerrit Uitslag */ 2932ff69b6SAndreas Gohr function __construct($pagesize = 'A4', $orientation = 'portrait', $fontsize = 11) 3032ff69b6SAndreas Gohr { 31*22dc1803SAndreas Gohr global $conf; 32*22dc1803SAndreas Gohr global $lang; 33*22dc1803SAndreas Gohr global $ID; 345bd9be9cSGerrit Uitslag 3532ff69b6SAndreas Gohr if (!defined('_MPDF_TEMP_PATH')) define('_MPDF_TEMP_PATH', $conf['tmpdir'] . '/dwpdf/' . rand(1, 1000) . '/'); 361c9fae9eSAndreas Gohr io_mkdir_p(_MPDF_TEMP_PATH); 371ef68647SAndreas Gohr 386ea88a05SAndreas Gohr $format = $pagesize; 39acf3824dSGerrit Uitslag if ($orientation == 'landscape') { 40acf3824dSGerrit Uitslag $format .= '-L'; 41acf3824dSGerrit Uitslag } 426ea88a05SAndreas Gohr 43*22dc1803SAndreas Gohr $docLang = $this->getDocumentLanguage($ID); 44*22dc1803SAndreas Gohr switch ($docLang) { 455bd9be9cSGerrit Uitslag case 'zh': 465bd9be9cSGerrit Uitslag case 'zh-tw': 475bd9be9cSGerrit Uitslag case 'ja': 485bd9be9cSGerrit Uitslag case 'ko': 495bd9be9cSGerrit Uitslag $mode = '+aCJK'; 505bd9be9cSGerrit Uitslag break; 515bd9be9cSGerrit Uitslag default: 525bd9be9cSGerrit Uitslag $mode = 'UTF-8-s'; 535bd9be9cSGerrit Uitslag 545bd9be9cSGerrit Uitslag } 555bd9be9cSGerrit Uitslag 56*22dc1803SAndreas Gohr parent::__construct([ 570119ca25SAndreas Gohr 'mode' => $mode, 58f8f1ee5aSAndreas Gohr 'format' => $format, 595d71cf21SGerrit Uitslag 'default_font_size' => $fontsize, 600576bb86SMichael Große 'ImageProcessorClass' => DokuImageProcessorDecorator::class, 61*22dc1803SAndreas Gohr 'tempDir' => _MPDF_TEMP_PATH, //$conf['tmpdir'] . '/tmp/dwpdf' 62*22dc1803SAndreas Gohr 'SHYlang' => $docLang, 63*22dc1803SAndreas Gohr ]); 640576bb86SMichael Große 65c00b769aSLarsDW223 $this->autoScriptToLang = true; 66c00b769aSLarsDW223 $this->baseScript = 1; 67c00b769aSLarsDW223 $this->autoVietnamese = true; 68c00b769aSLarsDW223 $this->autoArabic = true; 69c00b769aSLarsDW223 $this->autoLangToFont = true; 70c00b769aSLarsDW223 711ef68647SAndreas Gohr $this->ignore_invalid_utf8 = true; 722585efdfSKlap-in $this->tabSpaces = 4; 73567a93d0SGerrit Uitslag 74567a93d0SGerrit Uitslag // assumed that global language can be used, maybe Bookcreator needs more nuances? 75567a93d0SGerrit Uitslag $this->SetDirectionality($lang['direction']); 761c9fae9eSAndreas Gohr } 771ef68647SAndreas Gohr 781c9fae9eSAndreas Gohr /** 791c9fae9eSAndreas Gohr * Cleanup temp dir 801c9fae9eSAndreas Gohr */ 8132ff69b6SAndreas Gohr function __destruct() 8232ff69b6SAndreas Gohr { 83acf3824dSGerrit Uitslag io_rmdir(_MPDF_TEMP_PATH, true); 841ef68647SAndreas Gohr } 851ef68647SAndreas Gohr 86a06728a6SAndreas Gohr /** 87a06728a6SAndreas Gohr * Decode all paths, since DokuWiki uses XHTML compliant URLs 882bf2edefSGerrit Uitslag * 892bf2edefSGerrit Uitslag * @param string $path 902bf2edefSGerrit Uitslag * @param string $basepath 91a06728a6SAndreas Gohr */ 9232ff69b6SAndreas Gohr function GetFullPath(&$path, $basepath = '') 9332ff69b6SAndreas Gohr { 94a06728a6SAndreas Gohr $path = htmlspecialchars_decode($path); 95a06728a6SAndreas Gohr parent::GetFullPath($path, $basepath); 96a06728a6SAndreas Gohr } 97*22dc1803SAndreas Gohr 98*22dc1803SAndreas Gohr /** 99*22dc1803SAndreas Gohr * Get the language of the current document 100*22dc1803SAndreas Gohr * 101*22dc1803SAndreas Gohr * Uses the translation plugin if available 102*22dc1803SAndreas Gohr * @return string 103*22dc1803SAndreas Gohr */ 104*22dc1803SAndreas Gohr protected function getDocumentLanguage($pageid) 105*22dc1803SAndreas Gohr { 106*22dc1803SAndreas Gohr global $conf; 107*22dc1803SAndreas Gohr 108*22dc1803SAndreas Gohr $lang = $conf['lang']; 109*22dc1803SAndreas Gohr /** @var helper_plugin_translation $trans */ 110*22dc1803SAndreas Gohr $trans = plugin_load('helper', 'translation'); 111*22dc1803SAndreas Gohr if ($trans) { 112*22dc1803SAndreas Gohr $tr = $trans->getLangPart($pageid); 113*22dc1803SAndreas Gohr if ($tr) $lang = $tr; 114*22dc1803SAndreas Gohr } 115*22dc1803SAndreas Gohr 116*22dc1803SAndreas Gohr return $lang; 117*22dc1803SAndreas Gohr } 118*22dc1803SAndreas Gohr 1191ef68647SAndreas Gohr} 120