xref: /plugin/dw2pdf/DokuPDF.class.php (revision 852931daed0aa7c73fc4da5d421d2c117decf509)
11ef68647SAndreas Gohr<?php
2*852931daSAndreas Gohr
3*852931daSAndreas Gohr// phpcs:disable: PSR1.Methods.CamelCapsMethodName.NotCamelCaps
4*852931daSAndreas Gohr
5*852931daSAndreas Gohruse Mpdf\Mpdf;
6*852931daSAndreas Gohruse dokuwiki\plugin\dw2pdf\DokuImageProcessorDecorator;
7*852931daSAndreas Gohr
85db42babSAndreas Gohr/**
95db42babSAndreas Gohr * Wrapper around the mpdf library class
105db42babSAndreas Gohr *
115db42babSAndreas Gohr * This class overrides some functions to make mpdf make use of DokuWiki'
125db42babSAndreas Gohr * standard tools instead of its own.
135db42babSAndreas Gohr *
145db42babSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org>
155db42babSAndreas Gohr */
16*852931daSAndreas Gohrclass DokuPDF extends Mpdf
1732ff69b6SAndreas Gohr{
182bf2edefSGerrit Uitslag    /**
192bf2edefSGerrit Uitslag     * DokuPDF constructor.
202bf2edefSGerrit Uitslag     *
212bf2edefSGerrit Uitslag     * @param string $pagesize
222bf2edefSGerrit Uitslag     * @param string $orientation
232bf2edefSGerrit Uitslag     * @param int $fontsize
242bf2edefSGerrit Uitslag     */
25*852931daSAndreas Gohr    public function __construct($pagesize = 'A4', $orientation = 'portrait', $fontsize = 11, $docLang = 'en')
2632ff69b6SAndreas Gohr    {
2722dc1803SAndreas Gohr        global $conf;
2822dc1803SAndreas Gohr        global $lang;
295bd9be9cSGerrit Uitslag
30*852931daSAndreas Gohr        require_once __DIR__ . '/vendor/autoload.php';
31*852931daSAndreas Gohr
32*852931daSAndreas Gohr        if (!defined('_MPDF_TEMP_PATH')) {
33*852931daSAndreas Gohr            define('_MPDF_TEMP_PATH', $conf['tmpdir'] . '/dwpdf/' . random_int(1, 1000) . '/');
34*852931daSAndreas Gohr        }
351c9fae9eSAndreas Gohr        io_mkdir_p(_MPDF_TEMP_PATH);
361ef68647SAndreas Gohr
376ea88a05SAndreas Gohr        $format = $pagesize;
38acf3824dSGerrit Uitslag        if ($orientation == 'landscape') {
39acf3824dSGerrit Uitslag            $format .= '-L';
40acf3824dSGerrit Uitslag        }
416ea88a05SAndreas Gohr
4222dc1803SAndreas Gohr        switch ($docLang) {
435bd9be9cSGerrit Uitslag            case 'zh':
445bd9be9cSGerrit Uitslag            case 'zh-tw':
455bd9be9cSGerrit Uitslag            case 'ja':
465bd9be9cSGerrit Uitslag            case 'ko':
475bd9be9cSGerrit Uitslag                $mode = '+aCJK';
485bd9be9cSGerrit Uitslag                break;
495bd9be9cSGerrit Uitslag            default:
505bd9be9cSGerrit Uitslag                $mode = 'UTF-8-s';
515bd9be9cSGerrit Uitslag        }
525bd9be9cSGerrit Uitslag
5322dc1803SAndreas Gohr        parent::__construct([
540119ca25SAndreas Gohr            'mode' => $mode,
55f8f1ee5aSAndreas Gohr            'format' => $format,
565d71cf21SGerrit Uitslag            'default_font_size' => $fontsize,
570576bb86SMichael Große            'ImageProcessorClass' => DokuImageProcessorDecorator::class,
5822dc1803SAndreas Gohr            'tempDir' => _MPDF_TEMP_PATH, //$conf['tmpdir'] . '/tmp/dwpdf'
5922dc1803SAndreas Gohr            'SHYlang' => $docLang,
6022dc1803SAndreas Gohr        ]);
610576bb86SMichael Große
62c00b769aSLarsDW223        $this->autoScriptToLang = true;
63c00b769aSLarsDW223        $this->baseScript = 1;
64c00b769aSLarsDW223        $this->autoVietnamese = true;
65c00b769aSLarsDW223        $this->autoArabic = true;
66c00b769aSLarsDW223        $this->autoLangToFont = true;
67c00b769aSLarsDW223
681ef68647SAndreas Gohr        $this->ignore_invalid_utf8 = true;
692585efdfSKlap-in        $this->tabSpaces = 4;
70567a93d0SGerrit Uitslag
71567a93d0SGerrit Uitslag        // assumed that global language can be used, maybe Bookcreator needs more nuances?
72567a93d0SGerrit Uitslag        $this->SetDirectionality($lang['direction']);
731c9fae9eSAndreas Gohr    }
741ef68647SAndreas Gohr
751c9fae9eSAndreas Gohr    /**
761c9fae9eSAndreas Gohr     * Cleanup temp dir
771c9fae9eSAndreas Gohr     */
78*852931daSAndreas Gohr    public function __destruct()
7932ff69b6SAndreas Gohr    {
80acf3824dSGerrit Uitslag        io_rmdir(_MPDF_TEMP_PATH, true);
811ef68647SAndreas Gohr    }
821ef68647SAndreas Gohr
83a06728a6SAndreas Gohr    /**
84a06728a6SAndreas Gohr     * Decode all paths, since DokuWiki uses XHTML compliant URLs
852bf2edefSGerrit Uitslag     *
862bf2edefSGerrit Uitslag     * @param string $path
872bf2edefSGerrit Uitslag     * @param string $basepath
88a06728a6SAndreas Gohr     */
89*852931daSAndreas Gohr    public function GetFullPath(&$path, $basepath = '')
9032ff69b6SAndreas Gohr    {
91a06728a6SAndreas Gohr        $path = htmlspecialchars_decode($path);
92a06728a6SAndreas Gohr        parent::GetFullPath($path, $basepath);
93a06728a6SAndreas Gohr    }
941ef68647SAndreas Gohr}
95