php 使用html 生成pdf word wkhtmltopdf 系列2
php 使用html 生成 pdf word
項目有個需求 想同時生成word 和pdf 并且·對pdf要求比較高 為了一勞永逸 決定寫成html 分別轉成word 和pdf
系統環境
windows10+ 小皮面板(php8+)
linux centos 7.9 + 寶塔(php8+)
系統擴展 wkhtmltopdf
php擴展
wkhtmltopdf :是一個命令行工具,它使用 Qt WebKit 渲染引擎將 HTML 內容轉換為 PDF 文檔或各種圖像格式
1.wkhtmltopdf 安裝
1.1 Windows10 安裝
官網:https://wkhtmltopdf.org/downloads.html
有的小伙伴下載不了:下載鏈接是通過github下載 這里需要翻墻 。
雙擊點擊安裝
點開在1處 搜索環境變量 點擊編輯環境變量 點擊2 點擊編輯 3處 新建 將安裝地址放入
Windows+r輸入 cmd 回車
命令行輸入 wkhtmltopdf -V
顯示下邊的就是安裝成功了
1.2 linux centos 7.9 安裝
# 下載wkhtmltopdf軟件:
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb#復制代碼
#安裝wkhtmltopdf軟件:
sudo dpkg -i wkhtmltox_0.12.6-1.bionic_amd64.deb
#復制代碼
#安裝完成后,可以在終端中輸入
wkhtmltopdf -V
#來檢查是否安裝成功。
2.wkhtmltopdf 命令
命令格式:wkhtmltopdf [GLOBAL OPTION]… [OBJECT]…
命令行工具自然是沒有圖形界面的。
下邊給幾個例子在下面。不愿意深入了解的就不必再浪費時間了。
把一個html文件轉換成PDF
wkhtmltopdf http://example.com output.pdf
作用 | 命令 |
---|---|
把一個 url 指向的網頁轉換成PDF | wkhtmltopdf http://example.com output.pdf |
把html文件 和 url指向的網頁 轉換成圖片 | wkhtmltoimage xxx.html xxx.jpg |
3.詳細介紹
命令參數包含五部分,分別是“全局參數”,“大綱參數選項”,“頁面對象參數”,“頁眉和頁腳參數選項”和“目錄對象參數”。
3.1 全局參數
--collate 當輸出多個副本時進行校驗(這是默認設置)--no-collate 當輸出多個副本時不進行校驗--cookie-jar <path> 從提供的JAR文件中讀寫cookie數據--copies <number> 設置輸出副本的數量(默認主1),其實為1就夠了
-d, --dpi <dpi> 指定一個要分辨率(這在 X11 系統中并沒有什么卵用)
-H, --extended-help 相對 -h 參數,顯示更詳細的說明文檔
-g, --grayscale 指定以灰度圖生成PDF文檔。占用的空間更小
-h, --help 顯示幫助信息 --htmldoc 輸出程序的html幫助文檔--image-dpi <integer> 當頁面中有內嵌的圖片時,會下載此命令行參數指定尺寸的圖片(默認值是 600)--image-quality <interger> 當使用 jpeg 算法壓縮圖片時使用這個參數指定的質量(默認為 94)--license 輸出授權信息并退出
-l, --lowquality 生成低質量的 PDF/PS ,能夠很好的節約最終生成文檔所占存儲空間--manpage 輸出程序的手冊頁
-B, --margin-bottom <unitreal> 設置頁面的 底邊距
-L, --margin-left <unitreal> 設置頁面的 左邊距 (默認是 10mm)
-R, --margin-right <unitreal> 設置頁面的 右邊距 (默認是 10mm)
-T, --margin-top <unitreal> 設置頁面的 上邊距
-O, --orientation <orientation> 設置為“風景(Landscape)”或“肖像(Portrait)”模式,默認是肖像模塊(Portrait)--page-height <unitreal> 頁面高度
-s, --page-size <Size> 設置頁面的尺寸,如:A4,Letter等,默認是:A4--page-width <unitreal> 頁面寬度--no-pdf-compression 不對PDF對象使用丟失少量信息的壓縮算法,不建議使用些參數,因為生成的PDF文件會非常大。
-q, --quiet 靜態模式,不在標準輸出中打印任何信息--read-args-from-stdin 從標準輸入中讀取命令行參數,后續會有針對此指令的詳細介紹,請參見 **從標準輸入獲取參數**--readme 輸出程序的 readme 文檔--title <text> 生成的PDF文檔的標題,如果不指定則使用第一個文檔的標題
-V, --version 輸出版本信息后退出
-
下邊挑一下常用的用法 -g, --grayscale
這個參數非常有用,使用這個參數可以有效壓縮生成的PDF所占用的存儲空間。當然這個壓縮是要付出一定代價的,那就是最終生成的PDF文檔將是灰度的,沒有任何色彩。如果你能接受灰度PDF文檔,并不影響實際使用,那就請使用這個參數吧。生成的PDF文檔越大,使用此參數獲得的驚喜就越大。 -
-l, --lowquality 這個參數與 -g 參數有異曲同工之妙, -l 參數也會大大壓縮PDF文檔所占用的存儲空間。只是它是通過降低PDF文檔的質量來完成這一任務的。在純文字的情況下他們的差別不大,此參數只是降低了PDF文檔的質量,看上去是糙了一些,但不會影響閱讀。生成的PDF文檔中有大量圖片,那就不要使用此參數了。
-
-q, --quiet 使用這個參數后,你將得到一個干凈的命令行輸出,就連程序處理的進度和狀態都沒有。這個參數會抑制所有命令行輸出,在程序的工作過程中,你看不到任何輸出。
3.2 大綱參數選項
--dump-default-toc-xsl 輸出默認的 TOC xsl 樣式表到標準輸出
--dump-outline <file> 輸出“大綱”到指定的文件(文件內容為xml)
--outline 在生成的PDF文檔中輸出“大綱”(這是默認設置)
--no-outline 不在pdf文檔中輸出大綱
--outline-depth <level> 設置生成大綱的深度(默認為 4)
–outline-depth
-
–outline-depth 用來指定生成的大綱的深度。默認值為 4。你可以指定一個大一些的數字,以保證所有在HTML中指定的H標簽都能在大綱中生成對應的項,方便閱讀時快速跳轉。
當指定了 --no-outline 參數時, 將不會輸出大綱到PDF文檔,所以再指定 --outline-depth 也就沒有意義了。
3.3 頁面對象參數
--allow <path> 指定加載HTML中相對路徑文件的目錄(可重復使用此參數指定多個目錄),這個參數會在后面進行更詳細的講解--background 輸出頁面背景到PDF文檔(這是默認設置)--no-background 不輸出頁面背景到PDF文檔--cache-dir <path> 網頁的緩存目錄--checkbox-checked-svg <path> 使用指定的SVG文件渲染選中的復選框--checkbox-svg <path> 使用指定的SVG文件渲染未選中的篩選框--cookie <name> <value> 設置訪問網頁時的cookie,value 需要進行url編碼(可重復使用此參數指定多個cookie)--custom-header <name> <value> 設置訪問網頁時的HTTP頭(可重復使用此參數指定多個HTTP頭)--custom-header-propagation 為每個要加載的資源添加由 --custom-header 指定的HTTP頭--no-custom-header-propagation 不為每個要加載的資源添加由 --custom-header 指定的HTTP頭--debug-javascript 顯示javascript調試輸出的信息--no-debug-javascript 不顯示javascript調試輸出的信息(這是默認設置)--default-header 添加一個默認的“頭”,在頁面的左頭顯示頁面的名字,在頁面的右頭顯示頁碼,這相對于進行了如下設置:--header-left='[webpage]'--header-right='[page]/[toPage]'--top 2cm--header-line--encoding <encoding> 為輸入的文本設置默認的編碼方式--disable-external-links 禁止頁面中的外鏈生成超鏈接--enable-external-links 允許頁面中的外鏈生成超鏈接(這是默認設置)--disable-forms 不轉換HTML表單為PDF表單(這是默認設置)--enable-forms 轉換HTML表單為PDF表單--images 加載圖片并輸出到PDF文檔(這是默認設置)--no-images 在生成的PDF文檔中過濾掉圖片--disable-internal-links 禁止頁面中的內鏈生成超鏈接--enable-internal-links 允許頁面中的內鏈生成超連接(這是默認設置)
-n, --disable-javascript 禁止WEB頁面執行 javascript--enable-javascript 允許WEB頁面執行 javascript(這是默認設置)--javascript-delay <msec> 延遲一定的毫秒等待javascript 執行完成(默認值是200)--load-error-handling <handler> 指定當頁面加載失敗后的動作,可以指定為:abort(中止)、ignore(忽略)、skip(跳過);(默認值是:abort)--load-media-error-handling <handler> 指定當媒體文件加載失敗后的動作,可以指定為:abort(中止)、ignore(忽略)、skip(跳過);(默認值是:ignore)--disable-local-file-access 不允許一個本地文件加載其他的本地文件,使用命令行參數`--allow` 指定的目錄除外。--enable-local-file-access 允許本地文件加載其他的本地文件(這是默認設置)--minimum-font-size <int> 設置最小的字號,除非必要不推薦使用該參數--exclude-from-outline 拒絕加載當前頁面到PDF文檔的目錄和大綱中--include-in-outline 加載當前頁面到PDF文檔的目錄和大綱中(這是默認設置)--page-offset <offset> 設置頁碼的起始值(默認值為0)--password <password> HTTP身份認證的密碼--disable-plugins 禁止使用插件(這是默認設置)--enable-plugins 允許使用插件,但插件可能并不工作--post <name> <value> 添加一個POST字段,可以重復使用該參數添加多個POST字段。--post-file <name> <value> 添加一個POST文件,可以重復使用該參數添加多個文件。--print-media-type 用顯示媒體類型代替屏幕--no-print-media-type 不用顯示媒體類型代替屏幕
-p, --proxy <proxy> 使用代理
--radiobutton-checked-svg <path> 使用指定的SVG文件渲染選中的單選框
--radiobutton-svg <path> 使用指定的SVG文件渲染未選中的單選框
--run-sript <js> 頁面加載完成后執行一個附加的JS文件,可以重復使用此參數指定多個要在頁面加載完成后要執行的JS文件。
--disable-smart-shrinking 不使用智能收縮策略
--enable-smart-shrinking 使用智能收縮策略(這是默認設置)
--stop-slow-scripts 停止運行緩慢的javascript代碼(這是默認設置)
--no-stop-slow-scripts 不停止運行緩慢的javascript代碼
--disable-toc-back-links 禁止從標題鏈接到目錄(這是默認設置)
--enable-toc-back-links 允許從標題鏈接到目錄
--user-style-sheet <url> 設置一個在每個頁面都加載的用戶自定義樣式表
--username <username> HTTP身誰的用戶名
--viewport-size <> 設置窗口大小,需要你自定義滾動條或css屬性來自適應窗口大小。
--window-status <windowStatus> Wait until window.status is equal tothis string before rendering page
--zoom <float> 設置轉換成PDF時頁面的縮放比例(默認為1)
也是一樣我們找一些常用的來說明
-
–background AND --no-background
這兩個參數是一對,用來指定是否在生成的PDF中應用網頁的背景,默認 --background 參數是開啟的,也就是說默認生成的PDF文檔中是帶有HTML頁面的背景圖片或背景色的。如果開啟 --no-backgroupd 參數,則生成的PDF文檔中不會有HTML頁面中的背景圖片和背景色。 -
–debug-javascript ADN --no-debug-javascript
這兩個參數用來指定是否在標準輸出中輸出javascript的調試信息,默認 --no-debug-javasript 參數是開啟的,也就是說默認不會輸出javascript的調試信息。下圖是打開 --debug-javascript 參數的演示。 -
–disable-external-links AND --enable-external-links
這兩個參數是用來設置在頁面中的外鏈是否以超鏈接的形式出現在PDF文檔中。關于“外鏈”的定義請移架 術語定義 。默認 --enable-external-links 參數被打開,所以默認情況是頁面中的外鏈是以超鏈接的形式出現的PDF文檔中的,點擊可以打開指定的網頁。 -
–exclude-from-outline AND --include-in-outline
這兩個參數用來設置當前頁面對象是否包含到目錄和大綱中。
默認情況下 --include-in-outline 參數是打開的。也就是說默認情況下生成的PDF文檔目錄和大綱中是包含當前頁面的,如果你不想讓當前頁面加到目錄和大綱中可以打開 --exclude-from-outline 參數。 -
–user-style-sheet
這個參數用來加載一個用戶自定義的樣式表,用來改變HTML頁面原有的樣式。需要高度自定義頁面新式的同學可以嘗試使用這個參數達到目的。
3.4 頁眉和頁腳參數選項
--footer-center <text> 在頁腳的居中部分顯示頁腳文本 <text>
--footer-font-name <name> 設置頁腳的字體 (默認為 Arial)
--footer-font-size <size> 設置頁腳的字體大小 (默認為 12)
--footer-html <url> 添加一個html作為頁腳
--footer-left <text> 在頁腳的居左部分顯示頁腳文本 <text>
--footer-line 在頁腳上方顯示一條直線分隔正文
--no-footer-line 不使用直線分隔頁腳與正文(這是默認設置)
--footer-right <text> 在頁腳的居右部分顯示頁腳文本 <text>
--footer-spacing <real> 頁腳與正文之間的距離(默認為零)--header-center <text> 在頁眉的居中部分顯示頁眉文本 <text>
--header-font-name <name> 設置頁眉的字體 (默認為 Arial)
--header-font-size <size> 設置頁眉的字體大小 (默認為 12)
--header-html <url> 添加一個html作為頁眉
--header-left <text> 在頁眉的居左部分顯示頁眉文本 <text>
--header-line 在頁眉下方顯示一條直線分隔正文
--no-header-line 不使用直線分隔頁眉與正文(這是默認設置)
--header-right <text> 在頁眉的居右部分顯示頁眉文本 <text>
--header-spacing <real> 頁眉與正文之間的距離(默認為零)
3.5 目錄對象參數
--disable-dotted-lines 在目錄中不使用虛線
--toc-header-text <text> 設置目錄的頁眉文本
--toc-level-indentation <width> 第級標題在目錄中的縮進寬度(默認為1em)
--disable-toc-links 在目錄中不生成指向內容錨點的超鏈接
--toc-text-size-shrink <real> 在目錄中每級標題的縮放比例(默認為0.8)
--xsl-style-sheet <file> 使用自定義的 XSL 樣式表顯示目錄內容
默認的頁面尺寸是 A4,你可以使用 --page-size 參數指定你想要的頁面尺寸,如:A3,Letter 和 Legal等。