Генерация PDF на основе данных с формы в MODX Revo
Довольно часто возникает необходимость генерировать pdf на основе данных с формы.
Ниже небольшое решение как это сделать если стоит пакет ExportPage
вызов формы
exp.Pdf.create — сниппет для формирования pdf
pdf.tpl
email.tpl
Ниже небольшое решение как это сделать если стоит пакет ExportPage
вызов формы
[[!AjaxForm?
&snippet=`FormIt`
&form=`form.pdf`
&emailTpl=`email.tpl`
&pdfTpl=`pdf.tpl`
&hooks=`hpdf,email`
&emailSubject=`сообщение c pdf`
&emailTo=`mail@mail.ru`
&validate=`name:required,email:required,message:required`
&validationErrorMessage=`В форме содержатся ошибки!`
&successMessage=`Сообщение успешно отправлено`
]]
- emailTpl — шаблон письма
- pdfTpl — шаблон pdf
- hpdf — хук для формирования pdf
<?php
/** @var $formit */
/** @var $fields */
/** @var $hook */
$pdfTpl = $modx->getOption('pdfTpl', $formit->config, '', true);
$content = $modx->getChunk($pdfTpl, $fields);
$config = array();
$config = array_merge($config, $fields, array(
'content' => $content
));
$hook->setValue('file_link', $modx->runSnippet('exp.Pdf.create', $config));
return true;
exp.Pdf.create — сниппет для формирования pdf
<?php
/** @var array $scriptProperties */
$pdfTpl = $scriptProperties['pdfTpl'] = trim($modx->getOption('pdfTpl', $scriptProperties, '@INLINE <a href="[[+file]]" target="_blank">download the pdf</a>', true));
$tplEmpty = $scriptProperties['tplEmpty'] = trim($modx->getOption('tplEmpty', $scriptProperties, '', true));
$pageEncoding = $scriptProperties['pageEncoding'] = trim($modx->getOption('pageEncoding', $scriptProperties, 'utf-8', true));
$pageFormat = $scriptProperties['pageFormat'] = trim($modx->getOption('pageFormat', $scriptProperties, 'A4', true));
$pageOrientation = $scriptProperties['pageOrientation'] = trim($modx->getOption('pageOrientation', $scriptProperties, 'L', true));
$pageMargins = $scriptProperties['pageMargins'] = trim($modx->getOption('pageMargins', $scriptProperties, '10,10,10,10', true));
$pageFont = $scriptProperties['pageFont'] = trim($modx->getOption('pageFont', $scriptProperties, 'courier', true));
$pageFontSize = $scriptProperties['pageFontSize'] = trim($modx->getOption('pageFontSize', $scriptProperties, '14', true));
$creator = $scriptProperties['creator'] = $modx->getOption('creator', $scriptProperties, 'ExportPage', true);
$author = $scriptProperties['author'] = $modx->getOption('author', $scriptProperties, 'ExportPage', true);
$prepareCss = $scriptProperties['prepareCss'] = (boolean)$modx->getOption('prepareCss', $scriptProperties, false, true);
$prepareImg = $scriptProperties['prepareImg'] = (boolean)$modx->getOption('prepareImg', $scriptProperties, false, true);
$showLog = $scriptProperties['showLog'] = (boolean)$modx->getOption('showLog', $scriptProperties, false, true);
$toPlaceholder = $scriptProperties['toPlaceholder'] = (boolean)$modx->getOption('toPlaceholder', $scriptProperties, false, true);
$path = $scriptProperties['path'] = trim($modx->getOption('path', $scriptProperties, MODX_BASE_PATH . 'tmp/', true));
$content = $scriptProperties['content'] = $modx->getOption('content', $scriptProperties, '444', true);
$hash = $scriptProperties['hash'] = $modx->getOption('hash', $scriptProperties, sha1(serialize($scriptProperties)), true);
/** @var exportpage $exportpage */
if (!$exportpage = $modx->getService('exportpage', 'exportpage', $modx->getOption('exportpage_core_path', null, $modx->getOption('core_path') . 'components/exportpage/') . 'model/exportpage/', $scriptProperties)) {
return 'Could not load exportpage class!';
}
$exportpage->initialize($modx->context->key, $scriptProperties);
$exportpage->loadPdfTools();
$pdfTools = $exportpage->pdfTools;
$pdfTools->setConfig($scriptProperties);
$row = array_merge($scriptProperties, array(
'file' => '',
));
$output = '';
if (!$stream = $pdfTools->getCompileFile()) {
$output = !empty($tplEmpty) ? $exportpage->pdoTools->getChunk($tplEmpty, $row) : '';
} else {
$row['file'] = $path . $hash . '.pdf';
if (!file_put_contents($row['file'], $stream)) {
$this->modx->log(modX::LOG_LEVEL_ERROR, '[ExportPage] Could not save export file ' . $output);
}
$row['file'] = $modx->getOption('site_url') . ltrim(str_replace(MODX_BASE_PATH, MODX_BASE_URL, $row['file']), '/');
$output = !empty($pdfTpl) ? $exportpage->pdoTools->getChunk($pdfTpl, $row) : $exportpage->pdoTools->getChunk('', $row);
}
if ($toPlaceholder) {
$modx->setPlaceholder($toPlaceholder, $output);
} else {
return $output;
}
pdf.tpl
name: [[+name]]
email: [[+email]]
message: [[+message]]
email.tpl
name: [[+name]]
email: [[+email]]
message: [[+message]]
file_link: [[+file_link]]
Поблагодарить автора
Отправить деньги