iT邦幫忙

DAY 15
2

回應鐵人賽的文章變鐵人系列 第 15

[Reply] 在 Linux 上轉 html 檔成 pdf

swdsyu 在 淺談Ruby產生PDF的套件-Prawn 一文裡,
提及用ruby產生pdf檔的議題,
在此介紹個linux上的現成轉html成pdf的工具。
這令人驚奇可以在命令列就做出PDF的軟體是 wkhtmltopdf
在Ubuntu及ArchLinux上直接下指令安裝即可,
而Fedora 沒有直接現成的rpm檔,
可以到:
http://repos.amberdms.com/pub/amberdms/linux/fedora/13/amberdms-os/SRPMS/
抓SRPM檔來重build一個RPM檔。
或直接用已經build好的RPM檔來安裝:
http://repos.amberdms.com/pub/amberdms/linux/fedora/13/amberdms-os/i386/RPMS/
在我那沒裝任何Xorg的環境下,
安裝這wkhtmltopdf 會需以下相關的開發套件安裝:

# pacman -S wkhtmltopdf
resolving dependencies...
looking for inter-conflicts...

Targets (40): libjpeg-8.0.2-1  libtiff-3.9.4-1  libpng-1.4.4-1  libmng-1.0.10-3  dbus-core-1.4.0-1 xcb-proto-1.6-1  xproto-7.0.18-1  libxdmcp-1.0.3-1  libxau-1.0.6-1  libxcb-1.7-1 kbproto-1.0.5-1  libx11-1.3.5-1  dbus-1.4.0-1  freetype2-2.4.3-1  fontconfig-2.8.0-1 libdrm-2.4.21-2  xextproto-7.1.2-1  libxext-1.1.2-1  xf86vidmodeproto-2.3-1 libxxf86vm-1.1.0-1  fixesproto-4.1.1-1  libxfixes-4.0.5-1  damageproto-1.2.0-1 libxdamage-1.1.3-1  libgl-7.8.2-3  libice-1.0.6-1  libsm-1.1.1-1 renderproto-0.11.1-1  libxrender-0.9.6-1  randrproto-1.3.1-1  libxrandr-1.3.0-1 videoproto-2.3.1-1  libxv-1.0.5-1  inputproto-2.0-1  libxi-1.3.2-1 alsa-lib-1.0.23-1  xdg-utils-1.0.2.20100618-1  hicolor-icon-theme-0.12-1  qt-4.7.0-4 wkhtmltopdf-0.9.9-1

Total Download Size:    32.19 MB
Total Installed Size:   147.02 MB

使用的方式也很簡單,
1.用wget 下載指定的網頁,
wget -p http://www.eff.org

$ find
.
./www.eff.org
./www.eff.org/files
./www.eff.org/files/css
./www.eff.org/files/css/3317ce57622e8cc117dbbb69537e8b53.css
./www.eff.org/files/frontpages
./www.eff.org/files/frontpages/back-door.png
./www.eff.org/files/frontpages/coica-victory.png
./www.eff.org/files/frontpages/Copyright-trolls_0.jpg
./www.eff.org/index.html
./www.eff.org/robots.txt

下載了以上的檔案。

2.進入該網頁的目錄所在,
cd www.eff.org
並執行
$ wkhtmltopdf index.html eff.pdf
Xlib: extension "RANDR" missing on display ":1.0".
Loading page (1/2)
Printing pages (2/2)
Done

但前提似乎是要有X的界面啟動,
而從X界面下的console終端機執行才會成功。
這是做出一個eff.pdf 實際的結果。

3.當然,英文的一定沒問題,中文就……
但令人訝異的是,中文顯示也沒問題!
以wget -p http://www.ithome.com.tw/
然後做出了這個 ithome.pdf 結果。

4.小結:
打開來看這些pdf成品,
中文無亂碼,
且中英文字都可被搜尋,
只是url的連結並沒做出來。
若是flash一定出不來,
若網頁原版面的結構複雜,
畫出來的pdf一定無法像原貌般的呈現。
目前測試,
似乎一定要在X執行情況下,
在其中所開的終端機裡的命令列才能執行,
不然會出現:

wkhtmltopdf: cannot connect to X server

之錯誤訊息,
不曉得是否能在遠端的連結就做出來呢?

系列文章


上一篇
[Reply] Linux中的sudoers檔案設定簡介
下一篇
[Reply] 如何從命令列透過mutt及gmail寄信
系列文
回應鐵人賽的文章變鐵人30

1 則留言

0
James
iT邦大師 7 級 ‧ 2010-10-14 13:02:40

我都是列印的時候選列印至檔案就可以轉成PDF了
當然下指令的好處是可以支援批次作業

我要留言

立即登入留言