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

113

Я использую wkthmltopdf для преобразования HTML в PDF-документы на лету на моем веб-сервере Linux. Первоначально программе требовался X11 или аналогичный X-сервер для правильной работы, но благодаря многочисленным просьбам разработчиков запустить этот процесс на серверах без графического интерфейса, я почти уверен, что он запускает виртуальный 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-сервер или что-то в этом роде.

jeffery_the_wind
источник

Ответы:

206

или попробуйте это (с 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 "$@"
    
  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.

TimoSolo
источник
1
Первоначально я попробовал этот учебник, и он не совсем сработал, также мне не нравилось создавать оболочку с символической ссылкой. Как я уже писал в своем ответе, если вы просто переместите статический исполняемый файл в /usr/bin/каталог, вы сможете использовать его откуда угодно. Они добавили виртуальный x-сервер к статическому исполняемому файлу, поэтому нет необходимости создавать сценарий оболочки.
jeffery_the_wind
у меня это сработало .. в некоторых ситуациях. Я думаю, установка отсутствующих 32-
битных библиотек устранила
Что If you get the error "Cannot connect to X server" then continue to number 6.должно означать утверждение под номером 6 ? Меня это очень смущает. Вы хотите сказать продолжить номер 7?
Noz
Да, это то, что имеется в виду ... в исходной статье были неправильно пронумерованы элементы. Итак, переходите к # 7
dwaz
спасибо, перенумерован .. Предлагаемый ответ должен работать в большинстве случаев, так что попробуйте сначала
TimoSolo
61

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

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
syzspectroom
источник
Это самый простой и безопасный подход, поскольку стандартная установка wkhtmltopdf не включает x-сервер.
Питер
Вот как решить проблему «не удается подключиться к X серверу» в подавляющем большинстве случаев.
Tripleee
2
В дистрибутивах на основе Redhat используйте sudo yum install xorg-x11-server-Xvfbсоотв. sudo dnf install xorg-x11-server-Xvfb.
TNT
28

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

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

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

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

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

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

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod его в исполняемый файл:

    chmod a+x wkhtmltopdf

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

    sudo mv wkhtmltopdf /usr/bin

Якоб Убайди
источник
code.google.com/p/wkhtmltopdf/issues/detail?id=730 похоже, что vs 11.0_rc1 имеет некоторые проблемы
montrealmike
это сработало для меня, но генерация pdf не удалась, поэтому я заменил приведенные выше инструкции наhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87
1
загрузка wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz теперь у меня работает. Почему-то последней нет.
chasetheskyforever
1
Я могу подтвердить, что это сработало для меня: (получение последней стабильной версии atm) wget download.gna.org/wkhtmltopdf/0.12/0.12.3/… tar -vxf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz chmod a + x wkhtmltox / bin / wkhtmltopdf sudo mv wkhtmltopdf / usr / local / bin / wkhtmltopdf
Magico
27

Только что сделал:

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

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

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

Sfblaauw
источник
Мне пришлось запустить apt-get install -fпосле установки пакета, чтобы получить зависимости. В остальном работало как шарм. Многие предпочитают этот метод другим описанным.
dmuir
2
Я согласен. Это решение привело меня к текущей версии. Команда dpkg -i сгенерировала некоторую неоднозначную информацию, но, тем не менее, она сработала: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debза ней следуетsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Билл Батлер
это по-прежнему лучшее решение этого вопроса.
versvs 02
1
Мне пришлось бежать sudo mv wkhtmltopdf /usr/binиз /usr/local/bin/каталога, но это отлично сработало! Я пробовал любой другой метод на этой странице, но
безуспешно
это должно получить более высокие голоса как последнее и более простое решение, не полагаясь на другие пакеты (что также решает проблему «Невозможно подключиться к X-серверу»). и у меня проблемы с относительным путем css, который не загружается при использовании xvfb.
zynick
16

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

Решение для Ubuntu 14.04.4 LTS (надежный) 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 (надежный) 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 получил очень хорошее решение, но изменился репозиторий с утилитой.

PRIHLOP
источник
по какой-то причине это сработало для меня, и более новая версия (0.13) не была благодарна вам!
talsibony 01
Это решение, которое сработало для меня, я пробовал много других разрешений, но ни одно из них не сработало. Поскольку я новичок в среде php / Laravel, поэтому у меня нет глубоких знаний об этих библиотеках и зависимостях, но это потрясающее решение просто сэкономило мои часы :)
Амит
На самом деле это решение потрясающее, сегодня я перешел на продакшн и получил ту же проблему, я не теряя времени, я просто запустил это решение, и оно сработало без сбоев :)
Амит
gna.org закрыт. :(
JYA
11

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

Если вы веб-разработчик и хотите использовать 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>');
Джонатан
источник
11

Обновление до последней версии 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
<<
Felixhummel
источник
1
Я установил 0.12.1, но он по-прежнему предлагает мне не подключиться к X-серверу. Я что-то упускаю?
Алес Матичич
Попробовал еще раз, и это сработало для меня (не устанавливать, просто чтобы коробка была чистой). См. Редактирование выше.
felixhummel
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
Матиас
источник
6
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  "\$@"
END
GoTLiuM
источник
6

Проблема, вероятно, в старой версии 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
Хонза
источник
6

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

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

    sudo apt-get install xvfb
    
  2. Получите необходимую версию wkhtmltopdf с http://wkhtmltopdf.org/downloads.html

  3. Установите 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
    
  4. Установите зависимость (при необходимости):

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

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

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
Параг Тьяги
источник
5

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

jeffery_the_wind
источник
3

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

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

Дэвид Джинанни
источник
1

Я выполнил приведенные здесь инструкции и заставил 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сервера, как я могу подтвердить.

Кристиан Враби
источник
1

решение для 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

DmitrySemenov
источник
2
для меня URL не работал, я использовал этот:sudo rpm -Uvh https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
WebOrCode
1

Обратите внимание: ваш файл может быть wkhtmltopdf.shили wkhtmltopdf, проверьте его на втором шаге

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

1- команда:

sudo apt-get install wkhtmltopdf

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

sudo cp /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf.sh

3 - После make sur у двоичного файла есть разрешение на выполнение, например:

sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh

4 - теперь вы можете протестировать, это работает так:

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

он заставляет загружать pdf в текущий каталог в вашем терминале

5 - Необязательно, теперь вы можете добавить символическую ссылку в свой каталог / usr / local / bin, например

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
rapaelec
источник
0
  1. Скачать файл по этой ссылке
  2. Извлеките его и переместите исполняемый файл (/ wkhtmltox / bin / wkhtmltopdf) в /usr/bin/
  3. Переименуйте его в wkhtmltopdf, если текущее имя не wkhtmltopdf. Итак, теперь у вас есть исполняемый файл по адресу/usr/bin/wkhtmltopdf
  4. Установите разрешения: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Установите необходимые пакеты поддержки. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Теперь проверьте с wkhtmltopdf http://www.google.com test.pdf подсказкой: подробная информация по этой ссылке
Ратна Гальдер
источник
0

Если вы настраиваете wkhtmltopdf для Rails или Somethings в Centos, вы можете выполнить следующие шаги:

  1. Перейдите на https://wkhtmltopdf.org/downloads.html и скопируйте ссылку на файл rpm.

На сервере centos bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Вы получите путь к wkhtmltopdf.

  1. Настройка для wicked_pdf или pdfkit с указанием пути на шаге 4. Это пример конфигурации с wickedpdf. конфигурация / инициализаторы / wicked_pdf.rb

    if Rails.env != "production"
        path = %x[which wkhtmltopdf].gsub(/\n/, "")
    else
        path = "path_of_wkhtmltopdf_in_step_4"
    end
    WickedPdf.config = { exe_path: path }
    
  2. Перезагрузите сервер.

СДЕЛАНО.

ThienSuBS
источник
0

Для 64-битного использования:

wget http://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-amd64.tar.bz2

tar xvjf wkhtmltopdf-0.9.9-static-amd64.tar.bz2

sudo mv wkhtmltopdf-amd64 /usr/bin/wkhtmltopdf

sudo chmod +x /usr/bin/wkhtmltopdf

Тилина Хасанта
источник
0

Просто скажите бэкэнду Qt не использовать X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Loonix
источник