Генерирование pdf из данных acf на wordpress?
Добрый день! Стоит такой вопрос о генерировании pdf файлов определенных размеров с подставленными в необходимые места данными полей из Advanced custom field?
Может кто-нибудь знает решение, пока плагинов подходящих не особо нашел
Дополнительно:
Файлы генерируются обычно под какие-то конкретные задачи и с нужной формой, поэтому скорее всего плагинов под это и не найти. Это лучше с помощью библиотек сделать самостоятельно.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Генерацию PDF из ACF обычно делают не плагином "под любую задачу", а через PHP-библиотеку. Причина простая: PDF почти всегда имеет конкретный макет, размеры, отступы, шрифты и места для подстановки данных. Универсальный плагин редко попадает в нужный результат.
Для WordPress чаще используют:
mPDF- удобен для HTML -> PDF, поддерживает CSS и кириллицу;Dompdf- тоже HTML -> PDF, но с ограничениями по CSS;TCPDF- больше контроля, но верстать сложнее.Пример с mPDF:
use MpdfMpdf; add_action('template_redirect', function () { if (!isset($_GET['download_pdf']) || !is_singular('post')) { return; } $post_id = get_the_ID(); $html = '<h1>' . esc_html(get_the_title($post_id)) . '</h1>'; $html .= '<p>Номер: ' . esc_html(get_field('contract_number', $post_id)) . '</p>'; $html .= '<p>Клиент: ' . esc_html(get_field('client_name', $post_id)) . '</p>'; $mpdf = new Mpdf([ 'format' => 'A4', 'default_font' => 'dejavusans', ]); $mpdf->WriteHTML($html); $mpdf->Output('document-' . $post_id . '.pdf', 'D'); exit; });
Если PDF должен быть строго определенного размера, задайте формат:
$mpdf = new Mpdf([ 'format' => [210, 297], 'margin_left' => 10, 'margin_right' => 10, 'margin_top' => 10, 'margin_bottom' => 10, ]);
Для продакшена такую логику лучше вынести в небольшой плагин, а не в шаблон темы. Также добавьте проверку прав, nonce или уникальный токен, если PDF содержит персональные данные.