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