wkhtmltopdf: impossibile connettersi al server X


113

Ho usato wkthmltopdf per convertire al volo documenti HTML in PDF sul mio server web Linux. Il programma originariamente necessitava di X11 o di un server X simile per funzionare correttamente, ma attraverso molte richieste da parte degli sviluppatori di farlo funzionare su server senza GUI, sono abbastanza sicuro che esegua un server X virtuale nella versione statica . Sto usando la versione statica (stand-alone) del programma e funziona benissimo! Metterei il file eseguibile in una cartella ed eseguire:

./wkhtmltopdf file1.html file2.pdf

Tuttavia, vorrei installare questo programma a livello di sistema. Ho usato il apt-get install wkhtmltopdf(appena installato ieri) e poiché sto funzionando su un sistema a 64 bit, avevo anche bisogno di apt-get install ia32-libs. Dopo l'installazione posso trovare la versione come questa:

wkhtmltopdf --version

produzione:

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.

Ora, quando provo a eseguire il programma installato tramite aptitude, ottengo il seguente errore:

wkhtmltopdf: cannot connect to X server

Qualcuno sa come posso risolvere questo problema? Immagino che in questa versione manchi un server X virtuale o qualcosa del genere.

Risposte:


206

o prova questo (da http://drupal.org/node/870058 )

  1. Scarica wkhtmltopdf. O meglio installarlo con un gestore di pacchetti:

    sudo apt-get install wkhtmltopdf
    
  2. Estrailo e spostalo in /usr/local/bin/

  3. Rinominalo in wkhtmltopdfcosì che ora hai un eseguibile in/usr/local/bin/wkhtmltopdf
  4. Imposta le autorizzazioni: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Installa i pacchetti di supporto richiesti.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Controlla per vedere se funziona: esegui

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

    Se funziona, hai finito. Se ricevi l'errore "Impossibile connettersi al server X", vai al numero 7.

  7. Dobbiamo eseguirlo senza testa su un server x "virtuale". Lo faremo con un pacchetto chiamato xvfb.

    sudo apt-get install xvfb
    
  8. Dobbiamo scrivere un piccolo script di shell per racchiudere wkhtmltopdf in xvfb. Crea un file chiamato wkhtmltopdf.she aggiungi quanto segue:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Spostare questo script di shell in /usr/local/bine impostare i permessi:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Controlla per vedere se funziona ancora una volta: esegui

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

Tieni presente che http://www.google.com potrebbe generare un errore del tipo "Un oggetto ResourceObject finito ha ricevuto un segnale di caricamento completato. Potrebbe essere un'indicazione di un iframe che impiega troppo tempo per caricarsi". Potresti provare con una pagina più semplice come http://www.example.com.


1
Ho provato quel tutorial in origine, e non ha funzionato, inoltre non mi piaceva dover creare il wrapper con collegamento simbolico. Come ho scritto nella mia risposta, se sposti semplicemente l'eseguibile statico nella /usr/bin/directory puoi usarlo da qualsiasi luogo. Hanno aggiunto un x-server virtuale all'eseguibile statico, quindi non è necessario creare lo script wrapper.
jeffery_the_wind

ha funzionato per me .. in alcune situazioni. Penso che l'installazione delle librerie a 32 bit mancanti abbia risolto il problema per me - grazie per il suggerimento
TimoSolo

Cosa If you get the error "Cannot connect to X server" then continue to number 6.dovrebbe significare l'affermazione al numero 6 ? Sono molto confuso da questo. Intendi dire di continuare fino al numero 7?
Noz

Sì, questo è ciò che si intende ... l'articolo originale aveva una numerazione errata degli articoli. Quindi vai al # 7
dwaz

grazie, rinumerato .. La risposta suggerita dovrebbe funzionare nella maggior parte dei casi, quindi prova prima
TimoSolo

61

Questo ha risolto il problema per me:

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

Questo è l'approccio più semplice e sicuro, poiché l'installazione standard di wkhtmltopdf non include x-server.
Peter

Ecco come risolvere "Impossibile connettersi al server X" nella stragrande maggioranza dei casi.
tripleee

2
Su distribuzioni basate su Redhat usa sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT

28

Ho provato a farlo sudo apt-get install wkhtmltopdfma senza alcun successo. Invece ti consiglio di provare:

  1. Scarica l'ultimo eseguibile (.11 rc1):

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

  2. decomprimilo:

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

  3. rinominalo:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod in eseguibile:

    chmod a+x wkhtmltopdf

  5. posizionalo in / usr / bin:

    sudo mv wkhtmltopdf /usr/bin


code.google.com/p/wkhtmltopdf/issues/detail?id=730 sembra che vs 11.0_rc1 abbia alcuni problemi
montrealmike

questo ha funzionato per me, ma la generazione del pdf non è riuscita, quindi ho sostituito le istruzioni di cui sopra conhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87

1
il download di wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz funziona per me ora. Per qualche motivo l'ultimo no.
chasetheskyforever

1
Posso confermare che questo ha funzionato per me: (ottenendo l'ultima versione stabile 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

Appena fatto:

1- Per scaricare le dipendenze di wkhtmltopdf

# apt-get install wkhtmltopdf

2- Scarica dalla sorgente

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

# dpkg -i xxx.deb

3- Prova

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

Funziona bene

Funziona!


Ho dovuto eseguire apt-get install -fdopo aver installato il pacchetto per ottenere le dipendenze. Altrimenti ha funzionato a meraviglia. Preferisco di gran lunga questo metodo agli altri descritti.
dmuir

2
Sono d'accordo. Questa soluzione mi ha portato all'attuale rev. Il comando dpkg -i ha generato alcune informazioni ambigue ma, a prescindere, ha funzionato: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debseguito dasudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler,

questa è ancora la migliore soluzione fornita a questa domanda.
versvs

1
Ho dovuto correre sudo mv wkhtmltopdf /usr/bindalla /usr/local/bin/directory, ma ha funzionato benissimo! Ho provato tutti gli altri metodi su questa pagina senza fortuna in
anticipo

questo dovrebbe ottenere voti più alti come soluzione più recente e più semplice senza fare affidamento su altri pacchetti (il che risolve anche il problema "Impossibile connettersi al server X"). e ho problemi con il percorso css relativo che non viene caricato quando si utilizza xvfb.
zynick

16

Ho trovato un metodo per risolvere questo problema senza un falso server X. Nella versione più recente di wkhtmltopdf non è necessario il server X per lavorare, ma non nei repository linux ufficiali.

Soluzione per Ubuntu 14.04.4 LTS (fidato) 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

Soluzione per Ubuntu 14.04.4 LTS (fidato) 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

L'utente felixhummel ha ottenuto un'ottima soluzione, ma il repository con utilite è cambiato.


per qualche motivo questo funzionava per me e la versione più recente (0.13) non era grazie!
talsibony

Questa è la soluzione che ha funzionato per me, ho provato molte altre risoluzioni ma nessuna ha funzionato. Dato che sono nuovo nell'ambiente php / Laravel, quindi non ho una conoscenza approfondita di queste librerie e dipendenze, ma questa soluzione è fantastica, mi ha semplicemente salvato le ore :)
Amit

Davvero questa soluzione è fantastica oggi sono passato alla produzione e ho avuto lo stesso problema, senza sprecare ogni volta che ho eseguito queste soluzioni e ha funzionato senza problemi :)
Amit

gna.org è ora chiuso. :(
Jya

11

Espandendo la risposta di Timoteo ...

Se sei uno sviluppatore web che cerca di utilizzare wkhtmltopdf come parte della tua app web, puoi semplicemente installarlo nella tua /usr/bin/cartella in questo modo:

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

Ora puoi eseguirlo ovunque usando wkhtmltopdf.

Io personalmente uso lo Snappy libreria in PHP. Ecco un esempio di quanto sia facile creare un 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

Aggiorna all'ultima versione wkhtmltopdf da SourceForge (0.12 al momento della stesura di questo documento). Non necessita di un X Server per funzionare.

Esempio per 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
Ho installato la 0.12.1 e continua a non essere in grado di connettermi al server X. Mi sto perdendo qualcosa?
Ales Maticic

Ho provato di nuovo e per me funziona (nessuna installazione, solo per mantenere pulita la scatola). Vedi modifica sopra.
felixhummel

9

per 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

Il problema è probabilmente nella vecchia versione di wkhtmltopdf - la versione 0.9 dal repository di distribuzione richiede l'esecuzione del server X, ma la versione corrente - 0.12.2.1 non lo richiede - può essere eseguita senza testa.

Scarica il pacchetto per la tua distribuzione da http://wkhtmltopdf.org/downloads.html e installalo - per Ubuntu:

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

6

wkhtmltopdf> 0.11non ha questo X-serverproblema.
Quindi installazione 0.12.2.1su un server Linux.

  1. Alla prima installazione del server xvfb:

    sudo apt-get install xvfb
    
  2. Ottieni la versione necessaria di wkhtmltopdf da http://wkhtmltopdf.org/downloads.html

  3. Installa wkhtmltopdf:

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

    o installa con 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. Installa dipendenza (se necessario):

    sudo apt-get -f install
    
  5. Crea collegamento simbolico in /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. Ora prova sotto e dovrebbe funzionare,

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

5

Ho appena capito che posso semplicemente spostare l'eseguibile statico nella /usr/bin/directory ed eseguirlo da qualsiasi luogo.



1

Ho seguito le istruzioni qui e ho fatto funzionare wkhtmltopdf per me, ma vorrei offrire un po 'di prospettiva che ho scoperto mentre facevo la mia piccola danza con wkhtmltopdf- xvfb.

Questo è importante perché lo stesso motivo per cui genera l' cannot connect to X servererrore famigerato sta anche causando l'esecuzione con limitazioni di server anche se gli si fornisce un server X. Queste limitazioni includono l'impossibilità di accettare più sorgenti di input, impostare intestazione e piè di pagina, ecc. (Controllare la sezione Funzionalità ridotta del manuale ).

wkhtmltoxdi per sé non richiede un X11, tuttavia utilizza le librerie QT che lo fanno. Nelle versioni più recenti di wkthmltox gli sviluppatori hanno creato una patch per QT che gli consente di funzionare con un X11.

Attualmente alcune versioni sono costruite con QT patchate e altre no. Puoi controllare la tua versione eseguendo wkhtmltopds --version. Alla fine dovrebbe esserci una riga che diceCompiled against wkhtmltopdf patched qt.

Quindi, per concludere, se installi e usi una versione che usa le librerie patchate dovrebbe funzionare su un server Linux senza il xvfbserver, come posso confermare.


1

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

Incontriamo questo problema all'interno dei container Docker e l'installazione di cui sopra ha wkhtmltopdf con QT patchato


2
per me l'URL non funzionava, ho usato questo: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

Fai attenzione: il tuo file potrebbe essere wkhtmltopdf.sho wkhtmltopdf, controllalo al secondo passaggio

Devi copiarlo nella directory: / usr / local / bin , assicurati che sia eseguibile e aggiungi il link simbolico di wkhtmltopdf.sh come:

1- il comando:

sudo apt-get install wkhtmltopdf

2 - inserisci il binario nella directory / usr / bin in modo che il browser non possa avere il permesso di eseguire in questa directory. È necessario copiare wkhtmltopdf.sh nella directory / usr / local / bin poiché il browser ha i permessi in questa directory come:

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

3 - Dopo aver verificato che il binario abbia il permesso di esecuzione come:

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

4 - quindi ora puoi testare, funziona come:

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

fa scaricare il pdf nella directory corrente del tuo terminale

5 - Opzionale ora puoi aggiungere symlink nella tua directory / usr / local / bin come

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf

0
  1. Scarica il file da questo link
  2. Estrailo e sposta il file eseguibile (/ wkhtmltox / bin / wkhtmltopdf) in /usr/bin/
  3. Rinominalo in wkhtmltopdf se il nome corrente non è wkhtmltopdf. Quindi ora hai un eseguibile in/usr/bin/wkhtmltopdf
  4. Imposta i permessi: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Installa i pacchetti di supporto richiesti. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Ora controlla con wkhtmltopdf http://www.google.com test.pdf suggerimento: informazioni dettagliate da questo link


0

Se configuri wkhtmltopdf per Rails o Somethings in Centos, puoi seguire questi passaggi seguenti:

  1. Vai su https://wkhtmltopdf.org/downloads.html e copia il link del file rpm.

In centos server bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Otterrai il percorso di wkhtmltopdf.

  1. Configurazione per wicked_pdf o pdfkit con percorso nel passaggio 4. Questa è una configurazione di esempio con wickedpdf. config / inizializzatori / 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. Riavvia il server.

FATTO.


0

Per uso a 64 bit:

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

Dì al backend Qt di non usare X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.