Здравствуйте! В данной статье мы рассмотрим автоматическую генерацию PDF документа средствами PHP. Реализуем возможность сохранять любую статью на сайте в PDF формате. Данный функционал будем разворачивать на CMS 1c-Bitrix. Чем больше изучаю эту платформу, тем больше убеждаюсь в качестве её разработки.
Итак, общий алгоритм будет следующим: при сохранении, ипдейте элемента в инф. блоке, создается/обновляется PDF документ. Что бы ни изобретать велосипед, для создания PDF файла, будем использовать библиотеку mPDF (http://mpdf1.com/) . На момент написания статьи, последний актуальный релиз mPDF v5.7. Качаем архив, разархивируем и заливаем на сервер (в корень сайта).
Теперь задача стоит в выборе метода генерации, можно создать отдельный скрипт, передать ему ID элемента и на выходе выплюнуть сгенерированный файл, можно повесить обработчик на события: создание и апдейт элемента инф. блока. Для теста я выбрал второй вариант, т.к. поток статей не очень большой и не будет существенной нагрузки при перезаписи или создании PDF документов.
Теперь при создании или апдейте элемента будет создаваться или обновляться PDF файл с текстом статьи. В данном примере текст документа генерируется из названия и детального описания элемента. Названием файла выступает его уникальный ID.
Так же прописываем обработчик, который будет удалять сгенерированный файл, при удалении элемента:
вначале закинул в эту папку левый файл и там выполнил команду оба значения были равны нулю, но решил сделать как вы надоумели, в исполняемом файле запустить))) и опа, local value равно 2, хотя master 0.
1) надо создать .htaccess внутри /catalog , в нём переопределить, посмотреть на local ещё раз.
2) Master 0 , т.к., видимо, в конфиге веб-сервера для вашего виртуал хоста так указано (или так по умолчанию), далее вы его переопределяете через корневой .htaccess для всего проекта, а локальным .htaccess уже ставите для конкретной папки.
По идее, локальная установка как раз должна дать local 0 в этой папке.
Вячеслав Трембач, тут все хитрее оказалось, и меня удивляет почему сразу не понял это )))
Bitrix же использует роутинг, и получается если мы напрямую к папке не обращаемся, изначальный вход у нас происходит если не ошибаюсь то на /bitrix/urlrewrite.php
Поэтому решил задачу тем что
передаю url не
/catalog2/model-okb-9102-csx/?wd_export=Y&pdf=Y (поэтому и были расхождения в master и local значения параметры func_overload)
а /catalog2/detail.php?wd_export=Y&pdf=Y&ELEMENT_CODE=okb-9102-csx
И все заработало! )))))
Спасибо большое, Вячеслав за участие в этом небольшом расследовании ))) Надеюсь эти комментарии кому то помогут ))
Щербак Михаил написал: require($_SERVER["DOCUMENT_ROOT"]."/MPDF57/mpdf.php");
Здравствуйте. Подскажите что не так. У меня с этой строчной "require($_SERVER["DOCUMENT_ROOT"]."/Папка/mpdf.php");" в файле init.php функция IBlockAfterSave зависает. помогает только Restart httpd В логах ничего нет. версию MPDF пробовал и 5.7 и 6.0. Заранее спасибо.
Ага. Меня тоже засмущала строчка из описания библиотеки. mPDF is not compatible with PHP function overloading (mbstring.func_overload) Сейчас у меня ка просит битрикс mbstring.func_overload=2 PHP Version 7.0.33Ну все же попробую...
Груздев Александр, Мы решили эту проблему просто. Для директории со скриптом который генерит pdf установили значение mbstring.func_overload=0 А остальной сайт работает с mbstring.func_overload=2 ))
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».