2013-03-28 68 views
6

這是我做的:如何使用wkhtmltopdf將簡單的html轉換爲pdf?

  1. 在亞馬遜雲中創建一個linux虛擬機。
  2. 按照https://code.google.com/p/wkhtmltopdf/wiki/compilation的指示下載並編譯wkhtmltopdf-qt和wkhtmltopdf的源代碼。最後我有一個靜態構建的wkhtmltopdf。
  3. 注意到這個網站(http://jsfiddle.net/mark69_fnd/8CtjB/):

    <HTML> <頭> <風格類型= 「文本/ CSS」 > p {字體家庭:無襯線;}; < /風格> < /頭> <體> <p>讓我們來測試</P > < /身體> </HTML >

  4. wkhtmltopdf test.html test.pdf

  5. 複製到檢驗.pdf我Windows桌面,打開它並得到這個(https://docs.google.com/file/d/0B2pbsdBJxJI3MV8zby14cGk5VWs/edit?usp=sharing): enter image description here

我跟着導緊密結合,從../wkhtmltopdf/static_qt_conf_base../wkhtmltopdf/static_qt_conf_linux採取的QT配置選項爲指導提示。

不用說我對結果有點失望。任何人都可以解釋我做錯了什麼?

P.S.

實際上,我需要轉換一個更復雜的HTML,但當我無法轉換一個簡單的HTML時沒有必要談論它。

編輯

我想強調的是,我不工作在Linux上,我只打開一個終端到亞馬遜託管的Linux盒。意思是說,我沒有X11環境。

這是我所得到的,當我嘗試使用預定義的wkhtmltopdf包:

[email protected]:~$ which wkhtmltopdf 
[email protected]:~$ /usr/bin/wkhtmltopdf 
-bash: /usr/bin/wkhtmltopdf: No such file or directory 
[email protected]:~$ sudo apt-get install wkhtmltopdf 
Reading package lists... Done 
Building dependency tree 
Reading state information... Done 
The following NEW packages will be installed: 
    wkhtmltopdf 
0 upgraded, 1 newly installed, 0 to remove and 120 not upgraded. 
Need to get 0 B/104 kB of archives. 
After this operation, 303 kB of additional disk space will be used. 
Selecting previously unselected package wkhtmltopdf. 
(Reading database ... 36679 files and directories currently installed.) 
Unpacking wkhtmltopdf (from .../wkhtmltopdf_0.9.9-3_amd64.deb) ... 
Processing triggers for man-db ... 
Setting up wkhtmltopdf (0.9.9-3) ... 
[email protected]:~$ l test.* 
-rw-r--r-- 1 ubuntu ubuntu 123 Mar 30 12:46 test.html 
[email protected]:~$ cat test.html 
<html> <head> <style type="text/css">p{font-family: sans-serif;};</style> </head> <body> <p>Let's Test</p> </body> </html> 
[email protected]:~$ /usr/bin/wkhtmltopdf test.html test.pdf 
wkhtmltopdf: cannot connect to X server 
[email protected]:~$ 

EDIT2

  1. 我從http://www.howtogeek.com/howto/ubuntu/install-an-rpm-package-on-ubuntu-linux/下載ftp://rpmfind.net/linux/fedora/linux/development/rawhide/x86_64/os/Packages/u/urw-fonts-2.4-14.fc19.noarch.rpm
  2. 其次說明將轉速轉換成一個deb格式。
  3. 安裝deb
  4. 製作pdf,但仍然只看到正方形。

以下是全文:

[email protected]:~$ sudo alien urw-fonts-2.4-14.fc19.noarch.rpm --scripts 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
warning: urw-fonts-2.4-14.fc19.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY 
urw-fonts_2.4-15_all.deb generated 
[email protected]:~$ sudo dpkg -i urw-fonts_2.4-15_all.deb 
Selecting previously unselected package urw-fonts. 
(Reading database ... 38529 files and directories currently installed.) 
Unpacking urw-fonts (from urw-fonts_2.4-15_all.deb) ... 
Setting up urw-fonts (2.4-15) ... 
Processing triggers for fontconfig ... 
[email protected]:~$ ./wkhtmltopdf/bin/wkhtmltopdf test.html test.pdf 
Loading pages (1/6) 
Counting pages (2/6) 
Resolving links (4/6) 
Loading headers and footers (5/6) 
Printing pages (6/6) 
Done 
[email protected]:~$ 

EDIT3

我已經安裝了XVFB運行包,現在默認的版本(在/ usr/bin中/ wkhtmltopdf)可以通過運行它。事實上,它能夠將簡單的test.html轉換爲pdf,但是,對於帶有Javascript代碼的複雜html頁面來說,它沒有這樣做。看起來,/ usr/bin/wkhtmltopdf無法在要轉換的頁面上運行任何Javascript代碼。

我仍然困惑爲什麼編譯版本不起作用。

EDIT4

我一直不公正與默認wkhtmltopdf版本。這是能夠理解JavaScript頁面,它成功地轉化以下HTML:

<html> 
    <head> 
    <style type="text/css"> 
     body { 
     font-family: sans-serif; 
     } 
    </style> 
    </head> 
    <body id='body'> 
    <script> 
     document.getElementById('body').innerHTML = 'Hello world!'; 
    </script> 
    </body> 
</html> 

我會試着去了解它爲什麼會失敗,一個真正的頁面,但我不知道我該怎麼解決,除非是試圖通過扔掉原來的一塊來獲得最小的失敗頁面。

EDIT5

OK,這裏是小例子,不使用默認wkhtmltopdf版本工作:

<!DOCTYPE html> 
<html> 
    <head> 
    <style type="text/css"> 
     html, body { 
       height: 100%; 
       overflow: hidden; 
     } 
    </style> 
    </head> 
    <body> 
    Hello World! 
    </body> 
</html> 

創建的PDF是空的。這裏是成績單:

[email protected]:~$ cat test2.html 
<!DOCTYPE html> 
<html> 
    <head> 
    <style type="text/css"> 
     html, body { 
       height: 100%; 
       overflow: hidden; 
     } 
    </style> 
    </head> 
    <body> 
    Hello World! 
    </body> 
</html> 
[email protected]:~$ xvfb-run /usr/bin/wkhtmltopdf test2.html test2.pdf ; l test2.pdf 
Loading page (1/2) 
Printing pages (2/2) 
Done 
-rw-r--r-- 1 ubuntu ubuntu 1266 Mar 31 11:16 test2.pdf 
[email protected]:~$ cat test2.html |sed 6d | xvfb-run /usr/bin/wkhtmltopdf - test2.pdf ; l test2.pdf 
Loading page (1/2) 
Printing pages (2/2) 
Done 
-rw-r--r-- 1 ubuntu ubuntu 4284 Mar 31 11:16 test2.pdf 
[email protected]:~$ 

注意如何刪除第6行(高度:100%;)更改所創建的pdf文件的大小。

EDIT6

定製版本是靜態連接,而默認的依賴於相當多的WebKit的共享庫:

定製版本:

[email protected]:~/wkhtmltopdf/bin$ l wkhtmltopdf 
-rwxr-xr-x 1 ubuntu ubuntu 35020224 Mar 31 22:26 wkhtmltopdf 
[email protected]:~/wkhtmltopdf/bin$ ldd !$ 
ldd wkhtmltopdf 
     linux-vdso.so.1 => (0x00007fff195ff000) 
     libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007fefc06db000) 
     libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007fefc03a7000) 
     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fefc01a2000) 
     librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fefbff9a000) 
     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fefbfd7d000) 
     libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fefbfa7c000) 
     libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fefbf780000) 
     libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fefbf56a000) 
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fefbf1aa000) 
     /lib64/ld-linux-x86-64.so.2 (0x00007fefc08ef000) 
     libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fefbef8c000) 
     libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007fefbed88000) 
     libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fefbeb82000) 
[email protected]:~/wkhtmltopdf/bin$ 

現在默認版本:

[email protected]:/usr/bin$ l wkhtmltopdf 
-rwxr-xr-x 1 root root 233512 May 7 2011 wkhtmltopdf 
[email protected]:/usr/bin$ ldd wkhtmltopdf 
     linux-vdso.so.1 => (0x00007fff031ff000) 
     libQtWebKit.so.4 => /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4 (0x00007f28a33bc000) 
     libQtGui.so.4 => /usr/lib/x86_64-linux-gnu/libQtGui.so.4 (0x00007f28a26ee000) 
     libQtNetwork.so.4 => /usr/lib/x86_64-linux-gnu/libQtNetwork.so.4 (0x00007f28a23a1000) 
     libQtCore.so.4 => /usr/lib/x86_64-linux-gnu/libQtCore.so.4 (0x00007f28a1ecf000) 
     libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f28a1bcf000) 
     libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f28a19b8000) 
     libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f28a15f9000) 
     libsqlite3.so.0 => /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 (0x00007f28a1356000) 
     libXrender.so.1 => /usr/lib/x86_64-linux-gnu/libXrender.so.1 (0x00007f28a114b000) 
     libgstapp-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0 (0x00007f28a0f3f000) 
     libgstinterfaces-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0 (0x00007f28a0d2d000) 
     libgstpbutils-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0 (0x00007f28a0b09000) 
     libgstvideo-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0 (0x00007f28a08ed000) 
     libgstbase-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0 (0x00007f28a069a000) 
     libgstreamer-0.10.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0 (0x00007f28a03b2000) 
     libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f28a0163000) 
     libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f289fe6e000) 
     libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f289fc50000) 
     libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f289f91c000) 
     libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f289f620000) 
     libfontconfig.so.1 => /usr/lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f289f3e9000) 
     libaudio.so.2 => /usr/lib/x86_64-linux-gnu/libaudio.so.2 (0x00007f289f1d1000) 
     libpng12.so.0 => /lib/x86_64-linux-gnu/libpng12.so.0 (0x00007f289efa9000) 
     libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f289ed91000) 
     libfreetype.so.6 => /usr/lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f289eaf5000) 
     libSM.so.6 => /usr/lib/x86_64-linux-gnu/libSM.so.6 (0x00007f289e8ed000) 
     libICE.so.6 => /usr/lib/x86_64-linux-gnu/libICE.so.6 (0x00007f289e6d2000) 
     libXi.so.6 => /usr/lib/x86_64-linux-gnu/libXi.so.6 (0x00007f289e4c3000) 
     libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f289e2b2000) 
     libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f289e0ad000) 
     librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f289dea5000) 
     /lib64/ld-linux-x86-64.so.2 (0x00007f28a517e000) 
     liborc-0.4.so.0 => /usr/lib/x86_64-linux-gnu/liborc-0.4.so.0 (0x00007f289dc29000) 
     libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f289da25000) 
     libxml2.so.2 => /usr/lib/x86_64-linux-gnu/libxml2.so.2 (0x00007f289d6ca000) 
     libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f289d4c1000) 
     libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f289d284000) 
     libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f289d065000) 
     libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f289ce3b000) 
     libXt.so.6 => /usr/lib/x86_64-linux-gnu/libXt.so.6 (0x00007f289cbd5000) 
     libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f289c9d1000) 
     libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f289c7cc000) 
     libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f289c5c5000) 
[email protected]:/usr/bin$ 

EDIT7

夥計們,我不明白wkhtmltopdf如何爲你工作。我從無到有,完全:

  1. 創建一個全新的Ubuntu的亞馬遜微實例(無級)
  2. sudo易於得到更新
  3. sudo易於得到升級
  4. 命令和apt-get安裝的libx11-dev的
  5. 命令和apt-get安裝libfontconfig1-dev的
  6. wget的https://wkhtmltopdf.googlecode.com/files/wkhtmltopdf-0.11.0_rc1-static-amd64.tar.bz2
  7. 焦油XJF wkhtmltopdf-0.11.0_rc1靜電,amd64.tar.bz2
  8. 與內容創建test2.html從EDIT5(見EDIT5成績單)
  9. 跑test2.html wkhtmltopdf-amd64的。 製作的pdf是空的!
  10. 從test2.html(CSS屬性寬度或溢出)中刪除行6或7,並突然它的工作!

任何人都可以追溯我的步驟並確認它嗎?

EDIT8

安裝了CentOS 6.4在VMware虛擬機上我的筆記本電腦。相同的結果。 wkhtmltopdf不適用於上述的簡單html文件。

+0

在Linux Mint的我已經通過包管理器安裝wkhtmltopdf,然後跑到你的test.html生成的PDF是pefect。對我來說,屏幕上的結果看起來像是一個編碼/字體問題。 –

+0

請參閱我的編輯。 – mark

+0

奇怪的是,我在Mint上使用的版本不需要X.也許這會幫助你:http://wenlong.wordpress.com/2011/04/19/wkhtmltopdf-cannot-connect-to-x-server/關於編譯版本問題,你讀過這個嗎? http://stackoverflow.com/questions/4627802/square-issue-on-wkhtmltopdf –

回答

0

嘗試設置字符集聲明在你的HTML頭標記是這樣的:

<head> 
    <meta charset="utf-8"> 
    ... 
</head>