@redesupar

Как сделать pdf файл для скачивания из элемента битрикс?

Здравствуйте! Подскажите пожалуйста, делаю переобразования в pdf файл данных из элемента битрикс внутри детальной новости по одной статье, использую dompdf
В result_modifier пишу
$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>'.

   '<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(0);


$el = new CIBlockElement;
$PROP = array();
$PROP['ATT_PDF_FILE'] = CFile::MakeFileArray($output);
$arUpdateArticle = Array(
  "PROPERTY_VALUES"=> $PROP,
);
$res = $el->Update($articleID, $arUpdateArticle);


он должен создавать файл и закидывать его в свойства типа файл ATT_PDF_FILE, но ничего не происходит.
Делаю еще так
$dompdf->stream($articleTitle . ".pdf");
вместо $output = $dompdf->output(0);

тогда при входе на детальную новость сразу отдает pdf, но он открывается с ошибкой.
Если открыть этот файл редактором то там содержание такого формата
65000bef2e16d217318199.png
  • Вопрос задан
  • 182 просмотра
Решения вопроса 1
gromdron
@gromdron
Работаю с Bitrix24
CFile::MakeFileArray

MakeFileArray принимает параметром физический файл который будет, т.е. сначала вам нужно создать корректный pdf файл и положить его куда-нибудь в tmp директорию, а оттуда сохранить.

А у вас судя по всему render() отрисовывается в контексте текущей страницы, где уже выведен хедер и от этого файл битый.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы