wkhtmltopdf: không thể kết nối với máy chủ X


113

Tôi đã sử dụng wkthmltopdf để chuyển đổi tài liệu html sang pdf nhanh chóng trên máy chủ web linux của mình. Ban đầu chương trình cần X11 hoặc máy chủ X tương tự để chạy chính xác, nhưng qua nhiều yêu cầu của các nhà phát triển để chạy chương trình này trên các máy chủ không có GUI, tôi khá chắc chắn rằng nó chạy một máy chủ X ảo trong phiên bản tĩnh . Tôi đã sử dụng phiên bản tĩnh (độc lập) của chương trình và nó hoạt động rất tốt! Tôi sẽ đặt tệp thực thi trong một thư mục và chạy:

./wkhtmltopdf file1.html file2.pdf

Tuy nhiên, tôi muốn cài đặt chương trình này trên toàn hệ thống. Tôi đã sử dụng apt-get install wkhtmltopdf(vừa được cài đặt ngày hôm qua) và vì tôi đang chạy trên hệ thống 64 bit, tôi cũng cần apt-get install ia32-libs. Sau khi cài đặt, tôi có thể tìm thấy phiên bản như sau:

wkhtmltopdf --version

đầu ra:

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.

Bây giờ khi tôi cố gắng chạy chương trình được cài đặt qua aptitude, tôi gặp lỗi sau:

wkhtmltopdf: cannot connect to X server

Có ai biết làm thế nào tôi có thể sửa chữa điều này? Tôi đoán phiên bản này thiếu máy chủ X ảo hoặc một cái gì đó.

Câu trả lời:


206

hoặc thử cái này (từ http://drupal.org/node/870058 )

  1. Tải xuống wkhtmltopdf. Hoặc tốt hơn là cài đặt nó bằng trình quản lý gói:

    sudo apt-get install wkhtmltopdf
    
  2. Giải nén nó và di chuyển nó đến /usr/local/bin/

  3. Đổi tên nó thành wkhtmltopdfđể bây giờ bạn có một tệp thực thi tại/usr/local/bin/wkhtmltopdf
  4. Đặt quyền: sudo chmod a+x /usr/local/bin/wkhtmltopdf
  5. Cài đặt các gói hỗ trợ bắt buộc.

    sudo apt-get install openssl build-essential xorg libssl-dev
    
  6. Kiểm tra xem nó có hoạt động không: chạy

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

    Nếu nó hoạt động, thì bạn đã hoàn thành. Nếu bạn gặp lỗi "Không thể kết nối với máy chủ X" thì hãy tiếp tục đến số 7.

  7. Chúng tôi cần chạy nó không cần đầu trên máy chủ x 'ảo'. Chúng tôi sẽ làm điều này với một gói có tên là xvfb.

    sudo apt-get install xvfb
    
  8. Chúng ta cần viết một đoạn mã shell nhỏ để bọc wkhtmltopdf trong xvfb. Tạo một tệp được gọi wkhtmltopdf.shvà thêm những thứ sau:

    xvfb-run -a -s "-screen 0 640x480x16" wkhtmltopdf "$@"
    
  9. Di chuyển tập lệnh shell này đến /usr/local/binvà đặt quyền:

    sudo chmod a+x /usr/local/bin/wkhtmltopdf.sh
    
  10. Kiểm tra xem nó có hoạt động trở lại hay không: chạy

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

Lưu ý rằng http://www.google.com có thể gặp lỗi như "ResourceObject đã hoàn thành đã nhận được tín hiệu tải xong. Đây có thể là dấu hiệu cho thấy iframe mất nhiều thời gian để tải." Bạn có thể muốn thử nghiệm với một trang đơn giản hơn như http://www.example.com.


1
Tôi đã thử hướng dẫn đó ban đầu, và nó không hoàn toàn hoạt động, tôi cũng không thích phải tạo trình bao bọc với liên kết tượng trưng. Giống như tôi đã viết trong câu trả lời của mình, nếu bạn chỉ cần di chuyển tệp thực thi tĩnh vào /usr/bin/thư mục, bạn có thể sử dụng nó từ bất cứ đâu. Họ đã thêm một máy chủ x ảo vào tệp thực thi tĩnh, vì vậy không cần tạo tập lệnh trình bao bọc.
jeffery_the_wind

nó đã làm việc cho tôi .. trong một số tình huống. Tôi nghĩ rằng cài đặt thiếu thư viện 32bit cố định nó cho tôi - cảm ơn cho tip mà
TimoSolo

Câu lệnh trong số 6 If you get the error "Cannot connect to X server" then continue to number 6.có nghĩa là gì? Tôi rất bối rối vì điều này. Ý bạn là muốn nói tiếp đến số 7?
Noz

Vâng, đó là những gì có nghĩa là ... bài báo gốc đã đánh số sai các mục. Vì vậy, tiếp tục đến # 7
dwaz

cảm ơn, đã đánh số lại .. Tuy nhiên, câu trả lời được đề xuất sẽ hoạt động trong hầu hết các trường hợp, vì vậy hãy thử câu trả lời đó trước
TimoSolo

61

Điều này đã giải quyết vấn đề cho tôi:

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

Đây là cách tiếp cận dễ nhất và an toàn nhất, vì cài đặt chuẩn của wkhtmltopdf không bao gồm x-server.
Peter

Đây là cách giải quyết "không thể kết nối với máy chủ X" trong đại đa số các trường hợp.
tripleee

2
Trên các bản phân phối dựa trên Redhat sử dụng sudo yum install xorg-x11-server-Xvfbtương ứng. sudo dnf install xorg-x11-server-Xvfb.
TNT

28

Tôi đã cố gắng làm sudo apt-get install wkhtmltopdfnhưng không thành công. Thay vào đó, tôi khuyên bạn nên thử:

  1. Tải xuống tệp thực thi mới nhất (.11 rc1):

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

  2. giải nén nó:

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

  3. đổi tên nó:

    mv wkhtmltopdf-i386 wkhtmltopdf

  4. chmod nó để thực thi:

    chmod a+x wkhtmltopdf

  5. đặt nó vào / usr / bin:

    sudo mv wkhtmltopdf /usr/bin


code.google.com/p/wkhtmltopdf/issues/detail?id=730 có vẻ như so với 11.0_rc1 có một số vấn đề
montrealmike

này làm việc cho tôi, nhưng thế hệ pdf thất bại vì vậy tôi thay thế các hướng dẫn ở trên vớihttps://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.9.9-static-i386.tar.bz2
martincarlin87

1
tải xuống wkhtmltox-linux-amd64_0.12.0-03c001d.tar.xz hiện hoạt động với tôi. Vì một số lý do mới nhất không.
chasetheskyforever

1
Tôi có thể xác nhận rằng điều này phù hợp với tôi: ( tải xuống phiên bản ổn định mới nhất 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

Chỉ cần làm cho nó:

1- Để tải xuống phần phụ thuộc wkhtmltopdf

# apt-get install wkhtmltopdf

2- Tải xuống từ nguồn

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

# dpkg -i xxx.deb

3- Thử

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

Nó hoạt động tốt

Nó hoạt động!


Tôi đã phải chạy apt-get install -fsau khi cài đặt gói để lấy các phụ thuộc. Nếu không thì làm việc như một sự quyến rũ. Nhiều người thích phương pháp này hơn những phương pháp khác được mô tả.
dmuir

2
Tôi đồng ý. Giải pháp này đã đưa tôi đến phiên bản hiện tại. Lệnh -i dpkg đã tạo ra một số thông tin mơ hồ nhưng không phân biệt, nó làm việc: wget -q http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.debtiếp theosudo dpkg --install wkhtmltox-0.12.2.1_linux-trusty-amd64.deb
Bill Butler

đây vẫn là giải pháp tốt hơn được cung cấp cho câu hỏi này.
đấu với

1
Tôi đã phải chạy sudo mv wkhtmltopdf /usr/bintừ /usr/local/bin/thư mục, nhưng điều này làm việc tốt! Tôi đã thử mọi phương pháp khác trên trang này không có may mắn trước khi tay ..
shaneparsons

điều này sẽ nhận được lượt ủng hộ cao hơn vì là giải pháp mới nhất và đơn giản hơn mà không cần dựa vào các gói khác (cũng giải quyết được vấn đề 'Không thể kết nối với máy chủ X'). và tôi gặp sự cố với đường dẫn css tương đối không được tải khi sử dụng xvfb.
zynick

16

Tôi đã tìm thấy phương pháp để giải quyết vấn đề này mà không cần máy chủ X giả. Trong phiên bản mới nhất của wkhtmltopdf không cần máy chủ X để làm việc, nhưng nó không cần vào kho lưu trữ linux chính thức.

Giải pháp cho Ubuntu 14.04.4 LTS (Trusty) 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

Giải pháp cho Ubuntu 14.04.4 LTS (Trusty) 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

Người dùng felixhummel có giải pháp rất tốt, nhưng kho lưu trữ với useite đã thay đổi.


vì một số lý do mà điều này đã hoạt động đối với tôi và phiên bản mới hơn (0.13) không phải là cảm ơn bạn!
talsibony

Đây là giải pháp phù hợp với tôi, tôi đã thử rất nhiều giải pháp khác nhưng không có giải pháp nào hoạt động. Như tôi mới để php / môi trường Laravel vì vậy tôi có kiến thức không sâu sắc về các thư viện & phụ thuộc, nhưng giải pháp này là tuyệt vời chỉ đơn giản là lưu giờ tôi :)
Amit

Thực sự giải pháp này là tuyệt vời ngày hôm nay tôi chuyển sang sản xuất và có cùng một vấn đề, mà không lãng phí bất cứ lúc nào tôi chỉ cần chạy các giải pháp và nó làm việc suôn sẻ :)
Amit

gna.org hiện đã ngừng hoạt động. :(
Jya

11

Mở rộng câu trả lời của Ti-mô-thê ...

Nếu bạn là nhà phát triển web muốn sử dụng wkhtmltopdf như một phần của ứng dụng web của mình, bạn có thể chỉ cần cài đặt nó vào /usr/bin/thư mục của mình như sau:

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

Bây giờ bạn có thể chạy nó ở bất cứ đâu bằng cách sử dụng wkhtmltopdf.

Cá nhân tôi sử dụng thư viện Snappy trong PHP. Đây là một ví dụ về cách dễ dàng tạo một tệp 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

Cập nhật lên phiên bản wkhtmltopdf mới nhất từ ​​SourceForge (0.12 tính đến thời điểm viết bài này). Nó không cần X Server để chạy.

Ví dụ cho 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
Tôi đã cài đặt 0.12.1 và nó vẫn nhắc tôi không thể kết nối với máy chủ X. Tui bỏ lỡ điều gì vậy?
Ales Maticic

Đã thử lại và điều này phù hợp với tôi (không cần cài đặt, chỉ để giữ cho hộp sạch sẽ). Xem chỉnh sửa ở trên.
felixhummel

9

cho 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

Vấn đề có thể là ở phiên bản cũ của wkhtmltopdf - phiên bản 0.9 từ kho lưu trữ phân phối yêu cầu chạy máy chủ X, nhưng phiên bản hiện tại - 0.12.2.1 thì không yêu cầu - có thể chạy không cần thiết.

Tải xuống gói cho bản phân phối của bạn từ http://wkhtmltopdf.org/downloads.html và cài đặt nó - cho Ubuntu:

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

6

wkhtmltopdf> 0.11không có X-servervấn đề này.
Vì vậy, cài đặt 0.12.2.1trên một máy chủ linux.

  1. Lúc đầu cài đặt máy chủ xvfb:

    sudo apt-get install xvfb
    
  2. Nhận phiên bản cần thiết của wkhtmltopdf từ http://wkhtmltopdf.org/downloads.html

  3. Cài đặt wkhtmltopdf:

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

    hoặc cài đặt với 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. Cài đặt phụ thuộc (nếu cần):

    sudo apt-get -f install
    
  5. Tạo liên kết symblic trong /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. Bây giờ hãy thử bên dưới và nó sẽ hoạt động,

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

5

Tôi chỉ phát hiện ra rằng tôi có thể chỉ cần di chuyển tệp thực thi tĩnh vào /usr/bin/thư mục và thực thi nó từ bất cứ đâu.



1

Tôi đã làm theo hướng dẫn ở đây và làm cho wkhtmltopdf phù hợp với tôi nhưng tôi muốn cung cấp một chút quan điểm mà tôi đã khám phá ra khi thực hiện điệu nhảy nhỏ của riêng mình với wkhtmltopdf- xvfb.

Điều này rất quan trọng bởi vì lý do tương tự khiến nó cannot connect to X servergặp lỗi khét tiếng cũng là khiến nó chạy với các giới hạn của máy chủ ngay cả khi bạn cung cấp cho nó một máy chủ X. Những hạn chế này bao gồm không thể lấy nhiều nguồn đầu vào, thiết lập đầu trang và chân trang, v.v. (kiểm tra phần Chức năng Giảm của sổ tay ).

wkhtmltoxbản thân nó không yêu cầu X11, tuy nhiên nó đang sử dụng các thư viện QT. Trong các phiên bản mới nhất của các nhà phát triển wkthmltox đã tạo một bản vá cho QT cho phép nó chạy với X11.

Hiện tại một số phiên bản được xây dựng dựa trên QT đã được vá và một số thì không. Bạn có thể kiểm tra phiên bản của mình bằng cách chạy wkhtmltopds --version. Phải có một dòng ở cuối nói rằngCompiled against wkhtmltopdf patched qt.

Vì vậy, để kết luận, nếu bạn cài đặt và sử dụng một phiên bản sử dụng các thư viện được vá, nó sẽ hoạt động trên một máy chủ linux mà không cần xvfbmáy chủ, như tôi có thể xác nhận.


1

giải pháp cho 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

Chúng tôi gặp sự cố này bên trong bộ chứa docker và cài đặt ở trên có wkhtmltopdf với QT được vá


2
đối với tôi URL không hoạt động, tôi đã sử dụng cái này: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

Chú ý: tệp của bạn có thể là wkhtmltopdf.shhoặcwkhtmltopdf , hãy kiểm tra nó ở bước thứ hai

Bạn phải sao chép nó vào thư mục: / usr / local / bin , làm cho nó thực thi được và thêm liên kết tượng trưng của wkhtmltopdf.sh như:

1- lệnh:

sudo apt-get install wkhtmltopdf

2 - chèn tệp nhị phân vào thư mục / usr / bin để trình duyệt không thể có quyền thực thi trong thư mục này. Bạn phải sao chép wkhtmltopdf.sh vào thư mục / usr / local / bin vì trình duyệt có quyền trong thư mục này như:

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

3 - Sau khi thực hiện, nhị phân có quyền thực thi như:

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

4 - vì vậy bây giờ bạn có thể kiểm tra, nó hoạt động như sau:

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

nó thực hiện tải xuống pdf trong thư mục hiện tại trong thiết bị đầu cuối của bạn

5 - Tùy chọn bây giờ bạn có thể thêm liên kết biểu tượng trong thư mục / usr / local / bin của bạn như

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

0
  1. Tải xuống tệp từ liên kết này
  2. Giải nén nó và di chuyển tệp thực thi (/ wkhtmltox / bin / wkhtmltopdf) sang /usr/bin/
  3. Đổi tên nó thành wkhtmltopdf nếu tên hiện tại không phải là wkhtmltopdf. Vì vậy, bây giờ bạn có một tệp thực thi tại/usr/bin/wkhtmltopdf
  4. Đặt quyền: sudo chmod a + x / usr / bin / wkhtmltopdf
  5. Cài đặt các gói hỗ trợ bắt buộc. sudo apt-get install openssl build-essential xorg libssl-dev
  6. Bây giờ, hãy kiểm tra với wkhtmltopdf http://www.google.com test.pdf gợi ý: thông tin chi tiết từ liên kết này


0

Nếu bạn định cấu hình wkhtmltopdf cho Rails hoặc Somethings trong Centos, bạn có thể làm theo bước sau:

  1. Truy cập https://wkhtmltopdf.org/downloads.html và sao chép liên kết của tệp rpm.

Trong máy chủ centos bash.

  1. wget link_of_wkhtmltopdf_rpm.rpm

  2. rpm -ivh link_of_wkhtmltopdf_rpm.rpm

  3. which wkhtmltopdf

=> Bạn sẽ nhận được đường dẫn của wkhtmltopdf.

  1. Thiết lập cho wicked_pdf hoặc pdfkit với đường dẫn ở bước 4. Đây là cấu hình mẫu với 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. Khởi động lại máy chủ.

LÀM XONG.


0

Để sử dụng 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

Chỉ cần yêu cầu phần phụ trợ Qt không sử dụng X:

QT_QPA_PLATFORM=offscreen wkhtmltopdf <input> <outfile.pdf>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.