Для этого нам понадобится библиотека DOMPDF, с помощью которой можно создавать PDF файлы из HTML кода. Закидываем файлы с библиотекой в удобное для нас место и подключаем ее в файле-обработчике.
<?//Подключаем ядро Битрикс и главный модуль
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
use Bitrix\Main\Loader; //Подключаем автозагрузку dompdf
require_once($_SERVER["DOCUMENT_ROOT"]."/pdffolder/dompdf/autoload.inc.php");
use Dompdf\Dompdf;
Далее в переменную записываем html-код, полученный, к примеру, из формы, который необходимо преобразовать:
$textPdf = "<html lang=ru><meta http-equiv=X-UA-Compatible content=\"IE=edge\"><body>
<style>
body {padding: 30px;font-family: DejaVu Sans;margin: 0}
table {
width: 100%;
margin-bottom: 20px;
border: 1px solid #dddddd;
border-collapse: collapse;
}
table th {
font-weight: bold;
padding: 5px;
background: #efefef;
border: 1px solid #dddddd;
}
table td {
border: 1px solid #dddddd;
padding: 5px;
}
</style>
<body>";
$textPdf .= html_entity_decode($_POST["pdfcont"],ENT_COMPAT,"UTF-8");
$textPdf .= "</body></html>";
После чего создаем экземпляр класса Dompdf и с помощью необходимых функций формируем временный файл:
$dompdf = new Dompdf();
$dompdf->loadHtml($textPdf);
$dompdf->setPaper('a4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
file_put_contents('temp.pdf', $output);
Чуть более подробнее о методах Dompdf можно почитать здесь.
Итоговым шагом является создание нового элемента и запись в его свойство ATT_PDF_FILE сформированного нами ранее pdf-файла:
global $USER;
$el = new CIBlockElement;
$PROP = array();
$PROP['ATT_PDF_FILE'] = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"]."/temp.pdf");
$arLoadProductArray = Array(
"MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем
"IBLOCK_SECTION_ID" => false, // элемент лежит в корне раздела
"IBLOCK_ID" => 1, // ID инфоблока
"NAME" => "Имя элемента",
"ACTIVE" => "Y", // активен
"PROPERTY_VALUES" => $PROP
); $PRODUCT_ID = $el->Add($arLoadProductArray); $_SESSION['PRODUCT_ID'] = $PRODUCT_ID;