Задать вопрос

Почему при вводе пользователем параметров отчета в настройках модуля перестает работать кнопка?

Здравствуйте, создал модуль на 1С-Битрикс, который добавляет кнопку в админку и позволяет экспортировать отчеты в PDF формате. Решил создать файл options.php чтобы администратор смог сам устанавливать параметры отчета (размер шрифта, отступы и тд).

Столкнулся с проблемой: после ввода параметров в настройках модуля кнопка экспорта PDF перестает работать. Более того, перестает работать и системная кнопка "Экспорт EXCEL", которая отвечает за стандартный экспорт данных в формате Excel.

В модуле также реализован и функционал отправки чеков в PDF формате, и настройки шаблона чеков из options.php спокойно передаются и используются. Однако, при попытке передать параметры, связанные с генерацией отчета (например, font_size), модуль "ломает" функционал экспорта.

Тоесть, если указывать явно, например размер шрифта:
$pdf->SetFont('freeserif', '', 12);
кнопка работает, и я могу скачать отчет. Если я хочу сделать это через переменную, в которую передается параметр пользователем через Option, а именно число, кнопки перестают работать.

Использую Bitrix\Main\Config\Option следующим образом:
Option::set($module_id, "font_size", $_POST["font_size"]);

<td><input type="text" name="font_size" value="<?= Option::get($module_id, "font_size") ?>" /></td>


Генерация PDF-документа с таблицей данных lib/generator/reportgenerator.php:
<?php
namespace PdfDocuments\Generator;

use Bitrix\Main\Config\Option; 
require_once $_SERVER['DOCUMENT_ROOT'] . '/my_module/lib/tcpdf/tcpdf.php';

class ReportGenerator
{
    public function generatePDF($tableData)
    {
        $module_id = "my_module";
        $fontSize = Option::get($module_id, "font_size", 12); 

        $pdf = new \TCPDF();
        
        $pdf->SetCreator(PDF_CREATOR);
        $pdf->SetAuthor('My module');
        $pdf->SetTitle('Report');
        $pdf->SetSubject('Table with data');
        $pdf->SetMargins(15, 15, 15); 
 
        $pdf->SetFont('freeserif', '', $fontSize); 
        
        $pdf->AddPage();
        
        $html = '<table border="1" cellpadding="5">';

        if (isset($tableData[0])) {
            $html .= '<thead><tr>';
            foreach ($tableData[0] as $header) {
                $html .= '<th>' . htmlspecialchars($header) . '</th>';
            }
            $html .= '</tr></thead>';
        }

        $html .= '<tbody>';
        for ($i = 1; $i < count($tableData); $i++) {
            $html .= '<tr>';
            foreach ($tableData[$i] as $cell) {
                $html .= '<td>' . htmlspecialchars($cell) . '</td>';
            }
            $html .= '</tr>';
        }
        $html .= '</tbody></table>';

        $pdf->writeHTML($html, true, false, true, false, '');

        $pdf->Output($_SERVER['DOCUMENT_ROOT'] . '/my_module/temp/report.pdf', 'F');
    }
}


AJAX-обработчик для экспорта данных в PDF ajax/export_pdf.php:
<?php
use Bitrix\Main\Config\Option;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $tableData = isset($_POST['tableData']) ? json_decode($_POST['tableData'], true) : [];

    if (!empty($tableData)) {
        $module_id = "my_module";

        $fontSize = Option::get($module_id, "font_size", 12);

        require_once $_SERVER['DOCUMENT_ROOT'] . '/my_module/lib/generator/reportgenerator.php';

        $pdfGenerator = new \PdfDocuments\Generator\ReportGenerator($fontSize);
        $pdfGenerator->generatePDF($tableData);
    }
}
?>
  • Вопрос задан
  • 233 просмотра
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы