2017-11-29 20 views
0

django-wkhtmltopdfを使用してDjangoテンプレートからPDFをレンダリングしようとしています。問題がどこにある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. 
問題は wkhtmltopdfを上げ始めたということです

それだけsudo権限で動作します(しかし、私は私のPyCharmProjectユーザーディレクトリにいる):私も気づい

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

その一時的htmlファイルの一部/tmp/フォルダは削除されませんでした。

これは、Djangoが全体のトレースバックを返します:

TRACEBACK:

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を実行するuserには、/tmp/の権限がありませんが、わかりません。

EDIT -

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

答えて

0

答えはこの場合、シンプルではなく、ハードデバッグにしたが、ビュー:

私はsettings.pyでいくつかの設定を持っていた:

WKHTMLTOPDF_CMD_OPTIONS = { 
    'quiet': True, 
} 

その後、Iそれを次のように変更しました:

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.

関連する問題