Ошибка подпроцесса в 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
как базовое изображение может решить вашу проблему.