xref: /plugin/dw2pdf/DokuPDF.class.php (revision f4acdfe7b897817bd65c643b17c45fe694a9fcc4)
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