wkhtmltopdf: não é possível conectar ao servidor X

113

Tenho usado o wkthmltopdf para converter documentos html em PDF dinamicamente no meu servidor web linux. O programa originalmente precisava do X11 ou servidor X semelhante para rodar corretamente, mas através de muitas solicitações dos desenvolvedores para que ele rodasse em servidores sem GUI, tenho certeza de que ele roda um servidor X virtual na versão estática . Tenho usado a versão estática (autônoma) do programa e funciona muito bem! Eu colocaria o arquivo executável em uma pasta e executaria:

./wkhtmltopdf file1.html file2.pdf

No entanto, gostaria de instalar este programa em todo o sistema. Usei o apt-get install wkhtmltopdf(acabei de instalar ontem) e como estou rodando em um sistema de 64 bits, também precisei apt-get install ia32-libs. Após a instalação, posso encontrar a versão assim:

wkhtmltopdf --version

resultado:

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.

Agora, quando tento executar o programa instalado via aptitude, recebo o seguinte erro:

wkhtmltopdf: cannot connect to X server

Alguém sabe como posso consertar isso? Eu acho que esta versão está faltando um servidor X virtual ou algo assim.

jeffery_the_wind
fonte

Respostas:

206

ou tente isso (em http://drupal.org/node/870058 )

  1. Baixe wkhtmltopdf. Ou melhor instalá-lo com um gerenciador de pacotes:

    sudo apt-get install wkhtmltopdf
    
  2. Extraia e mova para /usr/local/bin/

  3. Renomeie-o para wkhtmltopdfpara que agora você tenha um executável em/usr/local/bin/wkhtmltopdf
  4. Definir permissões: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Instale os pacotes de suporte necessários.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Verifique se funciona: execute

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

    Se funcionar, então você terminou. Se você receber o erro "Não é possível conectar ao servidor X", vá para o número 7.

  7. Precisamos executá-lo sem cabeça em um servidor x 'virtual'. Faremos isso com um pacote chamado xvfb.

    sudo apt-get install xvfb
    
  8. Precisamos escrever um pequeno script de shell para envolver wkhtmltopdf em xvfb. Faça um arquivo chamado wkhtmltopdf.she adicione o seguinte:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Mova este script de shell para /usr/local/bine defina as permissões:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Verifique se funciona novamente: execute

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

Observe que http://www.google.com pode gerar um erro como "Um ResourceObject concluído recebeu um sinal de carregamento concluído. Isso pode ser uma indicação de que um iframe está demorando muito para carregar." Você pode querer testar com uma página mais simples como http://www.example.com.

TimoSolo
fonte
1
Eu tentei esse tutorial originalmente e não funcionou muito bem, também não gostei de ter que criar o wrapper com link simbólico. Como escrevi na minha resposta, se você simplesmente mover o executável estático para o /usr/bin/diretório, poderá usá-lo de qualquer lugar. Eles adicionaram um servidor x virtual ao executável estático, portanto, não há necessidade de fazer o script de wrapper.
jeffery_the_wind
funcionou para mim .. em algumas situações. Acho que a instalação de bibliotecas de 32 bits ausentes corrigiu para mim - obrigado pela dica
TimoSolo
O que a afirmação do número 6 If you get the error "Cannot connect to X server" then continue to number 6.deveria significar? Estou muito confuso com isso. Você quer dizer para continuar para o número 7?
Noz de
Sim, é isso que se quer dizer ... o artigo original numerou os itens incorretamente. Então vá para o nº 7
dwaz
obrigado, renumerada. A resposta sugerida deve funcionar na maioria dos casos, então tente primeiro
TimoSolo
61

Isso resolveu o problema para mim:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
Syzspectroom
fonte
Esta é a abordagem mais fácil e segura, já que a instalação padrão de wkhtmltopdf não inclui o x-server.
Peter
Esta é a solução para "não é possível conectar ao servidor X" na grande maioria dos casos.
tripleee
2
Em distribuições baseadas em Redhat, use sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT
28

Tentei fazer, sudo apt-get install wkhtmltopdfmas sem sucesso. Em vez disso, recomendo que você tente:

  1. Baixe o executável mais recente (.11 rc1):

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

  2. descompacte-o:

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

  3. renomeie-o:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod para executável:

    chmod a+x wkhtmltopdf

  5. coloque-o em / usr / bin:

    sudo mv wkhtmltopdf /usr/bin

Yakob Ubaidi
fonte
code.google.com/p/wkhtmltopdf/issues/detail?id=730 parece que vs 11.0_rc1 tem alguns problemas
montrealmike
funcionou para mim, mas a geração do pdf falhou, então substituí as instruções acima porhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87
1
baixar wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz funciona para mim agora. Por alguma razão, o último não.
chasetheskyforever
1
Posso confirmar que funcionou para mim: (obtendo a última versão estável 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

Acabei de fazer:

1- Para baixar dependências wkhtmltopdf

# apt-get install wkhtmltopdf

2- Baixar da fonte

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

# dpkg -i xxx.deb

3- Experimente

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

Está funcionando bem

Funciona!

Sfblaauw
fonte
Tive que executar apt-get install -fapós instalar o pacote para obter as dependências. Caso contrário, funcionou como um encanto. Muito prefere este método aos outros descritos.
dmuir
2
Concordo. Esta solução me levou à rotação atual. O comando dpkg -i gerou algumas informações ambíguas, mas, independentemente, funcionou: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debseguido porsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler
esta ainda é a melhor solução fornecida para esta questão.
versvs
1
Tive que executar a sudo mv wkhtmltopdf /usr/binpartir do /usr/local/bin/diretório, mas funcionou muito bem! Eu tentei todos os outros métodos nesta página sem sorte antes.
Shaneparsons
isto deve obter votos mais altos como uma solução mais recente e mais simples sem depender de outros pacotes (o que também resolve o problema de 'Não é possível conectar ao servidor X'). e eu tenho problemas com o caminho de css relativo não sendo carregado ao usar xvfb
zynick
16

Encontrei um método para resolver esse problema sem um servidor X falso. Na versão mais recente do wkhtmltopdf não precisa do servidor X para funcionar, mas não nos repositórios oficiais do Linux.

Solução para Ubuntu 14.04.4 LTS (confiável) 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

Solução para Ubuntu 14.04.4 LTS (confiável) 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

O usuário felixhummel obteve uma solução muito boa, mas o repositório com o utilitário mudou.

PRIHLOP
fonte
por algum motivo isso estava funcionando para mim e a versão mais recente (0,13) não agradecia!
talsibony 01 de
Esta é a solução que funcionou para mim, tentei muitas outras resoluções, mas nenhuma delas funcionou. Como sou novo no ambiente php / Laravel, não tenho nenhum conhecimento profundo dessas bibliotecas e dependências, mas essa solução é incrível simplesmente salvou minhas horas :)
Amit
Realmente, esta solução é incrível hoje eu mudei para produção e tive o mesmo problema, sem perder tempo, eu apenas executei essas soluções e funcionou perfeitamente :)
Amit
gna.org foi encerrado. :(
Jya
11

Expandindo a resposta de Timothy ...

Se você é um desenvolvedor da web que deseja usar wkhtmltopdf como parte de seu aplicativo da web, pode simplesmente instalá-lo em sua /usr/bin/pasta da seguinte forma:

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

Agora você pode executá-lo em qualquer lugar usando wkhtmltopdf.

Eu pessoalmente uso a biblioteca Snappy em PHP. Aqui está um exemplo de como é fácil criar um 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>');
Jonathan
fonte
11

Atualize para a versão wkhtmltopdf mais recente do SourceForge (0.12 no momento da redação deste artigo). Não é necessário um servidor X para funcionar.

Exemplo para 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
fonte
1
Eu instalei o 0.12.1 e ele ainda indica que não é possível conectar ao servidor X. Estou esquecendo de algo?
Ales Maticic
Tentei novamente e funcionou para mim (sem instalar, apenas para manter a caixa limpa). Veja a edição acima.
felixhummel de
9

para 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
Matthias
fonte
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
fonte
6

O problema provavelmente está na versão antiga do wkhtmltopdf - a versão 0.9 do repositório de distribuição requer a execução do servidor X, mas a versão atual - 0.12.2.1 não o exige - pode ser executada sem controle.

Baixe o pacote para sua distribuição em http://wkhtmltopdf.org/downloads.html e instale-o - para Ubuntu:

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

wkhtmltopdf> 0.11não tem esse X-serverproblema.
Portanto, instalando 0.12.2.1em um servidor Linux.

  1. Primeiro instale o servidor xvfb:

    sudo apt-get install xvfb
    
  2. Obtenha a versão necessária de wkhtmltopdf em http://wkhtmltopdf.org/downloads.html

  3. Instale wkhtmltopdf:

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

    ou instale com 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. Instale a dependência (se necessário):

    sudo apt-get -f install
    
  5. Crie um link simbólico em /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. Agora tente abaixo e deve funcionar,

    /usr/local/bin/wkhtmltopdf http://www.google.com test.pdf
    
Parag Tyagi
fonte
5

Acabei de descobrir que posso simplesmente mover o executável estático para o /usr/bin/diretório e executá-lo de qualquer lugar.

jeffery_the_wind
fonte
3

Recomenda-se usar pelo menos 0.12.2.1.

A partir de wkhtmltopdf> = 0.12.2, ele não requer mais o servidor X ou emulação. Você pode baixar a nova versão em http://wkhtmltopdf.org/downloads.html

David Ginanni
fonte
1

Segui as instruções aqui e fiz wkhtmltopdf funcionar para mim, mas gostaria de oferecer um pouco da perspectiva que descobri enquanto fazia minha própria dancinha com wkhtmltopdf- xvfb.

Isso é importante porque o mesmo motivo que faz com que ele lance o cannot connect to X servererro infame também está fazendo com que seja executado com limitações de servidor, mesmo se você fornecer um servidor X. Essas limitações incluem não ser capaz de obter várias fontes de entrada, definir cabeçalho e rodapés, etc. (verifique a seção Funcionalidade reduzida do manual ).

wkhtmltoxpor si só não requer um X11, porém está usando bibliotecas QT que requerem. Em novas versões do wkthmltox, os desenvolvedores fizeram um patch para o QT que permite que ele seja executado com um X11.

Atualmente, algumas versões são construídas contra o QT corrigido e outras não. Você pode verificar sua versão executandowkhtmltopds --version . Deve haver uma linha no final dizendoCompiled against wkhtmltopdf patched qt.

Então, para concluir, se você instalar e usar uma versão que usa as bibliotecas corrigidas ela deve funcionar em um servidor linux sem o xvfbservidor, como posso confirmar.

Cristian Vrabie
fonte
1

solução para 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

Encontramos este problema dentro de contêineres docker e a instalação acima tem wkhtmltopdf com QT corrigido

DmitrySemenov
fonte
2
para mim, o URL não estava funcionando, usei este: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

Preste atenção: seu arquivo pode ser wkhtmltopdf.shou wkhtmltopdf, verifique-o na segunda etapa

Você deve copiá-lo para o diretório: / usr / local / bin , verifique se ele é executável e adicione o link simbólico de wkhtmltopdf.sh como:

1- o comando:

sudo apt-get install wkhtmltopdf

2 - insira o binário no diretório / usr / bin para que o navegador não tenha permissão para executar neste diretório. Você deve copiar o wkhtmltopdf.sh para o diretório / usr / local / bin porque o navegador tem permissão neste diretório como:

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

3 - Após verificar o binário terá permissão de execução como:

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

4 - agora você pode testar, funciona como:

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

faça o download do pdf no diretório atual do seu terminal

5 - Opcional, agora você pode adicionar link simbólico em seu diretório / usr / local / bin como

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
rapaelec
fonte
0
  1. Baixe o arquivo deste link
  2. Extraia e mova o arquivo executável (/ wkhtmltox / bin / wkhtmltopdf) para /usr/bin/
  3. Renomeie-o para wkhtmltopdf se o nome atual não for wkhtmltopdf. Para que agora você tenha um executável em/usr/bin/wkhtmltopdf
  4. Definir permissões: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Instale os pacotes de suporte necessários. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Agora, verifique com wkhtmltopdf http://www.google.com test.pdf dica: informações detalhadas deste link
Ratna Halder
fonte
0

Se você configurar wkhtmltopdf para Rails ou algo em Centos, você pode seguir estas etapas abaixo:

  1. Vá para https://wkhtmltopdf.org/downloads.html e copie o link do arquivo rpm.

Em centos server bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Você obterá o caminho de wkhtmltopdf.

  1. Configuração para wicked_pdf ou pdfkit com caminho na etapa 4. Esta é a configuração de amostra com wickedpdf. config / initializers / 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. Reinicie o servidor.

FEITO.

ThienSuBS
fonte
0

Para uso de 64 bits:

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

Thilina Hasantha
fonte
0

Apenas diga ao backend Qt para não usar o X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
loonix
fonte