Любителям PDF посвящается :)

Любителям PDF посвящается :)

от Vadim Tabunshchik -
Количество ответов: 4
Изображение пользователя Developers

В базе плагинов попалось такое: PDF Document (gradeexport_pdf)

Последняя версия: 2011112900 для Moodle 2.2, 2.3, 2.4. Больше пяти лет не обновлялся в думах

Установил в Мудл 3.4 и 3.5 - не работает, поковырял, вот что получилось:

001

PDF файл:

002

Пока не могу побороть один косяк: в название файла не подставляется короткое имя курса и get_string('grades'). Скачивается с названием «___.pdf»

Может кто что подскажет? улыбаюсь

Архив с плагином прикрепил. Русский в наличии.

В ответ на Vadim Tabunshchik

Re: Любителям PDF посвящается :)

от Виталий Лавров -
Изображение пользователя Эксперт по Moodle

Чтобы задать имя сохраняемого файла обычно нужно было задать заголовок

Content-Disposition: attachment; filename='xxx'

Как это сделать в moodle - не знаю.

Строчек вида

header("Content-Disposition: attachment; filename=\"$downloadfilename\"");

в коде много. Может есть возможность воспользоваться примерами кода из lib/filelib.php: send_file() ?

В ответ на Виталий Лавров

Re: Любителям PDF посвящается :)

от Vadim Tabunshchik -
Изображение пользователя Developers

Спасибо, Виталий.

Но дело не в этом, я разобрался. Всё дело в библиотеке tcpdf, откуда используется функция Output().

Второй параметр у неё может принимать значения:

  • I: отправить файл встроенным в браузер (по умолчанию). Плагин используется, если он доступен. Используется заданное имя, когда вы выбираете опцию «Сохранить как» по ссылке и можно скачать файл с указанным именем.
  • D: отправить в браузер с принудительной загрузкой файла с указанным именем.
  • F: сохранение на сервере.
  • S: возвращает документ в виде строки (имя игнорируется).
  • FI: равнозначно настройкам F + I
  • FD: равнозначно настройкам F + D
  • E: возвращает документ в виде base64 mime multi-part для вложения в сообщение Email (RFC 2045)

Так вот, во всех случаях, окромя как с настройкой F (FI или FD), из названия файла вырезаются все символы и заменяются «_» (Note that special characters are removed and blanks characters are replaced with the underscore character).

В исходной версии плагина функция имеет вид: $doc->Output($downloadfilename,'D');

Я поменял на $doc->Output($downloadfilename,'FD');

В результате в 2.4 всё отработало нормально, скачивается файл с названием «Тест_Курс Оценки.pdf». А в 3.4 - облом, не работает, изменили библиотеку tcpdf, теперь с параметром 'FD' нужно сохранять файл локально во временной папке (раньше он в буфере обитал), только потом можно скачать. Т. е., геморроя добавилось, а стоит ли возиться, пока не знаю (см. ниже)

Ещё на заметку: если журнал оценок представляет собой «простыню» на десятки-сотни студентов и более десяти оцениваемых элементов курса (да ещё с безразмерными названиями), то PDF использовать неудобно. Этот плагин так - баловство для мелких курсов с небольшим журналом. С Excel-файлом удобнее работать, да и по размеру он в несколько раз меньше выходит (.pdf - 955 КБ, .xlsx - 124 КБ)

В ответ на Vadim Tabunshchik

Re: Любителям PDF посвящается :)

от Vadim Dvorovenko -
Изображение пользователя Developers Изображение пользователя Майнтейнер перевода

Тогда нужно сначала создать временный файл функцией php tempnam()

После этого подготовить файл через tcpdf

После этого оправить его функцией moodle send_file с параметром $dontdie = true;

После этого вызаать unlink(имя файла).

В send_file можно указать нормальное имя файла