dompdf не обрабатывает специальные символы при создании PDF - PullRequest
0 голосов
/ 28 июня 2018

Я знаю, что это дублирующий вопрос, но я не нахожу решение из существующих вопросов. Итак, я снова задаю тот же вопрос.

Я использую библиотеку dompdf версии 0.7.0. При генерации PDF есть код вроде

 $html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></head><body>' . $html . '</body></html>';

    if (get_magic_quotes_gpc())
    {
      $html = stripslashes($html);
    }

    $dompdf    = new DOMPDF;
    $dompdf->loadHTML($html, 'UTF-8');
    $dompdf->setPaper('A4', 'landscape');
    $dompdf->render();

$output = $dompdf->output();
$dompdf->stream("test.pdf", array("Attachment" => 1));

В переменной $ html у меня есть содержимое, которое включает в себя данные, имеющие специальные символы, такие как «Wimić».

Но после генерации pdf он показывает меня как "Wimi?". Я не знаю, как я могу решить это. Есть ли решение для того же.

Это функция потока:

function stream($options = '')
    {
        if (!is_array($options)) {
            $options = array();
        }

        if (headers_sent()) {
            die("Unable to stream pdf: headers already sent");
        }

        $debug = empty($options['compression']);
        $tmp = ltrim($this->output($debug));

        header("Cache-Control: private");
        header("Content-type: application/pdf");

        header("Content-Length: " . mb_strlen($tmp, '8bit'));
        $filename = (isset($options['Content-Disposition']) ? $options['Content-Disposition'] : 'document.pdf');

        $filename = str_replace(array("\n", "'"), "", basename($filename, ".pdf")) . ".pdf";

        if (!isset($options["Attachment"])) {
            $options["Attachment"] = true;
        }

        $attachment = $options["Attachment"] ? "attachment" : "inline";

        $encoding = mb_detect_encoding($filename);
        $fallbackfilename = mb_convert_encoding($filename, "ISO-8859-1", $encoding);
        $encodedfallbackfilename = rawurlencode($fallbackfilename);
        $encodedfilename = rawurlencode($filename);

        header(
            "Content-Disposition: $attachment; filename=" . $encodedfallbackfilename . "; filename*=UTF-8''$encodedfilename"
        );

        if (isset($options['Accept-Ranges']) && $options['Accept-Ranges'] == 1) {
            header("Accept-Ranges: " . mb_strlen($tmp, '8bit'));
        }

        echo $tmp;
        flush();
    }
...