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

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

    Использую 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/

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

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