Задать вопрос
@gh0st_d0g

Как заставить отдавать pdf файлы с именами в кириллице?

При генерации PDF мне необходимо отдавать файл с именем на кириллице, например
Слово A511/14354354 слово 454545454 слово 15.10.2018 12:07:31
. На выходе файл выдается с именем
_A511_14354354___454545454____15.10.2018 12:07:31
. Внутри самого файла с кодировкой все хорошо. Каким образом сгенерить правильное кириллическое название? Видно что символы пробелов заменяются на "_" и "/" так же.
  • Вопрос задан
  • 1092 просмотра
Подписаться 1 Простой 12 комментариев
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
header('Content-Type: text/html; charset=UTF-8');
            header('Expires: Mon, 30 Jul 1997 05:00:00 GMT');
            header('Cache-Control: no-store, no-cache, must-revalidate');
            header('Cache-Control: post-check=0, pre-check=0', FALSE);
            header('Pragma: no-cache');
            header('Content-transfer-encoding: binary');
            header('Content-Disposition: attachment; filename=мой_русский_пдф.pdf');
            header('Content-Type: application/pdf');
echo $pdfcontent;

не оно?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
https://github.com/tecnickcom/TCPDF/blob/master/tc... тут написано, что специфические символы вырезаются. Этот библиотека лет 5 не обновлялась. Есть современный, mPDF. Но он много жрет.

Если хочешь именно этой библиотекой пользоваться, то сохрани файл на сервере и сам отдавай

Если прочитать документацию, то можно найти вот это:

* @param $dest (string) Destination where to send the document. It can take one of the following values:
  • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
  • D: send to the browser and force a file download with the name given by name.
  • F: save to a local server file with the name given by name.
  • S: return the document as a string (name is ignored).
  • FI: equivalent to F + I option
  • FD: equivalent to F + D option
  • E: return the document as base64 mime multi-part email attachment (RFC 2045)


Соответственно, получаешь содержимое файла с помощью параметра S и отправляешь как тебе надо.

Ниже пример:

$pdfString = $pdf->Output(null, "S");
header('Content-Type: application/pdf');
header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1');
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Disposition: inline; filename="имя файла на кириллице.pdf"');
echo $pdfString;


UPD.:
Если хочешь, чтобы файл сразу скачивался, а не открывался в браузере, то поменяй Content-Disposition: inline; на Content-Disposition: attachment;. В принципе, про то как отдавать файлы с помощью php, можешь прочитать в просторах интернета.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы