wkhtmltopdf: tidak dapat terhubung ke server X.

113

Saya telah menggunakan wkthmltopdf untuk mengonversi dokumen html ke pdf dengan cepat di server web linux saya. Program ini awalnya membutuhkan X11 atau server X serupa untuk berjalan dengan benar, tetapi melalui banyak permintaan oleh pengembang untuk menjalankan ini di server tanpa GUI, saya cukup yakin ini menjalankan server X virtual dalam versi statis . Saya telah menggunakan program versi statis (berdiri sendiri) dan bekerja dengan baik! Saya akan meletakkan file yang dapat dieksekusi di sebuah folder, dan menjalankan:

./wkhtmltopdf file1.html file2.pdf

Namun saya ingin menginstal program ini di seluruh sistem. Saya menggunakan apt-get install wkhtmltopdf(baru saja menginstal kemarin) dan karena saya menjalankan sistem 64 bit, saya juga membutuhkannya apt-get install ia32-libs. Setelah instalasi saya dapat menemukan versi seperti ini:

wkhtmltopdf --version

keluaran:

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.

Sekarang ketika saya mencoba menjalankan program yang diinstal melalui aptitude, saya mendapatkan kesalahan berikut:

wkhtmltopdf: cannot connect to X server

Adakah yang tahu bagaimana saya bisa memperbaikinya? Saya kira versi ini tidak memiliki server X virtual atau semacamnya.

jeffery_the_wind
sumber

Jawaban:

206

atau coba ini (dari http://drupal.org/node/870058 )

  1. Unduh wkhtmltopdf. Atau lebih baik instal dengan manajer paket:

    sudo apt-get install wkhtmltopdf
    
  2. Ekstrak dan pindahkan ke /usr/local/bin/

  3. Ubah namanya menjadi wkhtmltopdf sehingga sekarang Anda memiliki file yang dapat dieksekusi di/usr/local/bin/wkhtmltopdf
  4. Setel izin: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Instal paket dukungan yang diperlukan.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Periksa untuk melihat apakah berhasil: jalankan

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

    Jika berhasil, maka Anda sudah selesai. Jika Anda mendapatkan kesalahan "Tidak dapat terhubung ke server X" kemudian lanjutkan ke nomor 7.

  7. Kita perlu menjalankannya tanpa kepala di server x 'virtual'. Kami akan melakukan ini dengan paket yang disebut xvfb.

    sudo apt-get install xvfb
    
  8. Kita perlu menulis skrip shell kecil untuk membungkus wkhtmltopdf di xvfb. Buat file bernama wkhtmltopdf.shdan tambahkan yang berikut ini:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Pindahkan skrip shell ini ke /usr/local/bin, dan setel izin:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Periksa untuk melihat apakah berhasil sekali lagi: jalankan

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

Perhatikan bahwa http://www.google.com mungkin menampilkan kesalahan seperti "ResourceObject yang telah selesai menerima sinyal selesai memuat. Ini mungkin merupakan indikasi iframe membutuhkan waktu lama untuk dimuat." Anda mungkin ingin menguji dengan halaman yang lebih sederhana seperti http://www.example.com.

TimoSolo
sumber
1
Saya mencoba tutorial itu pada awalnya, dan tidak cukup berhasil, juga saya tidak suka harus membuat pembungkus dengan tautan simbolik. Seperti yang saya tulis di jawaban saya, jika Anda hanya memindahkan executable statis ke /usr/bin/direktori, Anda dapat menggunakannya dari mana saja. Mereka menambahkan x-server virtual ke executable statis, jadi tidak perlu membuat skrip pembungkus.
jeffery_the_wind
itu berhasil untuk saya .. dalam beberapa situasi. Saya pikir menginstal pustaka 32bit yang hilang memperbaikinya untuk saya - terima kasih atas tip itu
TimoSolo
Apa If you get the error "Cannot connect to X server" then continue to number 6.maksud pernyataan di nomor 6 ? Saya sangat bingung dengan ini. Apakah Anda bermaksud mengatakan terus ke nomor 7?
Noz
Ya, itulah maksudnya ... artikel asli salah menomori barang. Jadi lanjutkan ke # 7
dwaz
terima kasih, dinomori ulang .. Jawaban yang disarankan seharusnya berfungsi dalam banyak kasus, jadi coba dulu
TimoSolo
61

Ini memecahkan masalah untuk saya:

sudo apt-get install xvfb
xvfb-run --server-args="-screen 0, 1024x768x24" wkhtmltopdf file1.html file2.pdf
syzspectroom.dll
sumber
Ini adalah pendekatan termudah dan teraman, karena instalasi standar wkhtmltopdf tidak menyertakan x-server.
Peter
Ini adalah cara mengatasi "tidak dapat terhubung ke server X" dalam sebagian besar kasus.
tripleee
2
Pada distro berbasis Redhat, gunakan sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT
28

Saya mencoba melakukannya sudo apt-get install wkhtmltopdftetapi tidak berhasil. Sebagai gantinya saya sarankan Anda mencoba:

  1. Unduh file executable terbaru (.11 rc1):

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

  2. buka kompresnya:

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

  3. ganti namanya:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod ke dapat dieksekusi:

    chmod a+x wkhtmltopdf

  5. letakkan di / usr / bin:

    sudo mv wkhtmltopdf /usr/bin

Yakob Ubaidi
sumber
code.google.com/p/wkhtmltopdf/issues/detail?id=730 sepertinya vs 11.0_rc1 memiliki beberapa masalah
montrealmike
ini berhasil untuk saya tetapi generasi pdf gagal jadi saya mengganti instruksi di atas denganhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87
1
mengunduh wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz berfungsi untuk saya sekarang. Untuk beberapa alasan yang terbaru tidak.
chasetheskyforever
1
Saya dapat mengonfirmasi bahwa ini berfungsi untuk saya: (mendapatkan atm versi stabil terbaru) 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

Baru saja berhasil:

1- Untuk mengunduh dependensi wkhtmltopdf

# apt-get install wkhtmltopdf

2- Unduh dari sumber

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

# dpkg -i xxx.deb

3- Coba

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

Ini bekerja dengan baik

Berhasil!

Sfblaauw
sumber
Saya harus menjalankan apt-get install -fsetelah menginstal paket untuk mendapatkan dependensi. Jika tidak bekerja seperti pesona. Lebih suka metode ini daripada yang dijelaskan lainnya.
dmuir
2
Saya setuju. Solusi ini membawa saya ke putaran saat ini. Perintah dpkg -i memang menghasilkan beberapa info yang ambigu tetapi terlepas dari itu, itu berhasil: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debdiikuti olehsudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler
ini masih merupakan solusi yang lebih baik yang diberikan untuk pertanyaan ini.
versvs
1
Saya harus menjalankan sudo mv wkhtmltopdf /usr/bindari /usr/local/bin/direktori, tetapi ini bekerja dengan baik! Saya mencoba setiap metode lain di halaman ini tanpa hasil sebelumnya ..
shaneparsons
ini akan mendapatkan upvote yang lebih tinggi sebagai solusi terbaru dan sederhana tanpa bergantung pada paket lain (yang juga memecahkan masalah 'Tidak dapat terhubung ke server X'). dan saya memiliki masalah dengan jalur css relatif tidak dimuat saat menggunakan xvfb.
zynick
16

Saya menemukan metode untuk menyelesaikan masalah ini tanpa server X palsu. Di versi terbaru wkhtmltopdf tidak memerlukan server X untuk bekerja, tetapi tidak ada di repositori resmi linux.

Solusi untuk Ubuntu 14.04.4 LTS (terpercaya) 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

Solusi untuk Ubuntu 14.04.4 LTS (terpercaya) 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 pengguna mendapat solusi yang sangat bagus, tetapi repositori dengan utilite telah berubah.

PRIHLOP
sumber
untuk beberapa alasan ini berhasil untuk saya dan versi yang lebih baru (0.13) tidak terima kasih!
talsibony
Ini adalah solusi yang berhasil untuk saya, saya telah mencoba banyak resolusi lain tetapi tidak ada yang berhasil. Karena saya baru mengenal lingkungan php / Laravel jadi saya tidak memiliki pengetahuan mendalam tentang pustaka & dependensi ini, tetapi solusi ini luar biasa cukup menghemat jam saya :)
Amit
Sungguh solusi ini luar biasa hari ini saya pindah ke produksi dan mendapat masalah yang sama, tanpa membuang waktu saya hanya menjalankan solusi ini dan bekerja dengan lancar :)
Amit
gna.org sekarang ditutup. :(
Jya
11

Memperluas jawaban Timotius ...

Jika Anda seorang pengembang web yang ingin menggunakan wkhtmltopdf sebagai bagian dari aplikasi web Anda, Anda dapat menginstalnya ke /usr/bin/folder Anda seperti ini:

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

Sekarang Anda dapat menjalankannya di mana saja menggunakan wkhtmltopdf .

Saya pribadi menggunakan pustaka Snappy di PHP. Berikut adalah contoh betapa mudahnya membuat 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
sumber
11

Perbarui ke versi wkhtmltopdf terbaru dari SourceForge (0,12 saat tulisan ini dibuat). Ini tidak membutuhkan X Server untuk dijalankan.

Contoh untuk 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
sumber
1
Saya telah menginstal 0.12.1 dan masih meminta saya tidak dapat terhubung ke X server. Apakah saya melewatkan sesuatu?
Ales Maticic
Mencoba lagi dan ini berfungsi untuk saya (tidak perlu menginstal, hanya untuk menjaga kotak tetap bersih). Lihat edit di atas.
felixhummel
9

untuk 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
sumber
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
sumber
6

Masalahnya mungkin ada di wkhtmltopdf versi lama - versi 0.9 dari repositori distribusi memerlukan server X yang dijalankan, tetapi versi saat ini - 0.12.2.1 tidak memerlukannya - dapat berjalan tanpa kepala.

Unduh paket untuk distribusi Anda dari http://wkhtmltopdf.org/downloads.html dan instal - untuk Ubuntu:

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

wkhtmltopdf> 0.11tidak memiliki X-servermasalah ini .
Jadi menginstal 0.12.2.1di server linux.

  1. Pertama instal server xvfb:

    sudo apt-get install xvfb
    
  2. Dapatkan versi wkhtmltopdf yang dibutuhkan dari http://wkhtmltopdf.org/downloads.html

  3. Pasang wkhtmltopdf:

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

    atau instal dengan 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. Instal dependensi (jika perlu):

    sudo apt-get -f install
    
  5. Buat tautan simbolis di /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. Sekarang coba di bawah ini dan seharusnya berfungsi,

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

Saya baru tahu bahwa saya cukup memindahkan executable statis ke /usr/bin/direktori dan menjalankannya dari mana saja.

jeffery_the_wind
sumber
3

Disarankan untuk menggunakan setidaknya 0.12.2.1.

Mulai dari wkhtmltopdf> = 0.12.2 tidak lagi membutuhkan X server atau emulasi. Anda dapat mengunduh versi baru dari http://wkhtmltopdf.org/downloads.html

David Ginanni
sumber
1

Saya memang mengikuti petunjuk di sini dan membuat wkhtmltopdf bekerja untuk saya, tetapi saya ingin menawarkan sedikit perspektif yang saya temukan saat melakukan tarian kecil saya sendiri dengan wkhtmltopdf- xvfb.

Ini penting karena alasan yang sama yang menyebabkannya melempar cannot connect to X serverkesalahan terkenal juga menyebabkannya berjalan dengan batasan yang parah bahkan jika Anda menyediakannya server X. Batasan ini termasuk tidak dapat mengambil banyak sumber input, mengatur header dan footer, dll (periksa bagian Fungsionalitas yang Dikurangi dari manual ).

wkhtmltoxDengan sendirinya tidak memerlukan X11, tetapi itu menggunakan perpustakaan QT yang melakukannya. Dalam versi baru, pengembang wkthmltox membuat tambalan untuk QT yang memungkinkannya berjalan dengan X11.

Saat ini beberapa versi dibuat dengan QT yang ditambal dan beberapa tidak. Anda dapat memeriksa versi Anda dengan menjalankan wkhtmltopds --version. Harus ada baris di akhir yang bertuliskanCompiled against wkhtmltopdf patched qt.

Jadi, sebagai kesimpulan, jika Anda menginstal dan menggunakan versi yang menggunakan pustaka yang ditambal, versi itu seharusnya bekerja pada server linux tanpa xvfbserver, seperti yang dapat saya konfirmasikan.

Cristian Vrabie
sumber
1

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

Kami mengalami masalah ini di dalam wadah buruh pelabuhan dan instalasi di atas memiliki wkhtmltopdf dengan QT yang ditambal

DmitrySemenov
sumber
2
bagi saya URL tidak berfungsi, saya menggunakan yang ini: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

Perhatikan: file Anda bisa jadi wkhtmltopdf.shatau wkhtmltopdf, periksa di langkah kedua

Anda harus menyalinnya ke direktori: / usr / local / bin , pastikan itu dapat dieksekusi dan tambahkan symlink dari wkhtmltopdf.sh seperti:

1- perintah:

sudo apt-get install wkhtmltopdf

2 - masukkan biner ke direktori / usr / bin sehingga browser tidak memiliki izin untuk mengeksekusi di direktori ini. Anda harus menyalin wkhtmltopdf.sh ke direktori / usr / local / bin karena browser memiliki izin di direktori ini seperti:

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

3 - Setelah memastikan biner memiliki izin eksekusi seperti:

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

4 - jadi sekarang Anda dapat menguji, ini berfungsi seperti:

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

itu membuat unduhan pdf di direktori saat ini di terminal Anda

5 - Opsional sekarang Anda dapat menambahkan symlink di Anda direktori / usr / / lokal bin seperti

ln -s /usr/local/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
rapaelec.dll
sumber
0
  1. Unduh file dari tautan ini
  2. Ekstrak dan pindahkan file yang dapat dieksekusi (/ wkhtmltox / bin / wkhtmltopdf) ke /usr/bin/
  3. Ubah namanya menjadi wkhtmltopdf jika nama saat ini bukan wkhtmltopdf. Sehingga sekarang Anda memiliki file yang dapat dieksekusi di/usr/bin/wkhtmltopdf
  4. Setel izin: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Instal paket dukungan yang diperlukan. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Sekarang, periksa dengan wkhtmltopdf http://www.google.com test.pdf petunjuk: informasi detail dari tautan ini
Ratna Halder
sumber
0

Jika Anda mengkonfigurasi wkhtmltopdf untuk Rails atau Sesuatu di Centos, Anda dapat mengikuti langkah berikut di bawah ini:

  1. Buka https://wkhtmltopdf.org/downloads.html dan salin tautan file rpm.

Di server centos bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Anda akan mendapatkan jalur wkhtmltopdf.

  1. Setup untuk wicked_pdf atau pdfkit dengan path pada langkah 4. Ini adalah contoh konfigurasi dengan wickedpdf. config / penginisialisasi / 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. Mulai ulang server.

SELESAI.

ThienSuBS
sumber
0

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

Thilina Hasantha
sumber
0

Cukup beri tahu backend Qt untuk tidak menggunakan X:

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