溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

HTMl轉(zhuǎn)PDF的方法

發(fā)布時(shí)間:2021-07-05 16:51:51 來(lái)源:億速云 閱讀:415 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要介紹“HTMl轉(zhuǎn)PDF的方法”,在日常操作中,相信很多人在HTMl轉(zhuǎn)PDF的方法問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”HTMl轉(zhuǎn)PDF的方法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

背景

公司需要將官網(wǎng)上的文章都打包成pdf,由于文章是通過(guò)后臺(tái)富文本生成的,內(nèi)容中帶有HTML標(biāo)簽。所以只能夠?qū)?nèi)容放到html中,然后再下載。

HTML轉(zhuǎn)PDF調(diào)研

1. iText

iText是非常著名的快速產(chǎn)生PDF文件的Java類庫(kù)

  • 優(yōu)點(diǎn):
    1.非常成熟的Java類庫(kù),相關(guān)幫助文檔很多,上手快。
    2.功能全面,使用方便,可以通過(guò)代碼直接生成POF文檔。

  • 缺點(diǎn):
    1.雖然支持html轉(zhuǎn)pdf,但有點(diǎn)HTML標(biāo)簽,css屬性不支持,轉(zhuǎn)化結(jié)果可能和原文檔不一致。
    2.不支持外部css文件
    3.與亞洲語(yǔ)言支持包itext-asian.jar配合不是很好,容易中文亂碼問(wèn)題

2.Flying Saucer

Flying Saucer 用純 Java 編寫的,可以將 XML/XHTML 應(yīng)用 CSS2.1 樣式渲染為 PDF、圖片。此庫(kù)基本上能實(shí)現(xiàn) CSS 2.1 的整體性, 并且完全符合 W3C 規(guī)范。

  • 優(yōu)點(diǎn):
    1.支持外部css文件
    2.可以直接通過(guò)輸入頁(yè)面地址來(lái)生成PDF

  • 缺點(diǎn):
    1.很多css都支持得不好,哪些樣式不支持還要自己慢慢試,相當(dāng)痛苦的過(guò)程。
    2.大寫標(biāo)簽不識(shí)別!比如DIV TD 等等統(tǒng)統(tǒng)不識(shí)別!說(shuō)到底就是大小寫敏感。
    3.反正就是各種小細(xì)節(jié)需要把控,不太熟悉的話,十分容易出bug。

3.wkhtmltox

wkhtmltox是一個(gè)工具,類似飯桶(phantomjs)的工具

  • 優(yōu)點(diǎn):
    1.可以直接通過(guò)輸入頁(yè)面地址來(lái)生成PDF
    2.對(duì)HTML和CSS支持非常好,支持外部css
    3.使用簡(jiǎn)單,操作方便。

  • 缺點(diǎn): 沒(méi)有發(fā)現(xiàn)太明顯的硬傷,好像下載的頁(yè)面非常大時(shí),會(huì)導(dǎo)致生成失敗。

wkhtmltox

為什么要介紹上面這些呢?

下載wkhtmltox

官網(wǎng)下載地址: https://wkhtmltopdf.org/downloads.html

HTMl轉(zhuǎn)PDF的方法

linux上安裝并使用
  1. 上傳wkhtmltox到服務(wù)器

    rz

  2. 解壓、安裝(tar -Jxf)

    解壓xz文件: xz -d wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

    解壓安裝tar文件: tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar

  3. 將程序拷貝到/usr/bin/目錄中,這樣可以任意目錄執(zhí)行。

    cp wkhtmltox/bin/wkhtmltopdf /usr/bin/

  4. 使用Wkhtmltopdf

    wkhtmltopdf http://www.baidu.com /data/tmp/demo.pdf

HTMl轉(zhuǎn)PDF的方法 5.如果生成pdf失敗,可能是缺少相關(guān)的包,進(jìn)入usr/lib中根據(jù)錯(cuò)誤信息安裝對(duì)應(yīng)的包

cd /usr/lib  
[daxiang[@localhost](https://my.oschina.net/u/570656) lib]$ sudo yum install libXrender*  
[daxiang[@localhost](https://my.oschina.net/u/570656) lib]$ sudo yum install libXext

JAVA調(diào)用Wkhtmltopdf

public class HtmlToPdfUtil {

	public static String getCommand(String htmlUrl, String filePath) {
		StringBuilder command = new StringBuilder();
        String system = System.getProperty("os.name");
		if (system.contains("Windows")) {
			command.append("D:\\Program Files\\wkhtmltopdf\\bin\\wkhtmltopdf.exe ");
		} else if (system.contains("Linux")) {
			command.append("wkhtmltopdf ");
		}
        //		command.append("--encoding utf-8 "); //設(shè)置文字編碼為utf-8
        //		command.append("--header-center 易觀 "); //在頁(yè)眉中心顯示易觀
        //		command.append("--header-line "); //顯示一條線在頁(yè)眉下
        //		command.append("--margin-left 5cm "); //頁(yè)面左移5cm
        //		command.append("--footer-right [page]/[topage] "); //頁(yè)尾右下角顯示頁(yè)數(shù)
        command.append(htmlUrl).append(" ").append(filePath);
		return command.toString();
	}

	public static void main(String[] args) throws Exception {
		String command = getCommand("https://www.baidu.com/", "e:/demo3.pdf");
		Process process = Runtime.getRuntime().exec(command);
		process.waitFor(); // 這個(gè)調(diào)用比較關(guān)鍵,就是等當(dāng)前命令執(zhí)行完成后再往下執(zhí)行
		System.out.println("執(zhí)行完成");
	}
}

wkhtmltopdf 中文參數(shù)

中文參數(shù)詳解 :http://blog.csdn.net/zhangkezhi_471885889/article/details/52184744

使用方式:

linux:wkhtmltopdf [OPTIONS]… [More input files] 
windows:wkhtmltopdf.exe [OPTIONS]… [More input files]

案例:

  wkhtmltopdf --footer-right [page]/[topage] http://www.baidu.com /data/baidu.pdf 
  
wkhtmltopdf --header-center 報(bào)表 --outline --header-line --margin-top 2cm  http://www.baidu.com /data/baidu.pdf

背景1解決方式

1.建立模板頁(yè)面: http://localhost:8080/templateView

2.利用wkhtmltopdf生成PDF

注意事項(xiàng)

1.只有通過(guò)模板引擎(velocity、Thymeleaf)渲染的web頁(yè)面才能生成PDF

2.由于命令是通過(guò)空格號(hào)來(lái)識(shí)別的,如果生成的PDF文件名中包含空格,會(huì)導(dǎo)致生成失敗。

知識(shí)延伸 (Thymeleaf)

springboot推薦使用Thymeleaf做為模板引擎,以后springboot項(xiàng)目中要用到模板引擎,建議大家都能統(tǒng)一使用Thymeleaf。

springboot配置Thymeleaf:http://blog.didispace.com/springbootweb/
Thymeleaf語(yǔ)法: http://fanlychie.github.io/post/thymeleaf.html#9-3-2-text

到此,關(guān)于“HTMl轉(zhuǎn)PDF的方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI