xref: /plugin/dw2pdf/DokuPDF.class.php (revision 32ff69b6d150c9fcb79cd10b4d303f825b05eca0)
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 */
10*32ff69b6SAndreas Gohr
11*32ff69b6SAndreas 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 */
19*32ff69b6SAndreas Gohrclass DokuPDF extends \Mpdf\Mpdf
20*32ff69b6SAndreas 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     */
29*32ff69b6SAndreas Gohr    function __construct($pagesize = 'A4', $orientation = 'portrait', $fontsize = 11)
30*32ff69b6SAndreas Gohr    {
315bd9be9cSGerrit Uitslag        global $conf;
325bd9be9cSGerrit Uitslag
33*32ff69b6SAndreas Gohr        if (!defined('_MPDF_TEMP_PATH')) define('_MPDF_TEMP_PATH', $conf['tmpdir'] . '/dwpdf/' . rand(1, 1000) . '/');
341c9fae9eSAndreas Gohr        io_mkdir_p(_MPDF_TEMP_PATH);
351ef68647SAndreas Gohr
366ea88a05SAndreas Gohr        $format = $pagesize;
37acf3824dSGerrit Uitslag        if ($orientation == 'landscape') {
38acf3824dSGerrit Uitslag            $format .= '-L';
39acf3824dSGerrit Uitslag        }
406ea88a05SAndreas Gohr
415bd9be9cSGerrit Uitslag        switch ($conf['lang']) {
425bd9be9cSGerrit Uitslag            case 'zh':
435bd9be9cSGerrit Uitslag            case 'zh-tw':
445bd9be9cSGerrit Uitslag            case 'ja':
455bd9be9cSGerrit Uitslag            case 'ko':
465bd9be9cSGerrit Uitslag                $mode = '+aCJK';
475bd9be9cSGerrit Uitslag                break;
485bd9be9cSGerrit Uitslag            default:
495bd9be9cSGerrit Uitslag                $mode = 'UTF-8-s';
505bd9be9cSGerrit Uitslag
515bd9be9cSGerrit Uitslag        }
525bd9be9cSGerrit Uitslag
531ef68647SAndreas Gohr        // we're always UTF-8
540119ca25SAndreas Gohr        parent::__construct(
550119ca25SAndreas Gohr            array(
560119ca25SAndreas Gohr                'mode' => $mode,
57f8f1ee5aSAndreas Gohr                'format' => $format,
580576bb86SMichael Große                'fontsize' => $fontsize,
590576bb86SMichael Große                'ImageProcessorClass' => DokuImageProcessorDecorator::class,
6098a938f1SGerrit Uitslag                'tempDir' => _MPDF_TEMP_PATH //$conf['tmpdir'] . '/tmp/dwpdf'
610119ca25SAndreas Gohr            )
620119ca25SAndreas 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;
721c9fae9eSAndreas Gohr    }
731ef68647SAndreas Gohr
741c9fae9eSAndreas Gohr    /**
751c9fae9eSAndreas Gohr     * Cleanup temp dir
761c9fae9eSAndreas Gohr     */
77*32ff69b6SAndreas Gohr    function __destruct()
78*32ff69b6SAndreas Gohr    {
79acf3824dSGerrit Uitslag        io_rmdir(_MPDF_TEMP_PATH, true);
801ef68647SAndreas Gohr    }
811ef68647SAndreas Gohr
82a06728a6SAndreas Gohr    /**
83a06728a6SAndreas Gohr     * Decode all paths, since DokuWiki uses XHTML compliant URLs
842bf2edefSGerrit Uitslag     *
852bf2edefSGerrit Uitslag     * @param string $path
862bf2edefSGerrit Uitslag     * @param string $basepath
87a06728a6SAndreas Gohr     */
88*32ff69b6SAndreas Gohr    function GetFullPath(&$path, $basepath = '')
89*32ff69b6SAndreas Gohr    {
90a06728a6SAndreas Gohr        $path = htmlspecialchars_decode($path);
91a06728a6SAndreas Gohr        parent::GetFullPath($path, $basepath);
92a06728a6SAndreas Gohr    }
931ef68647SAndreas Gohr}
94