相關(guān)文章
HTML 轉(zhuǎn) PDF 之 wkhtmltopdf 工具簡(jiǎn)介
術(shù)語定義
文檔對(duì)象
“文檔對(duì)象”是指PDF文檔中的文檔對(duì)象,共有三種類型的“文檔對(duì)象”,他們分別是“頁面對(duì)象”,“封面對(duì)象”和“目錄對(duì)象”。
頁面對(duì)象
“頁面對(duì)象”是指以頁面的形式在PDF文檔中呈現(xiàn)的對(duì)象,這個(gè)是相對(duì)于“封面對(duì)象”和“目錄對(duì)象”來講的。此類對(duì)象會(huì)成為PDF文檔中內(nèi)容。
封面對(duì)象
“封面對(duì)象”是指以封面的形式在PDF文檔中呈現(xiàn)的對(duì)象。這類對(duì)象會(huì)成為PDF文檔中的封面。
目錄對(duì)象
“目錄對(duì)象”是以目錄的形式在PDF文檔中呈現(xiàn)的對(duì)象,又叫“TOC對(duì)象”。這類對(duì)象會(huì)成為PDF文檔中的目錄。
大綱
“大綱”是指閱讀PDF文檔時(shí)的書簽導(dǎo)航。
外鏈
“外鏈”是指所有在這個(gè)頁面中且不指向它自身頁面中錨點(diǎn)的超鏈接。
內(nèi)鏈
“內(nèi)鏈”是指在這個(gè)頁面中且指向的目標(biāo)頁面是這個(gè)頁面本身中的一個(gè)錨點(diǎn)的超鏈接。
命令格式
wkhtmltopdf [GLOBAL OPTION]... [OBJECT]... <output file>
上述代碼就是 wkhtmltopdf 的命令行格式,看似簡(jiǎn)單,其實(shí)在 [GLOBAL OPTION] 和 [OBJECT] 中還別有洞天。預(yù)知詳情,且聽我慢慢道來。
文檔對(duì)象簡(jiǎn)介
wkhtmltopdf 能夠把多個(gè)“對(duì)象”合并生成一個(gè)pdf文檔,這些“對(duì)象”可以是“頁面對(duì)象”、“封面對(duì)象”、或是“目錄對(duì)象”。這些對(duì)象在pdf文檔中的順序可以通過命令行參數(shù)來指定。命令行參數(shù)包括兩部分,一種是針對(duì)某一特定“對(duì)象”的命令行參數(shù),另一種是全局的命令行參數(shù)。并且全局的命令行參數(shù)只能放在全局參數(shù)區(qū)([GLOBAL OPTION])中指定。
頁面對(duì)象簡(jiǎn)介
“頁面對(duì)象”作用是用來把一個(gè)網(wǎng)頁作為內(nèi)容輸出到PDF文檔中。
(page)? <input url/file name> [PAGE OPTION]...
“頁面對(duì)象”的參數(shù)可以放在“全局參數(shù)域([GLOBAL OPTIONS])”和“頁面參數(shù)域([PAGE OPTIONS])”。程序會(huì)根據(jù)實(shí)際情況在所有參數(shù)中找到合適的參數(shù)應(yīng)用到頁面、頁眉和頁腳。
封面對(duì)象簡(jiǎn)介
“封面對(duì)象”用來把一個(gè)網(wǎng)頁作為封面輸出到PDF文檔中,輸出的頁面不會(huì)在TOC中出現(xiàn),并且不會(huì)包含頁眉和頁腳。
cover <input url/file name> [PAGE OPTION]...
所有能夠在“頁面對(duì)象”中使用的參數(shù)都可以用到“封面對(duì)象”
目錄對(duì)象簡(jiǎn)介
“目錄對(duì)象”的作用是輸出一個(gè)目錄到PDF文件中。
toc [TOC OPTION]...
所有能夠在“頁面對(duì)象”中使用的參數(shù)都可以用到“TOC對(duì)象”,并且還有許多的針對(duì)“TOC對(duì)象”的參數(shù)可以應(yīng)用到“TOC對(duì)象”中。目錄是通過 XSLT 生成的,這就意味著它可以被定義成任何你想看到的樣子。你可以通過命令行參數(shù) --dump-default-toc-xsl 輸出默認(rèn)的 XSLT 文檔,通過 --dump-outline 命令行參數(shù) 可指定以XML格式輸出當(dāng)前處理文檔的目錄到指定文件。更多詳細(xì)內(nèi)容請(qǐng)查看后面介紹的 目錄對(duì)象參數(shù)
命令參數(shù)
命令參數(shù)包含五部分,分別是“全局參數(shù)”,“大綱參數(shù)選項(xiàng)”,“頁面對(duì)象參數(shù)”,“頁眉和頁腳參數(shù)選項(xiàng)”和“目錄對(duì)象參數(shù)”。
全局參數(shù)
--collate 當(dāng)輸出多個(gè)副本時(shí)進(jìn)行校驗(yàn)(這是默認(rèn)設(shè)置)
--no-collate 當(dāng)輸出多個(gè)副本時(shí)不進(jìn)行校驗(yàn)
--cookie-jar <path> 從提供的JAR文件中讀寫cookie數(shù)據(jù)
--copies <number> 設(shè)置輸出副本的數(shù)量(默認(rèn)主1),其實(shí)為1就夠了
-d, --dpi <dpi> 指定一個(gè)要分辨率(這在 X11 系統(tǒng)中并沒有什么卵用)
-H, --extended-help 相對(duì) -h 參數(shù),顯示更詳細(xì)的說明文檔
-g, --grayscale 指定以灰度圖生成PDF文檔。占用的空間更小
-h, --help 顯示幫助信息
--htmldoc 輸出程序的html幫助文檔
--image-dpi <integer> 當(dāng)頁面中有內(nèi)嵌的圖片時(shí),
會(huì)下載此命令行參數(shù)指定尺寸的圖片(默認(rèn)值是 600)
--image-quality <interger> 當(dāng)使用 jpeg 算法壓縮圖片時(shí)使用這個(gè)參數(shù)指定的質(zhì)量(默認(rèn)為 94)
--license 輸出授權(quán)信息并退出
-l, --lowquality 生成低質(zhì)量的 PDF/PS ,能夠很好的節(jié)約最終生成文檔所占存儲(chǔ)空間
--manpage 輸出程序的手冊(cè)頁
-B, --margin-bottom <unitreal> 設(shè)置頁面的 底邊距
-L, --margin-left <unitreal> 設(shè)置頁面的 左邊距 (默認(rèn)是 10mm)
-R, --margin-right <unitreal> 設(shè)置頁面的 右邊距 (默認(rèn)是 10mm)
-T, --margin-top <unitreal> 設(shè)置頁面的 上邊距
-O, --orientation <orientation> 設(shè)置為“風(fēng)景(Landscape)”或“肖像(Portrait)”模式,
默認(rèn)是肖像模塊(Portrait)
--page-height <unitreal> 頁面高度
-s, --page-size <Size> 設(shè)置頁面的尺寸,如:A4,Letter等,默認(rèn)是:A4
--page-width <unitreal> 頁面寬度
--no-pdf-compression 不對(duì)PDF對(duì)象使用丟失少量信息的壓縮算法,不建議使用些參數(shù),
因?yàn)樯傻腜DF文件會(huì)非常大。
-q, --quiet 靜態(tài)模式,不在標(biāo)準(zhǔn)輸出中打印任何信息
--read-args-from-stdin 從標(biāo)準(zhǔn)輸入中讀取命令行參數(shù),后續(xù)會(huì)有針對(duì)此指令的詳細(xì)介紹,
請(qǐng)參見 **從標(biāo)準(zhǔn)輸入獲取參數(shù)**
--readme 輸出程序的 readme 文檔
--title <text> 生成的PDF文檔的標(biāo)題,如果不指定則使用第一個(gè)文檔的標(biāo)題
-V, --version 輸出版本信息后退出
上述代碼區(qū)是所有全局參數(shù)及注釋,下面簡(jiǎn)單說一下個(gè)別參數(shù)的意義及用法。
--copies N
N 是一個(gè)正整數(shù)。
這個(gè)選項(xiàng)可以先不用關(guān)心了,因?yàn)槟氵@輩子可能都用不到。他的作用是在生成的PDF文檔中,把內(nèi)容重復(fù)輸出 N 份。也就是說,你將得到一個(gè)PDF文檔,這個(gè)文檔中的大小、內(nèi)容量都將是不使用此參數(shù)時(shí)的 N 倍。然而重復(fù)的內(nèi)容對(duì)你來說并沒有什么卵用。
如果不使用 --copies 參數(shù),那么 --collate 和 --no-collate 參數(shù)就不用了解了,因?yàn)樗麄冎辉?--copies 參數(shù)中的 N 大于 1 時(shí)才有意義。
-g, --grayscale
這個(gè)參數(shù)非常有用,使用這個(gè)參數(shù)可以有效壓縮生成的PDF所占用的存儲(chǔ)空間。當(dāng)然這個(gè)壓縮是要付出一定代價(jià)的,那就是最終生成的PDF文檔將是灰度的,沒有任何色彩。如果你能接受灰度PDF文檔,并不影響實(shí)際使用,那就請(qǐng)使用這個(gè)參數(shù)吧。生成的PDF文檔越大,使用此參數(shù)獲得的驚喜就越大。
-l, --lowquality
這個(gè)參數(shù)與 -g 參數(shù)有異曲同工之妙, -l 參數(shù)也會(huì)大大壓縮PDF文檔所占用的存儲(chǔ)空間。只是它是通過降低PDF文檔的質(zhì)量來完成這一任務(wù)的。這個(gè)參數(shù)也值得推薦,你最好先嘗試一下,看看使用此參數(shù)后生成的PDF文檔與不使用此參數(shù)的區(qū)別再做決定。我可以告訴你的是,在純文字的情況下他們的差別不大,此參數(shù)只是降低了PDF文檔的質(zhì)量,看上去是糙了一些,但不會(huì)影響閱讀。如果你是一個(gè)追求感官享受,或是你生成的PDF文檔中有大量圖片,那就不要使用此參數(shù)了。
--no-pdf-compression
這個(gè)參數(shù)強(qiáng)烈建議不要使用,最好這輩子都不要去了解他的好,因?yàn)閷?duì)于你來說肯定用不到。它的作用就是在輸出PDF文檔時(shí),不使用任何的壓縮。這將會(huì)導(dǎo)致輸出的PDF文檔特別的大,質(zhì)量是無損的,但是對(duì)于人類來說從感觀上根本察覺不到壓縮前后的質(zhì)量變化的。如果你的感觀超乎于常人,壓縮之后的體驗(yàn)對(duì)你來說無法接受,那我收回前面的話,你就盡情使用此參數(shù)吧。
-q, --quiet
使用這個(gè)參數(shù)后,你將得到一個(gè)干凈的命令行輸出,就連程序處理的進(jìn)度和狀態(tài)都沒有。這個(gè)參數(shù)會(huì)抑制所有命令行輸出,在程序的工作過程中,你看不到任何輸出。建議不會(huì)使用此參數(shù),因?yàn)槌绦蜉敵鲆恍┻M(jìn)度和狀態(tài)信息還是非常有用的。萬一程序工作到某處死了呢(嘿嘿),在 -q 模式下你是無法分辨是否程序死掉了的。
大綱參數(shù)選項(xiàng)
--dump-default-toc-xsl 輸出默認(rèn)的 TOC xsl 樣式表到標(biāo)準(zhǔn)輸出
--dump-outline <file> 輸出“大綱”到指定的文件(文件內(nèi)容為xml)
--outline 在生成的PDF文檔中輸出“大綱”(這是默認(rèn)設(shè)置)
--no-outline 不在pdf文檔中輸出大綱
--outline-depth <level> 設(shè)置生成大綱的深度(默認(rèn)為 4)
大綱參數(shù)中唯一需要特別說一下的是 --outline-depth ,其他參數(shù)默認(rèn)就好了。
何為大綱

如上圖所示,其實(shí)我更喜歡稱之為目錄或?qū)Ш?。大綱是根據(jù)你HTML中的標(biāo)題(Hn標(biāo)簽)自動(dòng)生成的。
--outline-depth
--outline-depth 用來指定生成的大綱的深度。默認(rèn)值為 4。你可以指定一個(gè)大一些的數(shù)字,以保證所有在HTML中指定的H標(biāo)簽都能在大綱中生成對(duì)應(yīng)的項(xiàng),方便閱讀時(shí)快速跳轉(zhuǎn)。
當(dāng)指定了 --no-outline 參數(shù)時(shí), 將不會(huì)輸出大綱到PDF文檔,所以再指定 --outline-depth 也就沒有意義了。
頁面對(duì)象參數(shù)
--allow <path> 指定加載HTML中相對(duì)路徑文件的目錄(可重復(fù)使用此參數(shù)指定多個(gè)
目錄),這個(gè)參數(shù)會(huì)在后面進(jìn)行更詳細(xì)的講解
--background 輸出頁面背景到PDF文檔(這是默認(rèn)設(shè)置)
--no-background 不輸出頁面背景到PDF文檔
--cache-dir <path> 網(wǎng)頁的緩存目錄
--checkbox-checked-svg <path> 使用指定的SVG文件渲染選中的復(fù)選框
--checkbox-svg <path> 使用指定的SVG文件渲染未選中的篩選框
--cookie <name> <value> 設(shè)置訪問網(wǎng)頁時(shí)的cookie,value 需要進(jìn)行url編碼
(可重復(fù)使用此參數(shù)指定多個(gè)cookie)
--custom-header <name> <value> 設(shè)置訪問網(wǎng)頁時(shí)的HTTP頭(可重復(fù)使用此參數(shù)指定多個(gè)HTTP頭)
--custom-header-propagation 為每個(gè)要加載的資源添加由 --custom-header 指定的HTTP頭
--no-custom-header-propagation 不為每個(gè)要加載的資源添加由 --custom-header 指定的HTTP頭
--debug-javascript 顯示javascript調(diào)試輸出的信息
--no-debug-javascript 不顯示javascript調(diào)試輸出的信息(這是默認(rèn)設(shè)置)
--default-header 添加一個(gè)默認(rèn)的“頭”,在頁面的左頭顯示頁面的名字,
在頁面的右頭顯示頁碼,這相對(duì)于進(jìn)行了如下設(shè)置:
--header-left='[webpage]'
--header-right='[page]/[toPage]'
--top 2cm
--header-line
--encoding <encoding> 為輸入的文本設(shè)置默認(rèn)的編碼方式
--disable-external-links 禁止頁面中的外鏈生成超鏈接
--enable-external-links 允許頁面中的外鏈生成超鏈接(這是默認(rèn)設(shè)置)
--disable-forms 不轉(zhuǎn)換HTML表單為PDF表單(這是默認(rèn)設(shè)置)
--enable-forms 轉(zhuǎn)換HTML表單為PDF表單
--images 加載圖片并輸出到PDF文檔(這是默認(rèn)設(shè)置)
--no-images 在生成的PDF文檔中過濾掉圖片
--disable-internal-links 禁止頁面中的內(nèi)鏈生成超鏈接
--enable-internal-links 允許頁面中的內(nèi)鏈生成超連接(這是默認(rèn)設(shè)置)
-n, --disable-javascript 禁止WEB頁面執(zhí)行 javascript
--enable-javascript 允許WEB頁面執(zhí)行 javascript(這是默認(rèn)設(shè)置)
--javascript-delay <msec> 延遲一定的毫秒等待javascript 執(zhí)行完成(默認(rèn)值是200)
--load-error-handling <handler> 指定當(dāng)頁面加載失敗后的動(dòng)作,可以指定為:abort(中止)、
ignore(忽略)、skip(跳過);(默認(rèn)值是:abort)
--load-media-error-handling <handler> 指定當(dāng)媒體文件加載失敗后的動(dòng)作,可以指定為:
abort(中止)、ignore(忽略)、skip(跳過);
(默認(rèn)值是:ignore)
--disable-local-file-access 不允許一個(gè)本地文件加載其他的本地文件,使用命令行參數(shù)
`--allow` 指定的目錄除外。
--enable-local-file-access 允許本地文件加載其他的本地文件(這是默認(rèn)設(shè)置)
--minimum-font-size <int> 設(shè)置最小的字號(hào),除非必要不推薦使用該參數(shù)
--exclude-from-outline 拒絕加載當(dāng)前頁面到PDF文檔的目錄和大綱中
--include-in-outline 加載當(dāng)前頁面到PDF文檔的目錄和大綱中(這是默認(rèn)設(shè)置)
--page-offset <offset> 設(shè)置頁碼的起始值(默認(rèn)值為0)
--password <password> HTTP身份認(rèn)證的密碼
--disable-plugins 禁止使用插件(這是默認(rèn)設(shè)置)
--enable-plugins 允許使用插件,但插件可能并不工作
--post <name> <value> 添加一個(gè)POST字段,可以重復(fù)使用該參數(shù)添加多個(gè)POST字段。
--post-file <name> <value> 添加一個(gè)POST文件,可以重復(fù)使用該參數(shù)添加多個(gè)文件。
--print-media-type 用顯示媒體類型代替屏幕
--no-print-media-type 不用顯示媒體類型代替屏幕
-p, --proxy <proxy> 使用代理
--radiobutton-checked-svg <path> 使用指定的SVG文件渲染選中的單選框
--radiobutton-svg <path> 使用指定的SVG文件渲染未選中的單選框
--run-sript <js> 頁面加載完成后執(zhí)行一個(gè)附加的JS文件,可以重復(fù)使用此參數(shù)指定
多個(gè)要在頁面加載完成后要執(zhí)行的JS文件。
--disable-smart-shrinking 不使用智能收縮策略
--enable-smart-shrinking 使用智能收縮策略(這是默認(rèn)設(shè)置)
--stop-slow-scripts 停止運(yùn)行緩慢的javascript代碼(這是默認(rèn)設(shè)置)
--no-stop-slow-scripts 不停止運(yùn)行緩慢的javascript代碼
--disable-toc-back-links 禁止從標(biāo)題鏈接到目錄(這是默認(rèn)設(shè)置)
--enable-toc-back-links 允許從標(biāo)題鏈接到目錄
--user-style-sheet <url> 設(shè)置一個(gè)在每個(gè)頁面都加載的用戶自定義樣式表
--username <username> HTTP身誰的用戶名
--viewport-size <> 設(shè)置窗口大小,需要你自定義滾動(dòng)條或css屬性來自適應(yīng)窗口大小。
--window-status <windowStatus> Wait until window.status is equal to
this string before rendering page
--zoom <float> 設(shè)置轉(zhuǎn)換成PDF時(shí)頁面的縮放比例(默認(rèn)為1)
上面代碼段中只是對(duì)所有 頁面對(duì)象參數(shù) 做了個(gè)大概的說明,下面針對(duì)個(gè)別主要參數(shù)做更詳細(xì)的講解。
--allow
這個(gè)參數(shù)只在“頁面對(duì)象”是一個(gè)文件時(shí)有效,在“頁面對(duì)象”是一個(gè)url時(shí)此參數(shù)無效。
這個(gè)參數(shù)的作用是為HTML頁面中使用相對(duì)路徑引用的文件指定一個(gè)加載文件的基目錄。也就是說HTML文件中所有以相對(duì)路徑指定的文件都會(huì)從 --allow 參數(shù)指定的目錄進(jìn)行加載。其實(shí)在HTML中指定 base 標(biāo)簽可以達(dá)到同樣的目的。如果兩者(--allow參數(shù)和base標(biāo)簽)都沒有指定,則使用當(dāng)前處理的HTML文件所在的目錄作為基目錄加載當(dāng)前處理的HTML中相對(duì)路徑指定的文件。
--background AND --no-background
這兩個(gè)參數(shù)是一對(duì),用來指定是否在生成的PDF中應(yīng)用網(wǎng)頁的背景,默認(rèn) --background 參數(shù)是開啟的,也就是說默認(rèn)生成的PDF文檔中是帶有HTML頁面的背景圖片或背景色的。如果開啟 --no-backgroupd 參數(shù),則生成的PDF文檔中不會(huì)有HTML頁面中的背景圖片和背景色。
--debug-javascript ADN --no-debug-javascript
這兩個(gè)參數(shù)用來指定是否在標(biāo)準(zhǔn)輸出中輸出javascript的調(diào)試信息,默認(rèn) --no-debug-javasript 參數(shù)是開啟的,也就是說默認(rèn)不會(huì)輸出javascript的調(diào)試信息。下圖是打開 --debug-javascript 參數(shù)的演示。

--disable-external-links AND --enable-external-links
這兩個(gè)參數(shù)是用來設(shè)置在頁面中的外鏈?zhǔn)欠褚猿溄拥男问匠霈F(xiàn)在PDF文檔中。關(guān)于“外鏈”的定義請(qǐng)移架 術(shù)語定義 。默認(rèn) --enable-external-links 參數(shù)被打開,所以默認(rèn)情況是頁面中的外鏈?zhǔn)且猿溄拥男问匠霈F(xiàn)的PDF文檔中的,點(diǎn)擊可以打開指定的網(wǎng)頁。
--exclude-from-outline AND --include-in-outline
這兩個(gè)參數(shù)用來設(shè)置當(dāng)前頁面對(duì)象是否包含到目錄和大綱中。
默認(rèn)情況下 --include-in-outline 參數(shù)是打開的。也就是說默認(rèn)情況下生成的PDF文檔目錄和大綱中是包含當(dāng)前頁面的,如果你不想讓當(dāng)前頁面加到目錄和大綱中可以打開 --exclude-from-outline 參數(shù)。
--post AND --post-file
當(dāng)目標(biāo)頁面需要接受POST表單才能正確得到響應(yīng)時(shí),可以用這兩個(gè)參數(shù)。這兩個(gè)參數(shù)都是可以重復(fù)使用的。
還有一個(gè)應(yīng)用場(chǎng)景是,用于自動(dòng)化的WEB應(yīng)用測(cè)試中??梢缘玫絇DF文檔作為測(cè)試報(bào)告。
--post-file 也可以用于自動(dòng)批量上傳文件的場(chǎng)景。
--run-sript
當(dāng)需要對(duì)頁面進(jìn)行一定的預(yù)處理后再生成PDF文檔的場(chǎng)景,使用該參數(shù)再合適不過了。這個(gè)參數(shù)可以重復(fù)使用指定多個(gè)需要在頁面加載完成后執(zhí)行的JS代碼。你可以在這些JS中對(duì)頁面的結(jié)構(gòu)和內(nèi)容進(jìn)處理,JS執(zhí)行完成后才會(huì)把對(duì)應(yīng)的頁面生成PDF文檔。
--disable-internal-links AND --enable-internal-links
這兩個(gè)參數(shù)是用來設(shè)置在頁面中的內(nèi)鏈?zhǔn)欠褚猿溄拥男问匠霈F(xiàn)在PDF文檔中。關(guān)于“內(nèi)鏈”的定義請(qǐng)移架 術(shù)語定義 。默認(rèn) --enable-internal-links 參數(shù)被打開,所以默認(rèn)情況是頁面中的內(nèi)鏈?zhǔn)且猿溄拥男问匠霈F(xiàn)的PDF文檔中的,點(diǎn)擊在當(dāng)前PDF中跳轉(zhuǎn)到指定錨點(diǎn)。
--enable-toc-back-links AND --disable-toc-back-links
這組參數(shù)用來設(shè)置,是否在PDF內(nèi)容中的H標(biāo)簽處生成超鏈接。生成的超鏈接點(diǎn)擊后會(huì)跳轉(zhuǎn)到目錄和大綱中該H標(biāo)簽對(duì)應(yīng)的錨點(diǎn)位置。默認(rèn)情況下 --disable-toc-back-links 參數(shù)被打開,不會(huì)在PDF文檔的H標(biāo)簽處生成超鏈接。
如果你需要在閱讀PDF文檔的內(nèi)容時(shí)快速回到目錄,你可以打開 --enable-toc-back-links 參數(shù)。
--user-style-sheet
這個(gè)參數(shù)用來加載一個(gè)用戶自定義的樣式表,用來改變HTML頁面原有的樣式。需要高度自定義頁面新式的同學(xué)可以嘗試使用這個(gè)參數(shù)達(dá)到目的。
頁眉和頁腳參數(shù)選項(xiàng)
--footer-center <text> 在頁腳的居中部分顯示頁腳文本 <text>
--footer-font-name <name> 設(shè)置頁腳的字體 (默認(rèn)為 Arial)
--footer-font-size <size> 設(shè)置頁腳的字體大小 (默認(rèn)為 12)
--footer-html <url> 添加一個(gè)html作為頁腳
--footer-left <text> 在頁腳的居左部分顯示頁腳文本 <text>
--footer-line 在頁腳上方顯示一條直線分隔正文
--no-footer-line 不使用直線分隔頁腳與正文(這是默認(rèn)設(shè)置)
--footer-right <text> 在頁腳的居右部分顯示頁腳文本 <text>
--footer-spacing <real> 頁腳與正文之間的距離(默認(rèn)為零)
--header-center <text> 在頁眉的居中部分顯示頁眉文本 <text>
--header-font-name <name> 設(shè)置頁眉的字體 (默認(rèn)為 Arial)
--header-font-size <size> 設(shè)置頁眉的字體大小 (默認(rèn)為 12)
--header-html <url> 添加一個(gè)html作為頁眉
--header-left <text> 在頁眉的居左部分顯示頁眉文本 <text>
--header-line 在頁眉下方顯示一條直線分隔正文
--no-header-line 不使用直線分隔頁眉與正文(這是默認(rèn)設(shè)置)
--header-right <text> 在頁眉的居右部分顯示頁眉文本 <text>
--header-spacing <real> 頁眉與正文之間的距離(默認(rèn)為零)
頁眉頁腳的設(shè)置比較簡(jiǎn)單,看上述代碼段中的解釋已經(jīng)非常明了,所以不再贅述。后面還有針對(duì)頁眉與頁腳的其他相關(guān)介紹。
目錄對(duì)象參數(shù)
--disable-dotted-lines 在目錄中不使用虛線
--toc-header-text <text> 設(shè)置目錄的頁眉文本
--toc-level-indentation <width> 第級(jí)標(biāo)題在目錄中的縮進(jìn)寬度(默認(rèn)為1em)
--disable-toc-links 在目錄中不生成指向內(nèi)容錨點(diǎn)的超鏈接
--toc-text-size-shrink <real> 在目錄中每級(jí)標(biāo)題的縮放比例(默認(rèn)為0.8)
--xsl-style-sheet <file> 使用自定義的 XSL 樣式表顯示目錄內(nèi)容
“目錄對(duì)象”我們一般用不到,上述代碼段中的講解也不難懂,所以不針對(duì)每一個(gè)具體參數(shù)再做詳細(xì)的講解。
關(guān)于頁面尺寸說明
默認(rèn)的頁面尺寸是 A4,你可以使用 --page-size 參數(shù)指定你想要的頁面尺寸,如:A3,Letter 和 Legal等。想要查看本程序支持的所有頁面尺寸,請(qǐng)?jiān)L問 http://qt-project.org/doc/qt-4.8/qprinter.html#PaperSize-enum
你還可以使用 --page-height 和 --page-width 對(duì)頁面尺寸進(jìn)行更精細(xì)的控制。
從標(biāo)準(zhǔn)輸入獲取參數(shù)
如果你需要對(duì)許多頁面進(jìn)行批量的處理,并且感覺 wkhtmltopdf 開啟比較慢,你可以嘗試使用 --read-args-from-stdin 參數(shù)。
wkhtmltopdf 命令會(huì)為 --read-args-from-stdin 參數(shù)發(fā)送過來的每一行進(jìn)行一次單獨(dú)命令調(diào)用。也就是說此參數(shù)每讀取一行都會(huì)執(zhí)行一次 wkhtmltopdf 命令。而最終執(zhí)行的命令中的參數(shù)是命令行中參數(shù)與此參數(shù)讀取的標(biāo)準(zhǔn)輸入流中參數(shù)的結(jié)合。
下面的代碼段是一個(gè)例子:
echo "http://qt-project.org/doc/qt-4.8/qapplication.html qapplication.pdf" >> cmds
echo "cover google.com http://en.wikipedia.org/wiki/Qt_(software) qt.pdf" >> cmds
wkhtmltopdf --read-args-from-stdin --book < cmds
指令一個(gè)代理
默認(rèn)情況下代理信息將讀取環(huán)境變量:proxy、all_proxy 和 http_proxy,代理選項(xiàng)還可以通過指定 -p 參數(shù)開啟。
使用 BNF 對(duì)代理的定義如下:
<type> := "http://" | "socks5://"
<serif> := <username> (":" <password>)? "@"
<proxy> := "None" | <type>? <serif>? <host> (":" <port>)?
如果你不熟悉 BNF 的話,下面的代碼段中是三個(gè)例子:
http://user:password@myproxyserver:8080
socks5://myproxyserver
None
頁眉和頁腳
頁眉和頁腳可以使用參數(shù) --header-* 和 --footer-* 添加到文件中。有些參數(shù)(如 --footer-left)需要提供一個(gè)字符串text作為參數(shù)值。你可以在 text中插入下述變量,他們將會(huì)被替換成對(duì)應(yīng)的值。
[page] 當(dāng)前正在被輸出頁面的頁碼
[frompage] 第一頁在文檔中的頁碼
[topage] 最后一面在文檔中的頁碼
[webpage] 當(dāng)前正在被輸出頁面的URL
[section] 當(dāng)前正在被輸出的章節(jié)的名字
[subsection] 當(dāng)前正在被輸出的小節(jié)的名字
[date] 本地系統(tǒng)格式的當(dāng)前日期
[isodate] ISO 8601 格式的當(dāng)前日期
[time] 本地系統(tǒng)格式的當(dāng)前時(shí)間
[title] 當(dāng)前對(duì)象的標(biāo)題
[doctitle] 輸出文檔的標(biāo)題
[sitepage] 當(dāng)前正在處理的對(duì)象中當(dāng)前頁面的頁碼
[sitepages] 當(dāng)前正在處理的對(duì)象中的總頁數(shù)
舉一個(gè)例子來說明吧,--header-right "Page [page] of [toPage]", 會(huì)在頁面的右上角生成一個(gè)類似 Page x of y 的字符串,其中 x 是當(dāng)前頁面的頁碼, y 是當(dāng)前文檔最后一頁的頁碼。
頁眉和頁腳也可以通過 HTML文檔來提供。 同樣舉一個(gè)例子,使用命令行參數(shù) --header-html header.html 來生成頁眉,而 header.html 的內(nèi)容如下:
<html><head><script>
function subst() {
var vars={};
var x=window.location.search.substring(1).split('&');
for (var i in x) {var z=x[i].split('=',2);vars[z[0]] = unescape(z[1]);}
var x=['frompage','topage','page','webpage','section','subsection','subsubsection'];
for (var i in x) {
var y = document.getElementsByClassName(x[i]);
for (var j=0; j<y.length; ++j) y[j].textContent = vars[x[i]];
}
}
</script></head><body style="border:0; margin: 0;" onload="subst()">
<table style="border-bottom: 1px solid black; width: 100%">
<tr>
<td class="section"></td>
<td style="text-align:right">
Page <span class="page"></span> of <span class="topage"></span>
</td>
</tr>
</table>
</body></html>
大綱(Outlines)
wkhtmltopdf 可以使用 --outline 命令行參數(shù)來指定在PDF就要中輸出像書本中目錄一樣的“大綱”,“大綱”是基本HTML文檔中H標(biāo)簽生成的,具體的大綱的層級(jí)和嘗試請(qǐng)移步 目錄
如果HTML文檔中的H標(biāo)簽等級(jí)比較多,就可以生成深層級(jí)樹形結(jié)構(gòu)的“大綱”,而生成“大綱”的真實(shí)深度是通過 --outline-depth 參數(shù)來控制。
目錄
通過在命令行中添加 TOC對(duì)象 可以把一個(gè)目錄添加到生成的PDF文檔中,例如下面的代碼段:
wkhtmltopdf toc http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
生成的目錄也是基于HTML文檔的H標(biāo)簽。過程是首先生成一個(gè)XML文檔,然后使用XSLT轉(zhuǎn)換為HTML。
生成的 XML 文檔可以通過 --dump-outline 參數(shù)查看。
wkhtmltopdf --dump-outline toc.xml http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
你如果想要使用自定義的XSLT文檔可以通過 --xsl-style-sheet 參數(shù)指定
wkhtmltopdf toc --xsl-style-sheet my.xsl http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
你可以使用 --dump-default-toc-xsl 參數(shù)把默認(rèn)的 XSLT 文檔打印到標(biāo)準(zhǔn)輸出,然后基于它創(chuàng)建你的自定義 XSLT 文檔。
wkhtmltopdf --dump-default-toc-xsl
總結(jié)
以上就是有關(guān) wkhtmltopdf 工具的所有內(nèi)容,這些內(nèi)容中的大部分是通過閱讀 wkhtmltopdf 的 -H 參數(shù)輸出的英文文檔獲取的。水平有限,如有不足請(qǐng)指正。