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.

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.


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

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


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!


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.


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>');

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
<<

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

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

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

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
    

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.



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.


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


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

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


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.


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


0

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

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.