Создание PDF KnpSnappyBundle превышает максимальное время выполнения

1

Я пытаюсь создать PDF файл с помощью KnpSnappyBundle в Symfony, но всякий раз, когда я пытаюсь выполнить это действие, он превышает максимальное время выполнения 60 секунд в PHP.

Вот действие:

/**
* @Route("/download-agreement", name="download_agreement")
*/
public function downloadAgreementAction()
{
    $session = new Session();
    $html = $this->renderView('client-representation.html.twig', array(
        'clientAgreementData'  => $session->get("sessionClientAgreementData"),
        "pdfStatus" => true
        ));

    return new Response(
        $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="error.pdf"'
            )
        );
}

Это также, по-видимому, превышает время выполнения, когда я использую абсолютные URL-адреса для активов в шаблоне ветки, например, absolute_url(asset('css/agreement.css')). Если я использую относительные URL-адреса, то css будет просто проигнорирован, и PDF будет генерировать, но, конечно, мне нужен стиль.

Есть идеи?

EDIT: для всех, кто имеет эту проблему, использование абсолютных URL-адресов СЛЕДУЕТ работать на производственном сервере; на localhost, однако, у вас может возникнуть проблема, с которой я столкнулся. Спасибо шаласу.

  • 0
    Похоже, что это может быть проблема с попыткой получить абсолютные URL-адреса. Попробуйте положить set_time_limit(0); в качестве первой строки в вашем действии контроллера, чтобы удалить 60-секундный тайм-аут, а затем посмотреть, завершится ли когда-либо страница, или даже попытаться выполнить return new Response($html); чтобы убедиться, что вы все еще получаете то, что ожидаете.
Теги:
pdf
twig

1 ответ

1
Лучший ответ

Хорошо, решение действительно просто на самом деле, проблема в том, что он не будет работать в среде dev (local), потому что по какой-то причине wkhtmltopdf не любит localhost: 8000... что угодно.

Из этой проблемы (и многих других) открылась эта проблема в пакете laravel.
Еще один из пакетов https://github.com/KnpLabs/KnpSnappyBundle/issues/66

В первый раз, когда я работал с KnpSnappyBundle, я использовал множество альтернатив, безуспешно.

"Тайм-аут превышен" возникает при попытке генерировать pdf файл с использованием представления (то же самое для всех связанных методов класса Pdf), который содержит один или несколько абсолютных URL-адресов.

Чтобы справиться с этой ошибкой, я использую конкретный шаблон, используемый только для генерации Pdf, где я помещаю css непосредственно в блок <style></style>.
Таким образом, стиль правильно применяется.

  • 0
    Поместить все бутстрап в тег стиля, безусловно, не идеально.
  • 1
    Используйте CDN для начальной загрузки и других внешних библиотек. Это быстрая и грязная альтернатива для очень блокирующей ошибки, которая возникает в определенном контексте (только с локального хоста), также вам будет действительно трудно найти «идеальное» решение. Удачи
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню