Как создать pdf файл, который можно будет скачать из элемента битрикса?

Изображение к вопросу
  • 12 сентября 2023 г. 7:07
Ответы на вопрос 2
Для создания PDF файла в Битриксе и сохранения его в свойство типа "Файл" элемента, можно использовать библиотеку Dompdf, которая позволяет генерировать PDF файлы из HTML кода.

Вот пример кода, который можно использовать для этой задачи:

```php
$articleTitle = $arResult['NAME']; // название статьи
$articleImg = base64_encode(file_get_contents($arResult['DETAIL_PICTURE']['SRC'])); // картинка
$articleText = $arResult['DETAIL_TEXT']; // текст статьи
$articleID = $arResult['ID']; // ID статьи-элемента

$articleToPdf = '<html lang="ru"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><body>
<style type="text/css">
    * {box-sizing: border-box; margin: 0; padding: 0;}
    body {font-family: DejaVu Sans;}
    h1 {font-size: 25px; text-align: center;}
    img {margin: 0px 20px; max-width: 100%;}
    p {font-size: 15px; line-height: 23px;}
</style>
<body>'.
   '<h1>' . $articleTitle  . '</h1>'.
   '<img src="data:image/png;base64,' . $articleImg . '" alt="Article Image">'.
   '<p>'. $articleText . '</p>'.
'</body></html>';

require_once $_SERVER['DOCUMENT_ROOT'].'/f/dompdf/autoload.inc.php';

use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml($articleToPdf);
$dompdf->setPaper('a4', 'portrait');
$dompdf->render();
$output = $dompdf->output();

$el = new CIBlockElement;
$PROP = array();
$filename = $articleTitle . '.pdf';
$file = CFile::MakeFileArray($output);
$file['MODULE_ID'] = 'iblock';

$fileID = CFile::SaveFile($file, 'iblock');

if ($fileID) {
   $PROP['ATT_PDF_FILE'] = $fileID;
   $arUpdateArticle = Array("PROPERTY_VALUES" => $PROP);
   $res = $el->Update($articleID, $arUpdateArticle);
}
```

Перед обновлением статьи, мы сохраняем созданный PDF файл в каталог по умолчанию, используя `CFile::SaveFile()`. Затем мы получаем ID сохраненного файла и сохраняем его в свойство `ATT_PDF_FILE`.

Пожалуйста, обратите внимание, что вам необходимо создать папку `/f/dompdf` на вашем сервере и загрузить в нее составляющие пакета Dompdf.
CFile::MakeFileArray принимает физический файл в качестве параметра. Для начала необходимо создать корректный pdf файл и сохранить его во временной директории. После этого вы можете использовать этот файл с помощью функции MakeFileArray. Однако, если в данный момент страница уже содержит вывод, включая заголовок, то это может повредить файл.
Похожие вопросы