2017-11-29 28 views
0

django-wkhtmltopdf을 사용하여 장고 템플릿에서 PDF를 렌더링하려고합니다. 문제는 wkhtmltopdf이 상승하기 시작한다는 것입니다 :Django - wkhmltopdf - CalledProcessError (명령 행에서 sudo로만 작동)

Command '['/usr/bin/wkhtmltopdf', '--encoding', u'utf8', '--quiet', u'False', '/tmp/wkhtmltopdfRDyi61.html', '-']' returned non-zero exit status 1 

문제가하지만 난 심지어 명령 행 (나는 VIRTUALENV에있어)에서 할 수없는 것으로 나타났습니다 위치를 알아낼 수 없습니다 :

wkhtmltopdf http://www.google.com g.pdf 

Loading pages (1/6) 
QPainter::begin(): Returned false============================] 100% 
Error: Unable to write to destination        
Exit with code 1, due to unknown error. 

그것은 단지 sudo 권한으로 작동합니다 (그러나 나는 PyCharmProject 내 사용자 디렉토리에있어) : 나는 또한 발견

sudo wkhtmltopdf http://www.google.com g.pdf 

이 임시 html 파일 중 일부 /tmp/ 폴더가 삭제되지 않았습니다.

이 장고 전체 역 추적을 리턴 :

역 추적 :

Environment: 


Request Method: GET 
Request URL: http://127.0.0.1:8000/render/ 

Django Version: 1.11.7 
Python Version: 2.7.12 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'agreements', 
'weasyprint'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
     41.    response = get_response(request) 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
     217.     response = self.process_exception_by_middleware(e, request) 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
     215.     response = response.render() 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/django/template/response.py" in render 
     107.    self.content = self.rendered_content 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/wkhtmltopdf/views.py" in rendered_content 
     78.    cmd_options=cmd_options 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in render_pdf_from_template 
     186.       cmd_options=cmd_options) 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in convert_to_pdf 
     124.  return wkhtmltopdf(pages=filename, **cmd_options) 

    File "/home/milano/.virtualenvs/maklerienv/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py" in wkhtmltopdf 
     110.  return check_output(ck_args, **ck_kwargs) 

    File "/usr/lib/python2.7/subprocess.py" in check_output 
     574.   raise CalledProcessError(retcode, cmd, output=output) 

    Exception Type: CalledProcessError at /render/ 
    Exception Value: Command '['/usr/bin/wkhtmltopdf', '--encoding', u'utf8', '--quiet', u'False', '/tmp/wkhtmltopdfRDyi61.html', '-']' returned non-zero exit status 1 

당신은 어떤 생각을 가지고 있습니까? 최신 wkhtmltopdf 버전을 설치하려고했지만 도움이되지 않았습니다.

유일한 생각은 이고 wkhtmltopdf/tmp/에 대한 권한이 없지만 잘 모르겠습니다.

편집 -

class PDFAgreementView(PDFTemplateView): 
    template_name = 'agreements/pdf_template.html' 
    filename = 'rendered.pdf' 

답변

0

대답이 경우 단순이 아니라 하드 디버그이었다 뷰 :

내가 settings.py에서 일부 설정을했다 :

WKHTMLTOPDF_CMD_OPTIONS = { 
    'quiet': True, 
} 

그럼, 다음과 같이 변경 :

WKHTMLTOPDF_CMD_OPTIONS = { 
    'quiet': False, 
} 

기본적으로 False이며 명시 적으로 지정하면 오류가 발생합니다.

감사 chidg 에 :

Hi, try removing 'quiet': False from your options. The quiet option is false by default, so you only need to specify the option if you are making it true, and the mapping of this options dictionary to the command line options results in --quiet False being passed in the command, which is incorrect syntax.