Как подружить 1С-Битрикс и mPDF
Если вы установили Битрикс в кодировке UTF-8 и собираетесь использовать mPDF для генерации pdf-документов, то несомненно столкнетесь с проблемой, что русские символы отображаются совсем не так, как это исторически сложилось. Проблема совместимости 1С-Битрикс и mPDF связана со значением параметра
mbstring.func_overload
.
Для корректной работы Битрикс требуется установить
mbstring.func_overload=2
. Небольшое отступление, для чего это нужно. В PHP, для работы с многобайтовой кодировкой (той же UTF-8), используются специальные функции, которые начинаются с префикса
mb_
. Для совместимости со старым кодом, который писался без учета работы с многобайтовой кодировкой, можно включить режим перегрузки функций. Тогда функции вызванные в старом написании будут работать, как функции с префиксом
mb_
. То есть это простой и удобный способ заставить работать многие тысячи строк старого кода с многобайтовой кодировкой и не заниматься утомительной работой по замене вызовов этих функций на новое написание. Параметр
mbstring.func_overload=2
, как раз включает этот фокус.
Без сомнения все это хорошо, пока не начинаешь пользоваться сторонними продуктами, для которых этот параметр надо отключить (
mbstring.func_overload=0
). Как раз к таким относится и mPDF. А так как библиотека, в силу своей функциональности и удобства, широко распространена то часто возникает проблема – когда и хочется, что бы Битрикс работал в UTF-8 и mPDF формировал русские тексты как надо.
Решение этой проблемы есть и оно довольно простое, но применимо только для VDS или собственных серверов, т.е. там где вы сможете немного поправить конфигурацию Apache руками. Смысл решения в том, что для виртуального хоста Apache, где крутиться Битрикс, в директории, откуда вызывается скрипт, который формирует pdf, установить
mbstring.func_overload=0
.
Делается это следующим образом. Для виртуального хоста между <VirtualHost …> </VirtualHost> добавляем блок:
1 2 3 4 | <Directory/path/to/your/script> AllowOverride All php_admin_value mbstring.func_overload0 </Directory> |
И собственно все, 1С-Битрикс и mPDF независимо друг от друга работают так, как и задумывалось их разработчиками.
15:38
Использую VDS от timeweb, все перепробовал. Не помогает. MPDF60. PDF генерируется только если указать php_admin_value mbstring.func_overload 0 на всю директорию сайта. У кого-нибудь есть проблемы с данным вариантом решения?
15:55
Ставьте только на ту папку, где находиться скрипт вызывающий MPDF. Если его нет, перепишите вызов, что бы это была отдельная директория на сайте – например site.ru/pdfgen и для нее задавайте параметр. Всё будет прекрасно работать – мы только так и делаем.
06:24
Тоже столкнулся с проблемой запуска mPDF в оболочке Битрикс. Но не стал заморачиваться с настройкой mbstring.func_overload использовал tsPDF.
Вот моя статейка по теме: Битрикс: Как конвертировать документ в PDF? https://web4.kz/services/cases/bitriks-dokumenty-v-pdf-formate/
01:36
если нет доступа к виртуальному хосту, то можно внести изменения в файл php.ini . Например для php7
ниже строки
mbstring.func_overload=2
прописать
[PATH=/ПУТЬ/upload/mpdf/]
mbstring.func_overload=0
Ваш ПУТЬ вы можете получить, как результат вывода кода
Библиотеку я положил в папку /upload/mpdf/ чтобы ей можно было пользоваться со всех сайтов подключенных к битриксу.
Туда же, это важно, я положил файл c кодом подключения к библиотеке.
01:38
Ваш ПУТЬ вы можете получить, как результат вывода кода ” echo $_SERVER[“DOCUMENT_ROOT”];”