wkhtmltopdf Ошибка "Нет такого файла или каталога" (Django)
Я пытаюсь использовать wkhtmltopdf для создания PDF из кода HTML. Я использовал xhtml2pdf и Пизу, но у меня были проблемы со стилями CSS. хорошо, wkhtmltopdf - мой последний вариант.
Я следовал за этими шагами. https://github.com/incuna/django-wkhtmltopdf
sudo aptitude install libfontconfig
pip install django-wkhtmltopdf
и если я добавлю "wkhtmltopdf" в мой INSTALLED_APPS, он распознает путь wkhtmltopdf.
INSTALLED_APPS = ["wkhtmltopdf"]
Хорошо, когда я пытаюсь сгенерировать PDF, выдается ошибка.
это мой код:
from wkhtmltopdf.views import PDFTemplateResponse
context = {
'linkedin1':self.linkedin1,
'twitter1':self.twitter1,
'facebook1':self.facebook1,
'current': get_current_base_url,
}
html_path = "app/folder/page1_1.html"
response = PDFTemplateResponse(request=request,
template=html_path,
filename="hello.pdf",
context= context,
show_content_in_browser=False,
cmd_options=settings.WKHTMLTOPDF_CMD_OPTIONS,
)
В настройках:
WKHTMLTOPDF_CMD_OPTIONS = {
'quiet': True,
}
Моя ошибка:
File "/home/user/.virtualenvs/app/local/lib/python2.7/site- packages/django/core/handlers/base.py", line 136, in get_response
response = response.render()
File "/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/django/template/response.py", line 104, in render
self._set_content(self.rendered_content)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site- packages/wkhtmltopdf/views.py", line 144, in rendered_content
footer_filename=footer_filename)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/views.py", line 103, in convert_to_pdf
return wkhtmltopdf(pages=[filename], **cmd_options)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py", line 92, in wkhtmltopdf
return check_output(ck_args, **ck_kwargs)
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Я думаю, что это не может найти 'wkhtmltopdf'.
Мой путь установки wkhtmltopdf:
/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/
ну добавлю в настройки:
WKHTMLTOPDF_CMD = '/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/'
Чтобы найти wkhtmltopdf и appers "путь запрещен"
Что не так?, что не хватает?, в чем проблема?.
Я использую: Ububtu сервер 12.04/64 бит, Django 1.4, Pyrhon 2.7,
Спасибо за ваши ответы.
РЕДАКТИРОВАТЬ 1:
Я исправил эту проблему, следуя этой инструкции
http://www.cristalab.com/tutoriales/crear-pdf-en-django-y-virtualenv-c110664l/
apt-get build-dep libqt4-gui libqt4-network libqt4-webkit
apt-get install openssl build-essential xorg git-core git-doc libssl-dev wkhtmltopdf
в настройках
WKHTMLTOPDF_CMD = "/usr/bin/wkhtmltopdf"
Но появилась новая ошибка:
File "/home/user/.virtualenvs/app/local/lib/python2.7/site- packages/django/template/response.py", line 104, in render
self._set_content(self.rendered_content)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site- packages/wkhtmltopdf/views.py", line 144, in rendered_content
footer_filename=footer_filename)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/views.py", line 103, in convert_to_pdf
return wkhtmltopdf(pages=[filename], **cmd_options)
File "/home/user/.virtualenvs/app/local/lib/python2.7/site-packages/wkhtmltopdf/utils.py", line 92, in wkhtmltopdf
return check_output(ck_args, **ck_kwargs)
File "/usr/lib/python2.7/subprocess.py", line 544, in check_output
raise CalledProcessError(retcode, cmd, output=output)
CalledProcessError: Command '['/usr/bin/wkhtmltopdf', '--encoding', u'utf8', '--quiet', '/tmp/wkhtmltopdfE_THjv.html', '-']' returned non-zero exit status
Решено:
----------- 14 июля -----------
0) Создайте каталог ~/tmp/ и перейдите в него
cd ~
mkdir tmp
cd tmp
1) libwkhtmltox-0.11.0_rc1-amd64.tar.bz2 и wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2 из http://code.google.com/p/wkhtmltopdf/downloads/list
wget https://wkhtmltopdf.googlecode.com/files/libwkhtmltox-0.11.0_rc1-amd64.tar.bz2
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
2) Создайте подпапки и переместите в них файлы:
mkdir libwkhtmltox
mkdir wkhtmltopdf
mv libwkhtmltox-0.11.0_rc1-amd64.tar.bz2 libwkhtmltox
mv wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2 wkhtmltopdf
3) зайти в ранее созданные папки и разархивировать файлы.
cd libwkhtmltox
tar -xvjf libwkhtmltox-0.11.0_rc1-amd64.tar.bz2
cd ../wkhtmltopdf
tar -xvjf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
4) доступ к "lib". там мы находим файл с именем 'libwkhtmltox.so', затем перемещаем его
cd ../libwkhtmltox/lib/
sudo cp libwkhtmltox.so /usr/local/lib/
5) доступ, чтобы включить, там мы находим папку с именем 'wkhtmltox', а затем переместите ее
cd ../include/
sudo cp -avr wkhtmltox/ /usr/local/include/
6) после распаковки файлов находим файл "wkhtmltopdf-amd64", перемещаем его.
cd ../../wkhtmltopdf/
sudo cp wkhtmltopdf-amd64 /usr/bin/
7) Я следил за этим постом. http://www.cristalab.com/tutoriales/crear-pdf-en-django-y-virtualenv-c110664l/
8) установить
sudo aptitude install libfontconfig
sudo apt-get build-dep libqt4-gui libqt4-network libqt4-webkit
sudo apt-get install openssl build-essential xorg git-core git-doc libssl-dev wkhtmltopdf
9) Я следил за этим постом, https://github.com/incuna/django-wkhtmltopdf
10) позже установить приложение
pip install django-wkhtmltopdf
3 ответа
Я решил это следующим образом:
0) Создайте каталог ~/tmp/ и перейдите в него
cd ~
mkdir tmp
cd tmp
1) libwkhtmltox-0.11.0_rc1-amd64.tar.bz2 и wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2 из http://code.google.com/p/wkhtmltopdf/downloads/list
wget https://wkhtmltopdf.googlecode.com/files/libwkhtmltox-0.11.0_rc1-amd64.tar.bz2
wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
2) Создайте подпапки и переместите в них файлы:
mkdir libwkhtmltox
mkdir wkhtmltopdf
mv libwkhtmltox-0.11.0_rc1-amd64.tar.bz2 libwkhtmltox
mv wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2 wkhtmltopdf
3) зайти в ранее созданные папки и разархивировать файлы.
cd libwkhtmltox tar -xvjf libwkhtmltox-0.11.0_rc1-amd64.tar.bz2
cd ../wkhtmltopdf tar -xvjf wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
4) доступ к "lib". там мы находим файл с именем 'libwkhtmltox.so', затем перемещаем его
cd ../libwkhtmltox/lib/
sudo cp libwkhtmltox.so /usr/local/lib/
5) доступ, чтобы включить, там мы находим папку с именем 'wkhtmltox', а затем переместите ее
cd ../include/
sudo cp -avr wkhtmltox/ /usr/local/include/
6) после распаковки файлов находим файл "wkhtmltopdf-amd64", перемещаем его.
cd ../../wkhtmltopdf/
sudo cp wkhtmltopdf-amd64 /usr/bin/
7) Я следил за этим постом. http://www.cristalab.com/tutoriales/crear-pdf-en-django-y-virtualenv-c110664l/
8) установить
sudo aptitude install libfontconfig
sudo apt-get build-dep libqt4-gui libqt4-network libqt4-webkit
sudo apt-get install openssl build-essential xorg git-core git-doc libssl-dev wkhtmltopdf
9) Я следил за этим постом, https://github.com/incuna/django-wkhtmltopdf
10) позже установить приложение
pip install django-wkhtmltopdf
Я столкнулся с этой проблемой после обновления Linux. Я нашел решение по этой ссылке: https://github.com/incuna/django-wkhtmltopdf/issues/75
В моем случае, основное решение - узнать, где хранится wkhtmltopdf, используя which
:
$ which wkhtmltopdf
/usr/local/bin/wkhtmltopdf
Затем добавьте следующую строку в settings.py
:
WKHTMLTOPDF_CMD = '/usr/local/bin/wkhtmltopdf'
(то есть местоположение, возвращаемое)
Есть и другое решение: поверх вашей pip-установки просто установите соответствующую версию двоичного файла wkhtmltopdf отсюда: http://wkhtmltopdf.org/downloads.html. В моем случае это решило проблему.
Самое простое решение этой проблемы:
Загрузите двоичную версию wkhtmltopdf в соответствии с вашей операционной системой
Ссылка для скачивания двоичного файла wkhtmltopdf
Добавьте ниже кодировку в settings.py
вашего проекта.
WKHTMLTOPDF_CMD = '/usr/local/bin/wkhtmltopdf'
WKHTMLTOPDF_CMD_OPTIONS = {
'quiet': True,
}
Это решит вашу проблему.