Как заставить WKHTMLTOPDF работать на Heroku? - PullRequest
0 голосов
/ 15 февраля 2019

Я создал веб-сайт, который генерирует PDF с использованием PDFKIT, и я знаю, как установить и настроить путь переменной среды в Window.Мне удалось развернуть мой первый веб-сайт на Heroku, но теперь я получаю сообщение об ошибке «Не найден исполняемый файл wkhtmltopdf:« b »». При попытке создать PDF-файл. Я понятия не имею, как установить и настроить WKHTMLTOPDF на Heroku, потому что этоВ первый раз я имею дело с Linux. Я действительно попробовал все, прежде чем спрашивать это, но даже после этого у меня ничего не получается. Фляга Python 3, установите wkhtmltopdf на heroku

Если возможно, пожалуйста, направьте меняшаг за шагом о том, как установить и настроить это.

Я следил за всем ресурсом и всем, но не мог заставить его работать. Каждый раз, когда я получаю ту же ошибку. Я использую Django версии 2. Pythonверсия 3.7.

Это то, что я получу, если я сделаю стек героку

Доступен стеки кедра-14, контейнер героку-16 * героку-18

Ошибка, я получаюпри создании PDF. Не найден исполняемый файл wkhtmltopdf: «b» »Если этот файл существует, убедитесь, что этот процесс может его прочитать. В противном случае установите wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf

Мой сайт работает очень хорошо на localhost без каких-либо проблем, и, насколько я знаю, я уверен, что сделал что-то не так при установке wkhtmltopdf.

Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

Это нетривиально .Если вы хотите избежать головной боли, описанной ниже, вы можете просто воспользоваться моим сервисом api2pdf: https://github.com/api2pdf/api2pdf.python. В противном случае, если вы хотите попробовать его, см. Ниже.

1) Добавьте это в ваш файл require.txt, чтобы установить специальный пакет wkhtmltopdf для heroku, а также pdfkit.

git+git://github.com/johnfraney/wkhtmltopdf-pack.git
pdfkit==0.6.1

2) Я создал pdf_manager.py в своем приложении для фляги.В pdf_manager.py у меня есть метод:

def _get_pdfkit_config():
     """wkhtmltopdf lives and functions differently depending on Windows or Linux. We
      need to support both since we develop on windows but deploy on Heroku.

     Returns:
         A pdfkit configuration
     """
     if platform.system() == 'Windows':
         return pdfkit.configuration(wkhtmltopdf=os.environ.get('WKHTMLTOPDF_BINARY', 'C:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'))
     else:
         WKHTMLTOPDF_CMD = subprocess.Popen(['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf')], stdout=subprocess.PIPE).communicate()[0].strip()
         return pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)

Причина, по которой у меня есть заявление о платформе, заключается в том, что я работаю на машине с Windows и у меня есть локальный двоичный файл wkhtmltopdf на моем ПК.Но когда я развертываюсь в Heroku, он запускается в их Linux-контейнерах, поэтому мне нужно сначала определить, на какой платформе мы работаем, прежде чем запускать бинарный файл.

3) Затем я создал еще два метода - один для преобразования URL-адреса в pdf, а другой для преобразования необработанного html в pdf.

def make_pdf_from_url(url, options=None):
    """Produces a pdf from a website's url.
    Args:
        url (str): A valid url
        options (dict, optional): for specifying pdf parameters like landscape
            mode and margins
    Returns:
        pdf of the website
    """
    return pdfkit.from_url(url, False, configuration=_get_pdfkit_config(), options=options)

def make_pdf_from_raw_html(html, options=None):
    """Produces a pdf from raw html.
    Args:
        html (str): Valid html
        options (dict, optional): for specifying pdf parameters like landscape
            mode and margins
    Returns:
        pdf of the supplied html
    """
    return pdfkit.from_string(html, False, configuration=_get_pdfkit_config(), options=options)

Я использую эти методы для преобразования в PDF.

...