wkhtmltopdf: X sunucusuna bağlanılamıyor


113

Linux web sunucumda html'yi anında pdf belgelerine dönüştürmek için wkthmltopdf kullanıyorum . Program başlangıçta X11 veya benzeri X sunucusunun doğru çalışması için gerekliydi, ancak geliştiricilerin bunu GUI'siz sunucularda çalıştırması için yaptığı birçok istek nedeniyle, statik sürümde sanal bir X sunucusu çalıştırdığından oldukça eminim . Programın statik (bağımsız) sürümünü kullanıyorum ve harika çalışıyor! Yürütülebilir dosyayı bir klasöre koyup şunu çalıştırırdım:

./wkhtmltopdf file1.html file2.pdf

Ancak bu programı sistem genelinde kurmak istiyorum. Kullandığım apt-get install wkhtmltopdf(sadece yüklü dün) ve ben 64 bit sistemde çalıştırıyorum beri, ben de gerekli apt-get install ia32-libs. Kurulumdan sonra sürümü şu şekilde bulabilirim:

wkhtmltopdf --version

çıktı:

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.

Şimdi aptitude ile yüklenen programı çalıştırmaya çalıştığımda, aşağıdaki hatayı alıyorum:

wkhtmltopdf: cannot connect to X server

Bunu nasıl düzeltebileceğimi bilen var mı? Sanırım bu sürümde sanal bir X sunucusu veya başka bir şey eksik.

Yanıtlar:


206

veya bunu deneyin ( http://drupal.org/node/870058 adresinden )

  1. Wkhtmltopdf dosyasını indirin. Veya bir paket yöneticisi ile daha iyi kurun:

    sudo apt-get install wkhtmltopdf
    
  2. Çıkarın ve şuraya taşıyın: /usr/local/bin/

  3. wkhtmltopdfŞimdi şurada çalıştırılabilir bir dosyaya sahip olacak şekilde yeniden adlandırın/usr/local/bin/wkhtmltopdf
  4. İzinleri ayarlayın: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Gerekli destek paketlerini kurun.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Çalışıp çalışmadığını kontrol edin: çalıştırın

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

    Eğer işe yararsa, o zaman bitirdiniz. "X sunucusuna bağlanılamıyor" hatasını alırsanız, 7 numaraya geçin.

  7. Bunu 'sanal' bir x sunucusunda başsız çalıştırmamız gerekiyor. Bunu xvfb adlı bir paketle yapacağız.

    sudo apt-get install xvfb
    
  8. Wkhtmltopdf'i xvfb'ye sarmak için küçük bir kabuk betiği yazmamız gerekiyor. Adlı bir dosya oluşturun wkhtmltopdf.shve aşağıdakileri ekleyin:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Bu kabuk komut dosyasını taşıyın /usr/local/binve izinleri ayarlayın:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Bir kez daha çalışıp çalışmadığını kontrol edin: çalıştırın

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

O Not http://www.google.com gibi bir hata atabilir "Bir ResourceObject bir yükleme bitmiş sinyal alınan tamamladı. Bu yüke uzun bir iframe alma belirtisi olabilir." Gibi daha basit bir sayfayla test etmek isteyebilirsiniz http://www.example.com.


1
Bu öğreticiyi başlangıçta denedim ve pek işe yaramadı, ayrıca sarmalayıcıyı sembolik bağlantıyla oluşturmaktan da hoşlanmadım. Cevabımda yazdığım gibi, statik yürütülebilir dosyayı /usr/bin/dizine taşırsanız, istediğiniz yerden kullanabilirsiniz. Statik yürütülebilir dosyaya sanal bir x sunucusu eklediler, bu nedenle sarmalayıcı komut dosyasını yapmaya gerek kalmadı.
jeffery_the_wind

benim için çalıştı .. bazı durumlarda. Sanırım eksik 32 bit kitaplıkların yüklenmesi
sorunu çözdü

6 numaradaki ifade ne If you get the error "Cannot connect to X server" then continue to number 6.anlama geliyor? Kafam çok karıştı. 7 numaraya devam etmek mi istiyorsun?
Noz

Evet, kastedilen budur ... orijinal makale öğeleri yanlış numaralandırmıştır. Öyleyse # 7'ye
geçin

teşekkürler, yeniden numaralandırıldı .. Önerilen cevap çoğu durumda işe yarayacaktır, bu yüzden önce bunu deneyin
TimoSolo

61

Bu benim için sorunu çözdü:

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

Bu en kolay ve en güvenli yaklaşımdır, çünkü wkhtmltopdf'in standart kurulumu x-sunucusunu içermemektedir.
Peter

Çoğu durumda "X sunucusuna bağlanılamıyor" sorununu bu şekilde çözebilirsiniz.
üçlü

2
Redhat tabanlı dağıtımlarda sudo yum install xorg-x11-server-Xvfbresp. sudo dnf install xorg-x11-server-Xvfb.
TNT

28

Yapmaya çalıştım sudo apt-get install wkhtmltopdfama başarılı olamadım. Bunun yerine şunu denemenizi tavsiye ederim:

  1. En son çalıştırılabilir dosyayı (.11 rc1) indirin:

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

  2. sıkıştırın:

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

  3. yeniden adlandırın:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. çalıştırılabilir olarak chmod:

    chmod a+x wkhtmltopdf

  5. / usr / bin içine yerleştirin:

    sudo mv wkhtmltopdf /usr/bin


code.google.com/p/wkhtmltopdf/issues/detail?id=730 gibi görünüyor ve 11.0_rc1'de bazı sorunlar var
montrealmike

bu benim için çalıştı, ancak pdf oluşturma başarısız oldu, bu yüzden yukarıdaki talimatlarıhttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87 30'13

1
wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz'i indirmek artık benim için çalışıyor. Bazı nedenlerden dolayı en son değil.
chasetheskyforever

1
Bunun benim için çalıştığını doğrulayabilirim: (en son kararlı sürüm atm alınıyor ) 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

Şimdi yaptım:

1- wkhtmltopdf bağımlılıklarını indirmek için

# apt-get install wkhtmltopdf

2- Kaynaktan indirin

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

# dpkg -i xxx.deb

3- Deneyin

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

İyi çalışıyor

İşe yarıyor!


apt-get install -fBağımlılıkları almak için paketi kurduktan sonra çalıştırmak zorunda kaldım . Aksi takdirde bir cazibe gibi çalıştı. Bu yöntemi anlatılanlara çok tercih edin.
dmuir

2
Katılıyorum. Bu çözüm beni mevcut devire getirdi. Dpkg -i komutu bazı belirsiz bilgiler üretti ama ne olursa olsun işe yaradı: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debardındansudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler

bu, bu soruya sağlanan daha iyi çözümdür.
versvs

1
Ben çalıştırmak zorunda sudo mv wkhtmltopdf /usr/bindan /usr/local/bin/dizinde ancak bu büyük çalıştı! Bu sayfadaki diğer tüm yöntemleri denedim, elimde hiç şans yok ..
shaneparsons

bu, diğer paketlere güvenmeden en son ve daha basit bir çözüm olarak daha yüksek oylar almalıdır (bu aynı zamanda 'X sunucusuna bağlanılamıyor' sorununu da çözer). ve xvfb kullanırken göreceli css yolunun yüklenmemesi ile ilgili sorunlar yaşıyorum.
zynick

16

Sahte X sunucusu olmadan bu sorunu çözmek için bir yöntem buldum. Wkhtmltopdf'in en yeni sürümünde çalışmak için X sunucusuna gerek yoktur, ancak resmi linux depolarında yoktur.

Ubuntu 14.04.4 LTS (güvenilir) i386 için çözüm

$ 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 (güvenilir) amd64 için çözüm

$ 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 kullanıcısı çok iyi bir çözüme kavuştu, ancak faydalı depo değişti.


nedense bu benim için çalışıyordu ve yeni sürüm (0.13) teşekkür etmedi!
talsibony

Bu benim için işe yarayan çözüm, birçok başka çözümü denedim ama hiçbiri işe yaramadı. Php / Laravel ortamında yeni olduğum için bu kitaplıklar ve bağımlılıklar hakkında derin bir bilgim yok, ancak bu çözüm harika, saatlerimi kurtardı :)
Amit

Gerçekten bu çözüm harika bugün üretime geçtim ve aynı sorunu yaşadım, hiç vakit kaybetmeden bu çözümü çalıştırdım ve sorunsuz çalıştı :)
Amit

gna.org artık kapatıldı. :(
Jya

11

Timothy'nin cevabını genişletiyoruz ...

Web uygulamanızın bir parçası olarak wkhtmltopdf kullanmak isteyen bir web geliştiriciyseniz, bunu aşağıdaki /usr/bin/gibi klasörünüze kurabilirsiniz :

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

Şimdi kullanarak her yerde çalıştırabilirsiniz wkhtmltopdf .

Ben şahsen PHP'deki Snappy kitaplığını kullanıyorum . İşte bir PDF oluşturmanın ne kadar kolay olduğuna dair bir örnek:

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

SourceForge'dan en son wkhtmltopdf sürümüne güncelleyin (bu yazının ardından 0.12). Çalıştırmak için bir X Sunucusuna ihtiyaç duymaz.

Ubuntu 14.04 için örnek:

$ 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
0.12.1'i yükledim ve hala X sunucusuna bağlanamadığımı soruyor. Bir şey mi kaçırıyorum?
Ales Maticic

Tekrar denedim ve bu benim için çalışıyor (kurulum yok, sadece kutuyu temiz tutmak için). Yukarıdaki düzenlemeye bakın.
felixhummel

9

14.04.1-Ubuntu için 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

Sorun muhtemelen wkhtmltopdf'in eski sürümündedir - dağıtım deposundaki sürüm 0.9, X sunucusunun çalıştırılmasını gerektirir, ancak mevcut sürüm - 0.12.2.1 gerektirmez - başsız çalışabilir.

Http://wkhtmltopdf.org/downloads.html adresinden dağıtımınız için paketi indirin ve kurun - Ubuntu için:

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

6

wkhtmltopdf> 0.11bu X-serversorunu yaşamıyor .
Yani 0.12.2.1bir linux sunucusuna kurulum .

  1. İlk olarak xvfb sunucusunu kurun:

    sudo apt-get install xvfb
    
  2. Http://wkhtmltopdf.org/downloads.html adresinden gerekli wkhtmltopdf sürümünü edinin.

  3. Wkhtmltopdf'i yükleyin:

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

    veya ile kur 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. Bağımlılığı yükleyin (gerekirse):

    sudo apt-get -f install
    
  5. Şurada simgesel bağlantı oluşturun /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. Şimdi aşağıyı deneyin ve çalışmalı,

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

5

Sadece statik yürütülebilir dosyayı /usr/bin/dizine taşıyabileceğimi ve herhangi bir yerden çalıştırabileceğimi anladım.



1

Buradaki talimatları takip ettim ve wkhtmltopdf'i benim için çalıştırdım ancak kendi küçük dansımı yaparken keşfettiğim biraz perspektif sunmak istiyorum wkhtmltopdf- xvfb.

Bu önemlidir, çünkü kötü şöhretli cannot connect to X serverhatayı atmasına neden olan aynı neden, bir X sunucusu sağlasanız bile sunucu sınırlamalarıyla çalışmasına neden olur. Bu sınırlamalar arasında birden fazla giriş kaynağı alamama, üstbilgi ve altbilgi ayarlayamama vb. ( Kılavuzun Azaltılmış İşlevsellik bölümünü kontrol edin ).

wkhtmltoxkendi başına bir X11 gerektirmez, ancak bunu yapan QT kitaplıklarını kullanır. Wkthmltox'un yeni sürümlerinde, geliştiriciler QT için bir X11 ile çalışmasına izin veren bir yama yaptılar.

Şu anda bazı sürümler yamalı QT'ye göre oluşturulmuştur ve bazıları değildir. Sürümünüzü çalıştırarak kontrol edebilirsiniz wkhtmltopds --version. Sonunda yazan bir satır olmalıCompiled against wkhtmltopdf patched qt.

Sonuç olarak, yamalı kitaplıkları kullanan bir sürümü kurar ve kullanırsanız, xvfbonaylayabildiğim gibi, sunucu olmadan bir linux sunucusunda çalışmalıdır .


1

Centos7 için çözüm :

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

Docker konteynerlerinde bu problemle karşılaşıyoruz ve yukarıdaki kurulumda yamalı QT ile wkhtmltopdf var


2
benim için URL çalışmıyordu, bunu kullandım: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

Dikkat edin: dosyanız wkhtmltopdf.shveyawkhtmltopdf , ikinci adımda kontrol edin

Bunu şu dizine kopyalamanız gerekir: / usr / local / bin , çalıştırılabilir olmasını sağlayın ve wkhtmltopdf.sh'nin sembolik bağlantısını şu şekilde eklemelisiniz :

1- komut:

sudo apt-get install wkhtmltopdf

2 - ikiliyi / usr / bin dizinine ekleyin, böylece tarayıcının bu dizinde yürütme izni olamaz. Kopyalayabilir gerekir wkhtmltopdf.sh dizinine / usr / local / bin tarayıcı gibi bu dizine izni neden:

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

3 - Make sur sonra ikili, aşağıdaki gibi yürütme iznine sahiptir:

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

4 - şimdi test edebilirsiniz, şu şekilde çalışır:

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

pdf'i terminalinizdeki mevcut dizinde indirmenizi sağlar

5 - İsteğe bağlı şimdi dizin içinde sembolik ekleyebilir / usr / local / bin gibi

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

0
  1. Dosyayı bu bağlantıdan indirin
  2. Çıkarın ve yürütülebilir dosyayı (/ wkhtmltox / bin / wkhtmltopdf) şuraya taşıyın: /usr/bin/
  3. Mevcut ad wkhtmltopdf değilse, wkhtmltopdf olarak yeniden adlandırın. Böylece şu anda bir çalıştırılabilir dosyaya sahipsiniz./usr/bin/wkhtmltopdf
  4. İzinleri ayarlayın: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Gerekli destek paketlerini kurun. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Şimdi wkhtmltopdf http://www.google.com test.pdf ipucu ile kontrol edin : bu bağlantıdan ayrıntılı bilgi


0

Centos'ta Rails veya Somethings için wkhtmltopdf yapılandırırsanız, aşağıdaki adımı takip edebilirsiniz:

  1. Https://wkhtmltopdf.org/downloads.html adresine gidin ve rpm dosyasının bağlantısını kopyalayın.

Centos server bash içinde.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Wkhtmltopdf yolunu alacaksınız.

  1. Adım 4'teki yol ile wicked_pdf veya pdfkit için kurulum. Bu, wickedpdf ile örnek yapılandırmadır. yapılandırma / başlatıcılar / 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. Sunucuyu yeniden başlatın.

YAPILAN.


0

64 bit Kullanım için:

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 arka ucuna X kullanmamasını söyleyin:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.