11ef68647SAndreas Gohr<?php 2852931daSAndreas Gohr 3852931daSAndreas Gohr// phpcs:disable: PSR1.Methods.CamelCapsMethodName.NotCamelCaps 4852931daSAndreas Gohr 5852931daSAndreas Gohruse dokuwiki\plugin\dw2pdf\DokuImageProcessorDecorator; 6*f4acdfe7SGerrit Uitslaguse Mpdf\Mpdf; 7*f4acdfe7SGerrit Uitslaguse Mpdf\MpdfException; 8852931daSAndreas Gohr 95db42babSAndreas Gohr/** 105db42babSAndreas Gohr * Wrapper around the mpdf library class 115db42babSAndreas Gohr * 125db42babSAndreas Gohr * This class overrides some functions to make mpdf make use of DokuWiki' 135db42babSAndreas Gohr * standard tools instead of its own. 145db42babSAndreas Gohr * 155db42babSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 165db42babSAndreas Gohr */ 17852931daSAndreas Gohrclass DokuPDF extends Mpdf 1832ff69b6SAndreas Gohr{ 192bf2edefSGerrit Uitslag /** 202bf2edefSGerrit Uitslag * DokuPDF constructor. 212bf2edefSGerrit Uitslag * 222bf2edefSGerrit Uitslag * @param string $pagesize 232bf2edefSGerrit Uitslag * @param string $orientation 242bf2edefSGerrit Uitslag * @param int $fontsize 25*f4acdfe7SGerrit Uitslag * 26*f4acdfe7SGerrit Uitslag * @throws MpdfException 27*f4acdfe7SGerrit Uitslag * @throws Exception 282bf2edefSGerrit Uitslag */ 29852931daSAndreas Gohr public function __construct($pagesize = 'A4', $orientation = 'portrait', $fontsize = 11, $docLang = 'en') 3032ff69b6SAndreas Gohr { 3122dc1803SAndreas Gohr global $conf; 3222dc1803SAndreas Gohr global $lang; 335bd9be9cSGerrit Uitslag 34852931daSAndreas Gohr if (!defined('_MPDF_TEMP_PATH')) { 35852931daSAndreas Gohr define('_MPDF_TEMP_PATH', $conf['tmpdir'] . '/dwpdf/' . random_int(1, 1000) . '/'); 36852931daSAndreas Gohr } 371c9fae9eSAndreas Gohr io_mkdir_p(_MPDF_TEMP_PATH); 381ef68647SAndreas Gohr 396ea88a05SAndreas Gohr $format = $pagesize; 40acf3824dSGerrit Uitslag if ($orientation == 'landscape') { 41acf3824dSGerrit Uitslag $format .= '-L'; 42acf3824dSGerrit Uitslag } 436ea88a05SAndreas Gohr 4422dc1803SAndreas 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 5522dc1803SAndreas Gohr parent::__construct([ 560119ca25SAndreas Gohr 'mode' => $mode, 57f8f1ee5aSAndreas Gohr 'format' => $format, 585d71cf21SGerrit Uitslag 'default_font_size' => $fontsize, 590576bb86SMichael Große 'ImageProcessorClass' => DokuImageProcessorDecorator::class, 6022dc1803SAndreas Gohr 'tempDir' => _MPDF_TEMP_PATH, //$conf['tmpdir'] . '/tmp/dwpdf' 6122dc1803SAndreas Gohr 'SHYlang' => $docLang, 6222dc1803SAndreas Gohr ]); 630576bb86SMichael Große 64c00b769aSLarsDW223 $this->autoScriptToLang = true; 65c00b769aSLarsDW223 $this->baseScript = 1; 66c00b769aSLarsDW223 $this->autoVietnamese = true; 67c00b769aSLarsDW223 $this->autoArabic = true; 68c00b769aSLarsDW223 $this->autoLangToFont = true; 69c00b769aSLarsDW223 701ef68647SAndreas Gohr $this->ignore_invalid_utf8 = true; 712585efdfSKlap-in $this->tabSpaces = 4; 72567a93d0SGerrit Uitslag 73567a93d0SGerrit Uitslag // assumed that global language can be used, maybe Bookcreator needs more nuances? 74567a93d0SGerrit Uitslag $this->SetDirectionality($lang['direction']); 751c9fae9eSAndreas Gohr } 761ef68647SAndreas Gohr 771c9fae9eSAndreas Gohr /** 781c9fae9eSAndreas Gohr * Cleanup temp dir 791c9fae9eSAndreas Gohr */ 80852931daSAndreas Gohr public function __destruct() 8132ff69b6SAndreas Gohr { 82acf3824dSGerrit Uitslag io_rmdir(_MPDF_TEMP_PATH, true); 831ef68647SAndreas Gohr } 841ef68647SAndreas Gohr 85a06728a6SAndreas Gohr /** 86a06728a6SAndreas Gohr * Decode all paths, since DokuWiki uses XHTML compliant URLs 872bf2edefSGerrit Uitslag * 882bf2edefSGerrit Uitslag * @param string $path 892bf2edefSGerrit Uitslag * @param string $basepath 90a06728a6SAndreas Gohr */ 91852931daSAndreas Gohr public function GetFullPath(&$path, $basepath = '') 9232ff69b6SAndreas Gohr { 93a06728a6SAndreas Gohr $path = htmlspecialchars_decode($path); 94a06728a6SAndreas Gohr parent::GetFullPath($path, $basepath); 95a06728a6SAndreas Gohr } 961ef68647SAndreas Gohr} 97