Здравствуйте, создал модуль на 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);
}
}
?>