Ошибка подпроцесса в wkhtmltopdf в среде докера

Получение ошибки ниже, когда я пытаюсь запустить wkhtmltopdf в среде докера.

subprocess.CalledProcessError: Command '['wkhtmltopdf', '--encoding', 'utf8', '--margin-top', '10', '--quiet', '/tmp/wkhtmltopdf85qv7fvc.html', '-']' died with <Signals.SIGABRT: 6>.

Код виден ниже.

Он работает в бродячей машине Ubuntu 16.04. Однако, когда я перемещаю его в среду докера, происходит сбой с ошибкой выше. Сначала я использовал образ Python3.6, затем изменил его на образ Ubuntu 16.04, думая, что, возможно, wkhtmltopdf требует более полной среды Linux. Но все равно не повезло.

from django.http import HttpRequest
from wkhtmltopdf.views import PDFTemplateResponse

def generate_invoice_pdf(download_pdf=False, **kwargs):
    """
    Render html to PDF
    """
    file_name = kwargs['file_name']
    template = kwargs['template']

    context = {
        "first_Name": "John",
        "last_name": "Doe"
    }

    # Create request object
    request = HttpRequest()

    params = {
        'request': request,
        'template': template,
        'filename': os.path.basename(file_name),
        'context': context,
        'cmd_options': {'margin-top': 10, },
        'show_content_in_browser': True
    }

    response = PDFTemplateResponse(**params)

    # write the rendered content to a file
    with open(file_name, "wb") as f:
        f.write(response.rendered_content)   # Part throwing the error

    if download_pdf:
        return response
    else:
        msg = 'PDF Generated: {}'.format(file_name)
        return msg

1 ответ

Проблема в том, что wkhtmltopdf требует DISPLAY / Xserver.

С помощью openlabs/docker-wkhtmltopdf как базовое изображение может решить вашу проблему.

Другие вопросы по тегам