2015-03-13 2 views
1

Я пытаюсь обновить свой wkhtmltopdf пакет до 0.12.2.1 и не повезло.Почему я получаю whtmltopdf IO Ошибка при вызове через python-pdfkit?

Ниже то, что я делал/пыталось до сих пор. Неужели кому-то удалась обновить их настройку? Или любые указатели были бы очень полезны! Благодаря!

Из коробки я получил Configuration Error Я жестко закодирован, чтобы просто пройти мимо этого.

# -*- coding: utf-8 -*- 
import subprocess 
import sys 

class Configuration(object): 
    def __init__(self, wkhtmltopdf='', meta_tag_prefix='pdfkit-'): 
     self.meta_tag_prefix = meta_tag_prefix 

     self.wkhtmltopdf = wkhtmltopdf 

     if not self.wkhtmltopdf: 
      if sys.platform == 'win32': 
       self.wkhtmltopdf = subprocess.Popen(     ['where', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip() 
      else: 
       self.wkhtmltopdf = subprocess.Popen(['which', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip() 

     try: 
      #with open(self.wkhtmltopdf) as f: 
      with open("/usr/local/bin/wkhtmltopdf") as f: 
       pass 
     except IOError: 
      raise IOError('No wkhtmltopdf executable found: "%s"\n' 
          'If this file exists please check that this process can ' 
          'read it. Otherwise please install wkhtmltopdf - ' 
          'https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf' % self.wkhtmltopdf) 

Теперь я получаю эту ошибку и не знаю, как действовать. Я попытался добавить shell=True к Popen выше, но это тоже не сработало.

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 543, in perform_job 
    rv = job.perform() 
    File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 490, in perform 
    self._result = self.func(*self.args, **self.kwargs) 
    File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 864, in job_sharepdfs 
    mymovepdf_link = build_mymovepdf(account_uuid, addresschange_uuid) 
    File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 608, in build_mymovepdf 
    s3file = pdfkit.from_string(output.getvalue() , False) 
    File "/usr/local/lib/python2.7/dist-packages/pdfkit/api.py", line 68, in from_string 
    return r.to_pdf(output_path) 
    File "/usr/local/lib/python2.7/dist-packages/pdfkit/pdfkit.py", line 93, in to_pdf 
    stderr=subprocess.PIPE) 
    File "/usr/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

ответ

1

Вы должны установить configuration (путь) вашей wkhtmltopdf библиотеки.

Я создал основную вспомогательную функцию, как показано ниже,

import os 
import pdfkit 

WKHTMLTOPDF_PATH = '/usr/local/bin/wkhtmltopdf' 

def generate_pdf(html, static_path, _path): 
    config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_PATH) 
    _status = pdfkit.from_string(
     html, 
     os.path.join(static_path, _path), 
     configuration=config, 
     options={ 
      'page-size': 'A4', 
      'margin-top': '0', 
      'margin-right': '0', 
      'margin-left': '0', 
      'margin-bottom': '0', 
      'zoom': '1.2', 
      'encoding': "UTF-8", 
     }) 
    return _path if _status else '' 

Использование:

html = "<h1>Hello World !!!</h1>" 
static_path = "/static/" 
file_path = "pdfs/out.pdf" 
generate_pdf(html, static_path, file_path) 
2

Другое решение (установка wkhtmltopdf):

wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz 
tar xvf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz 
sudo mv wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf 
sudo chmod +x /usr/local/bin/wkhtmltopdf 
+0

Информируем, что HTTP : //download.gna.org теперь закрыт. Так что если вы хотите скачать lates, то бинарные файлы посещают [эту ссылку] (https://wkhtmltopdf.org/downloads.html) –

 Смежные вопросы

  • Нет связанных вопросов^_^