Wkhtmltopdf: невозможно подключиться к X-серверу

Я использую wkthmltopdf для преобразования html в pdf-документы на лету на моем веб-сервере linux. Вначале программе X11 или аналогичному X-серверу нужно было работать правильно, но через многие запросы разработчиков, чтобы этот запуск выполнялся на серверах без GUI, я уверен, что он запускает виртуальный X-сервер в статическая версия. Я использую статическую (автономную) версию программы, и она отлично работает! Я бы поместил исполняемый файл в папку и запустил:

./wkhtmltopdf file1.html file2.pdf

Однако я хотел бы установить эту программу по всей системе. Я использовал apt-get install wkhtmltopdf (только что установленный вчера), и поскольку я работаю на 64-битной системе, мне также нужен apt-get install ia32-libs. После установки я могу найти такую ​​версию:

wkhtmltopdf --version

выход:

Name:
  wkhtmltopdf 0.9.9

License:
  Copyright (C) 2008,2009 Wkhtmltopdf Authors.



  License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
  This is free software: you are free to change and redistribute it. There is NO
  WARRANTY, to the extent permitted by law.

Authors:
  Written by Jakob Truelsen. Patches by Mário Silva, Benoit Garret and Emmanuel
  Bouthenot.

Теперь, когда я пытаюсь запустить программу, установленную с помощью aptitude, я получаю следующую ошибку:

wkhtmltopdf: cannot connect to X server

Кто-нибудь знает, как я могу это исправить? Я предполагаю, что в этой версии отсутствует виртуальный X-сервер или что-то в этом роде.

Ответ 1

Я просто понял, что могу просто переместить статический исполняемый файл в каталог /usr/bin/ и выполнить его из любого места.

Ответ 2

или попробуйте это (с http://drupal.org/node/870058)

  1. Скачать wkhtmltopdf. Или лучше установить его с помощью менеджера пакетов:

    sudo apt-get install wkhtmltopdf
    
  2. Распакуйте его и переместите в /usr/local/bin/

  3. Переименуйте его в wkhtmltopdf чтобы теперь у вас был исполняемый файл в /usr/local/bin/wkhtmltopdf
  4. Установите права доступа: sudo chmod a+x/usr/local/bin/wkhtmltopdf
  5. Установите необходимые пакеты поддержки.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Проверьте, работает ли это: запустите

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

    Если это работает, то вы сделали. Если вы получили сообщение об ошибке "Не удается подключиться к X-серверу", перейдите к номеру 7.

  7. Нам нужно запустить его без "головы" на "виртуальном" x-сервере. Мы сделаем это с пакетом под названием xvfb.

    sudo apt-get install xvfb
    
  8. Нам нужно написать небольшой скрипт для оболочки wkhtmltopdf в xvfb. Создайте файл с именем wkhtmltopdf.sh и добавьте следующее:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "[email protected]"
    
  9. Переместите этот сценарий оболочки в /usr/local/bin и установите разрешения:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Проверьте, работает ли он еще раз: запустите

    /usr/local/bin/wkhtmltopdf.sh http://www.google.com test.pdf
    

Обратите внимание, что http://www.google.com может выдавать сообщение об ошибке, например: "Завершенный ResourceObject получил сигнал о завершении загрузки. Это может быть признаком того, что для загрузки iframe потребовалось много времени". Вы можете протестировать с более простой страницей, такой как http://www.example.com.

Ответ 3

Это решило проблему для меня:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf

Ответ 4

Я пытался сделать sudo apt-get install wkhtmltopdf, но без каких-либо успехов. Вместо этого я рекомендую вам попробовать:

  • Загрузите последний исполняемый файл (.11 rc1):

    wget https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  • распаковать его:

    tar -vxf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2

  • переименуйте его:

    mv wkhtmltopdf-i386 wkhtmltopdf

  • chmod для исполняемого файла:

    chmod a+x wkhtmltopdf

  • поместите его в /usr/bin:

    sudo mv wkhtmltopdf /usr/bin

Ответ 5

Просто сделал это:

1- Для загрузки зависимостей wkhtmltopdf

# apt-get install wkhtmltopdf

2- Скачать с источника

# wget http://downloads.sourceforge.net/project/wkhtmltopdf/xxx.deb

# dpkg -i xxx.deb

3- Попробуйте

# wkhtmltopdf http://google.com google.pdf

Работает нормально

Оно работает!

Ответ 6

Я нашел метод для решения этой проблемы без поддельного X-сервера. В новейшей версии wkhtmltopdf не нужен X-сервер для работы, но он не входит в официальные репозитории linux.

Решение для Ubuntu 14.04.4 LTS (trusty) i386

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-i386.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-i386.deb
$ wkhtmltopdf http://www.google.com test.pdf

Решение для Ubuntu 14.04.4 LTS (trusty) amd64

$ sudo apt-get install xfonts-75dpi
$ wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ sudo dpkg -i wkhtmltox-0.12.2_linux-trusty-amd64.deb
$ wkhtmltopdf http://www.google.com test.pdf

Пользователь felixhummel получил очень хорошее решение, но репозиторий с утилитой изменился.

Ответ 7

Расширение ответа Тимоти...

Если вы являетесь веб-разработчиком, который хочет использовать wkhtmltopdf как часть вашего веб-приложения, вы можете просто установить его в свою папку /usr/bin/ следующим образом:

cd /usr/bin/
curl -C - -O http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
tar -xvjf wkhtmltopdf-0.11.0_rc1-static-i386.tar.bz2
mv wkhtmltopdf-i386 wkhtmltopdf

Теперь вы можете запускать его в любом месте, используя wkhtmltopdf.

Я лично использую библиотеку Snappy в PHP. Вот пример того, как легко создать PDF файл:

<?php

// Create new PDF
$pdf = new \Knp\Snappy\Pdf('wkhtmltopdf');

// Set output header
header('Content-Type: application/pdf');

// Generate PDF from HTML
echo $pdf->getOutputFromHtml('<h1>Title</h1><p>Your content goes here.</p>');

Ответ 8

Обновить до последней версии wkhtmltopdf от SourceForge (0.12 на момент написания этой статьи). Для этого не требуется X-сервер.

Пример для Ubuntu 14.04:

$ cd /tmp/                                                                                                                                                                                                       
$ wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
$ dpkg -x wkhtmltox-0.12.2.1_linux-trusty-amd64.deb foo

$ echo '<p>hi</p>' | ./foo/usr/local/bin/wkhtmltopdf - /tmp/hi.pdf
Loading pages (1/6)
Counting pages (2/6)                                               
Resolving links (4/6)                                                       
Loading headers and footers (5/6)                                           
Printing pages (6/6)
Done                                                                      

$ head -n3 /tmp/hi.pdf 
%PDF-1.4
1 0 obj
<<

Ответ 9

для 14.04.1-Ubuntu https://wkhtmltopdf.org/downloads.html

wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz -O mktemp.tar.xz
tar xf mktemp.tar.xz
sudo cp wkhtmltox/bin/wkhtmltopdf /usr/bin/wkhtmltopdf
sudo chmod +x /usr/bin/wkhtmltopdf
rm mktemp.tar.xz
rm wkhtmltox -rf
apt-get update
apt-get install -y libxrender1 libxtst6 libxi6
wkhtmltopdf http://www.google.com test.pdf

Ответ 10

sudo -i
apt-get install wkhtmltopdf xvfb libicu48
mv /usr/bin/wkhtmltopdf /usr/bin/wkhtmltopdf-origin
touch /usr/bin/wkhtmltopdf && chmod +x /usr/bin/wkhtmltopdf && cat > /usr/bin/wkhtmltopdf << END
#!/bin/bash

/usr/bin/xvfb-run -a -s "-screen 0 1024x768x24" /usr/bin/wkhtmltopdf-origin  "\[email protected]"
END

Ответ 11

Проблема, вероятно, в старой версии wkhtmltopdf - версия 0.9 из репозитория дистрибутива требует запуска X-сервера, но текущая версия - 0.12.2.1 не требует этого - может работать без головок.

Загрузите пакет для своего распространения из http://wkhtmltopdf.org/downloads.html и установите его - для Ubuntu:

sudo apt-get install xfonts-75dpi
sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb

Ответ 12

wkhtmltopdf > 0.11 не имеет этой проблемы X-server.
Поэтому установка 0.12.2.1 на сервер linux.

  • Сначала установите сервер xvfb:

    sudo apt-get install xvfb
    
  • Получить нужную версию wkhtmltopdf из http://wkhtmltopdf.org/downloads.html

  • Установите wkhtmltopdf:

    sudo dpkg -i wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
    

    или установите с помощью wget

    URL='http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb'; FILE=`mktemp`; wget "$URL" -qO $FILE && sudo dpkg -i $FILE; rm $FILE
    
  • Установите зависимость (если необходимо):

    sudo apt-get -f install
    
  • Создайте символическую ссылку в /usr/local/bin/:

    echo 'exec xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "[email protected]"' | sudo tee /usr/local/bin/wkhtmltopdf.sh >/dev/null
    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  • Теперь попробуйте ниже, и он должен работать,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    

Ответ 13

Рекомендуется использовать не менее 0.12.2.1.

Начиная с wkhtmltopdf >= 0.12.2 он больше не требует X-сервера или эмуляции. Вы можете загрузить новую версию из http://wkhtmltopdf.org/downloads.html

Ответ 14

Я выполнил инструкции здесь и сделал для меня работу wkhtmltopdf, но я хотел бы предложить немного перспективы, которую я обнаружил, выполняя свой собственный маленький танец с wkhtmltopdf - xvfb.

Это важно, потому что одна и та же причина, которая заставляет его бросать печально известную ошибку cannot connect to X server, также приводит к тому, что она запускается с ограниченными ограничениями, даже если вы предоставляете ей X-сервер. Эти ограничения включают неспособность принимать несколько источников входных данных, устанавливать верхний и нижний колонтитулы и т.д. (Проверьте раздел "Уменьшенная функциональность" руководства).

wkhtmltox сам по себе не требует X11, однако он использует библиотеки QT, которые делают. В новых версиях wkthmltox разработчики сделали патч для QT, который позволяет ему работать с X11.

В настоящее время некоторые версии построены против исправленного QT, а некоторые нет. Вы можете проверить свою версию, запустив wkhtmltopds --version. В конце должна быть строка, говорящая Compiled against wkhtmltopdf patched qt.

Итак, если вы установите и используете версию, использующую исправленные библиотеки, она должна работать на сервере Linux без сервера xvfb, как я могу подтвердить.

Ответ 15

решение для Centos7:

yum -y install xorg-x11-fonts-75dpi \
               xorg-x11-fonts-Type1 \
&& rpm -Uvh http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

Мы сталкиваемся с этой проблемой в контейнерах докеров, и указанная выше установка имеет wkhtmltopdf с исправленным QT

Ответ 17

  • Загрузите файл из эта ссылка
  • Извлеките его и переместите исполняемый файл (/wkhtmltox/bin/wkhtmltopdf) в /usr/bin/
  • Переименуйте его в wkhtmltopdf, если текущее имя не является wkhtmltopdf. Итак, теперь у вас есть исполняемый файл в /usr/bin/wkhtmltopdf
  • Установить разрешения: sudo chmod a + x/usr/bin/wkhtmltopdf
  • Установите необходимые пакеты поддержки. sudo apt-get install openssl build-essential xorg libssl-dev
  • Теперь, установите флажок wkhtmltopdf http://www.google.com test.pdf hint: подробная информация по этой ссылке

Ответ 19

Вы должны скопировать его в каталог: /usr/local/bin, сделать его исполняемым и добавить символическую ссылку на wkhtmltopdf.sh, например:

1- команда:

sudo apt-get install wkhtmltopdf