Для возможности скачать pdf файл на основании сформированной html страницы на русском языке, динамически сгенерированной на основании данных из инфоблоков bitrix необходимо было выбрать php библиотеку для формирования pdf файла.

Из существующих бесплатных библиотек, которые работают на php и поддерживают utf-8 выбрана библиотека TCPDF.

Для подключения библиотеки необходимо:

  1. Скачать библиотеку: http://sourceforge.net/projects/tcpdf/files/.

  2. Распаковать архив в раздел, в котором будет использоваться библиотека.

  3. В системе нет кириллических шрифтов, для использования кириллицы их нужно добавить.

    Шрифты, готовые к использованию в TCPDF хранятся в папке /fonts внутри директории библиотеки. Можно удалить все файлы кроме helvetica.php, так как он необходим библиотеке для использования по умолчанию.

    При генерации документа TCPDF включает используемые шрифты в документ, каждому шрифту соответствуют три файла, например для шрифта Calibri:

    calibri.php
    calibri.z
    calibri.ctg.z

    Для формирования файлов используем сайт: http://fonts.snm-portal.com/. Необходимо загрузить нужный кириллический шрифт в формате ttf, а сформированные файлы загрузить в папку /fonts.

    Подключаем шрифт в файле:

    require_once 'tcpdf/tcpdf.php'; // подключаем библиотеку
    $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
    $pdf->setPrintHeader(false);
    $pdf->setPrintFooter(false);
    $pdf->SetAuthor("$autor_name"); //автор документа
    $pdf->SetTitle('Счет с '."$date1".' по '."$date2"); //название документа
    $pdf->SetMargins(20, 25, 25); // устанавливаем отступы (20 мм - слева, 25 мм - сверху, 25 мм - справа)
    $pdf->AddPage(); // создаем первую страницу, на которой будет содержимое
    $pdf->SetTextColor(black); // устанавливаем цвет текста
    $pdf->SetFont('Calibri', '', 11);
    $pdf->writeHTMLCell(0, 0, '', '', $html_text, 0, 1, 0, true, '', true); //
    $pdf->Output('Счет с '."$date1".' по '."$date2".'.pdf', 'I'); // задаем имя документа и выводим документ в браузер, заставляя его включить плагин для отображения PDF (если имеется)
  4. Для вывода в браузере отдельного pdf файла без header и footer перед выводом следует очистить буфер:

    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle("Счет");
    $GLOBALS['APPLICATION']->RestartBuffer();

    В конце кода добавить:

    die();
  5. Для использования в документе курсивного или жирного начертания шрифта нужно отдельно добавить в /fonts файлы шрифта курсивного или жирного начертания для загруженного шрифта.


    Затем задать курсивный или жирный стиль шрифта в html или css.

    Следует учесть, что библиотека TCPDF не поддерживает использование псевдоклассов css.



  6. Для получения данных из инфоблока используется метод GetList.

    $res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>50), $arSelect);

    В цикле if происходит запись строк в текстовую переменную и оформление в html таблицу.

    $sum+= $arFields["ID"]; //
    $html_text1.=''.ConvertDateTime($arFields["DATE_CREATE"], "D.M.Y", "ru").''.$arFields["NAME"].''.$arFields["ID"].'';
  7. Для вывода изображения использовать загрузить изображение в файловую систему bitrix и

    $pdf->Image('images/logo.png', 26, 12, 55, 12, 'PNG', '', ''); // 'путь к файлу', отступ по X, отступ по Y, width, height, тип файла
  8. Вместо открытия документа в браузере, документ можно сохранить в файловую систему bitrix, для этого необходимо изменить настройки:

    $pdf->Output(__DIR__ . 'doc.pdf', 'F'); // документ сохраняется в родительском разделе

    Таким образом, мы можем создать pdf файл на основе html страницы с динамическим содержимым из инфоблока bitrix.