Генерирование pdf из данных acf на wordpress?

Ссылка скопирована
1 ответ

Добрый день! Стоит такой вопрос о генерировании pdf файлов определенных размеров с подставленными в необходимые места данными полей из Advanced custom field?
Может кто-нибудь знает решение, пока плагинов подходящих не особо нашел

Дополнительно:

Файлы генерируются обычно под какие-то конкретные задачи и с нужной формой, поэтому скорее всего плагинов под это и не найти. Это лучше с помощью библиотек сделать самостоятельно.

  • Когда-то юзал для этого mpdf для генерации договора купли-продажи
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Дмитрий К. Ответ

    Генерацию 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' =&gt; 'A4',
            'default_font' =&gt; 'dejavusans',
        ]);
     
        $mpdf-&gt;WriteHTML($html);
        $mpdf-&gt;Output('document-' . $post_id . '.pdf', 'D');
        exit;
    });

    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' =&gt; 'A4', 'default_font' =&gt; 'dejavusans', ]); $mpdf-&gt;WriteHTML($html); $mpdf-&gt;Output('document-' . $post_id . '.pdf', 'D'); exit; });

    Если PDF должен быть строго определенного размера, задайте формат:

    $mpdf = new Mpdf([
        'format' =&gt; [210, 297],
        'margin_left' =&gt; 10,
        'margin_right' =&gt; 10,
        'margin_top' =&gt; 10,
        'margin_bottom' =&gt; 10,
    ]);

    $mpdf = new Mpdf([ 'format' =&gt; [210, 297], 'margin_left' =&gt; 10, 'margin_right' =&gt; 10, 'margin_top' =&gt; 10, 'margin_bottom' =&gt; 10, ]);

    Для продакшена такую логику лучше вынести в небольшой плагин, а не в шаблон темы. Также добавьте проверку прав, nonce или уникальный токен, если PDF содержит персональные данные.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно