Как подружить 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С-Битрикс и mPDF независимо друг от друга работают так, как и задумывалось их разработчиками.

комментариев 5
  • Иван

    Использую VDS от timeweb, все перепробовал. Не помогает. MPDF60. PDF генерируется только если указать php_admin_value mbstring.func_overload 0 на всю директорию сайта. У кого-нибудь есть проблемы с данным вариантом решения?

    Ответить
    • hc

      Ставьте только на ту папку, где находиться скрипт вызывающий MPDF. Если его нет, перепишите вызов, что бы это была отдельная директория на сайте – например site.ru/pdfgen и для нее задавайте параметр. Всё будет прекрасно работать – мы только так и делаем.

      Ответить
    • Тоже столкнулся с проблемой запуска mPDF в оболочке Битрикс. Но не стал заморачиваться с настройкой mbstring.func_overload использовал tsPDF.
      Вот моя статейка по теме: Битрикс: Как конвертировать документ в PDF? https://web4.kz/services/cases/bitriks-dokumenty-v-pdf-formate/

      Ответить
  • Олег

    если нет доступа к виртуальному хосту, то можно внести изменения в файл php.ini . Например для php7

    ниже строки
    mbstring.func_overload=2
    прописать
    [PATH=/ПУТЬ/upload/mpdf/]
    mbstring.func_overload=0

    Ваш ПУТЬ вы можете получить, как результат вывода кода

    Библиотеку я положил в папку /upload/mpdf/ чтобы ей можно было пользоваться со всех сайтов подключенных к битриксу.

    Туда же, это важно, я положил файл c кодом подключения к библиотеке.

    Ответить
  • Олег

    Ваш ПУТЬ вы можете получить, как результат вывода кода ” echo $_SERVER[“DOCUMENT_ROOT”];”

    Ответить
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *