本發(fā)明涉及網(wǎng)頁處理應(yīng)用,具體涉及一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,尤其適用于任何站點網(wǎng)頁實時轉(zhuǎn)換成pdf的應(yīng)用領(lǐng)域。
背景技術(shù):
1、目前,在java技術(shù)棧中業(yè)內(nèi)常用的html轉(zhuǎn)pdf有itext和wkhtmltopdf兩種技術(shù)方案。itext是apache組織下使用最廣泛的pdf工具,但是有很大的性能瓶頸并且遇到復(fù)雜的樣式就會轉(zhuǎn)換失敗。wkhtmltopdf是github上開源一種框架、性能比itext好遇到復(fù)雜樣式也能很好轉(zhuǎn)換,但是它需要依賴第三方組件并且不支持html中響應(yīng)式布局。
2、以上兩個框架還有一個共同的問題就是需要先生成行內(nèi)樣式的靜態(tài)html才能轉(zhuǎn)換,這樣無法做到實時html轉(zhuǎn)換。
3、因此,基于現(xiàn)有的技術(shù)棧,如何來解決用戶的這種困擾,是一個值得關(guān)注的技術(shù)問題。
4、申請人在思考該問題時發(fā)現(xiàn),大部分移動互聯(lián)網(wǎng)都是基于react技術(shù)做的響應(yīng)式布局網(wǎng)頁,都完美兼容chrome內(nèi)核瀏覽器訪問,如果能借用chrome內(nèi)核api的能力來轉(zhuǎn)換pdf,就完美解決性能、復(fù)雜樣式、響應(yīng)布局等棘手技術(shù)問題。讓html轉(zhuǎn)pdf顯得非常有價值。
技術(shù)實現(xiàn)思路
1、為了解決現(xiàn)有技術(shù)在轉(zhuǎn)換過程中普遍存在的問題有內(nèi)存溢出、字體問題、圖像問題、安全性問題、性能問題等的問題,本發(fā)明的目的在于提供一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,該發(fā)明結(jié)合app服務(wù)端和chrome瀏覽器的功能,實現(xiàn)了一種可以實時將網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換為pdf文件的有效方法。
2、本發(fā)明通過以下技術(shù)方案來實現(xiàn)上述目的:
3、一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,該方法包括以下步驟:
4、將已開發(fā)完成的網(wǎng)頁頁面數(shù)據(jù)對應(yīng)的網(wǎng)頁網(wǎng)址部署到app服務(wù)端提供的站點上,確保網(wǎng)頁可以通過公共url訪問;
5、提交pdf轉(zhuǎn)換請求,將包含目標(biāo)網(wǎng)頁url的pdf轉(zhuǎn)換請求發(fā)送到app服務(wù)器;
6、在app服務(wù)器收到pdf轉(zhuǎn)換請求后,檢查本地是否已下載chrome瀏覽器;
7、若本地存在chrome瀏覽器,設(shè)置chrome無厘頭模式,配置瀏覽器參數(shù)用于適配pdf生成所需的頭部建設(shè);
8、指定pdf文件的存放路徑,調(diào)用chrome瀏覽器的page.printtopdf函數(shù)來渲染目標(biāo)網(wǎng)頁為pdf文件,并將該pdf文件發(fā)送給app客戶端。
9、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,若本地沒有下載chrome瀏覽器,則根據(jù)預(yù)設(shè)的網(wǎng)絡(luò)地址下載安裝包,并安裝到指定位置。
10、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,在設(shè)置chrome無厘頭模式時,創(chuàng)建puppeteer代理;設(shè)置瀏覽器啟動的參數(shù)對象中;創(chuàng)建chrome提取器對象;將chrome提取器對象傳入瀏覽器啟動的參數(shù)對象中創(chuàng)建瀏覽器對象;發(fā)送target.createtarge獲取瀏覽器中創(chuàng)建好的網(wǎng)頁對象。
11、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,當(dāng)chrome瀏覽器對象創(chuàng)建成功后,設(shè)置瀏覽器上下文id,調(diào)用chrome中的target.createtarget方法函數(shù)來獲取瀏覽器中創(chuàng)建好的網(wǎng)頁對象;
12、基于瀏覽器中創(chuàng)建好的網(wǎng)頁對象,導(dǎo)航到需要轉(zhuǎn)換的html網(wǎng)頁地址,等待瀏覽器導(dǎo)航完成。
13、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,在等待瀏覽器導(dǎo)航完成時,等待導(dǎo)航的階段結(jié)果依次為load事件觸發(fā)->domcontentloaded事件觸發(fā)->newworkidle0事件觸發(fā)->networkidle2事件觸發(fā)。
14、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,當(dāng)網(wǎng)頁創(chuàng)建成功后設(shè)置pdf轉(zhuǎn)換參數(shù);
15、在創(chuàng)建pdf文件存放路徑后,將該路徑傳入到創(chuàng)建好的網(wǎng)頁對象中;
16、調(diào)用chrome瀏覽器page.printtopdf函數(shù)執(zhí)行pdf轉(zhuǎn)換。
17、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,所述pdf轉(zhuǎn)換參數(shù)包括轉(zhuǎn)換pdf寬高、上下左右間距、轉(zhuǎn)換模型、是否橫屏、隱藏頭和腳、頭模版、腳模版、是否背后打印、縮放比例、指定pdf文件在頁面范圍、指定首選的css頁面大小、制作范圍以及頁碼范圍。
18、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,在執(zhí)行pdf轉(zhuǎn)換之前,清除chrome瀏覽器的緩存,確保每次都從服務(wù)器獲取最新的網(wǎng)頁內(nèi)容。
19、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,還執(zhí)行:
20、在啟動pdf轉(zhuǎn)換之前,首先檢查設(shè)備的網(wǎng)絡(luò)連接狀態(tài),確保網(wǎng)絡(luò)穩(wěn)定并滿足轉(zhuǎn)換需求,并添加網(wǎng)絡(luò)異常的捕獲邏輯,當(dāng)網(wǎng)絡(luò)錯誤發(fā)生時,自動重試一定次數(shù),以提高轉(zhuǎn)換成功率。
21、根據(jù)本發(fā)明提供的一種實時網(wǎng)頁數(shù)據(jù)轉(zhuǎn)換成pdf文件的方法,還執(zhí)行:
22、當(dāng)pdf轉(zhuǎn)換請求量很大時,將耗時的pdf轉(zhuǎn)換操作放到后臺使用消息隊列或任務(wù)隊列進(jìn)行異步處理;
23、其中,創(chuàng)建一個或多個消息隊列或任務(wù)隊列來管理pdf轉(zhuǎn)換任務(wù);
24、使用優(yōu)先級隊列來確保重要的或緊急的轉(zhuǎn)換任務(wù)能夠優(yōu)先得到處理;
25、實時監(jiān)控服務(wù)器的負(fù)載情況和隊列的長度,以便及時發(fā)現(xiàn)潛在的過載問題;
26、若發(fā)現(xiàn)服務(wù)器負(fù)載過高或隊列長度過長,增加服務(wù)器資源或使用負(fù)載均衡技術(shù)將請求分發(fā)到多臺服務(wù)器上。
27、由此可見,相比于現(xiàn)有技術(shù),本發(fā)明具有以下有益效果:
28、1、實時性:由于轉(zhuǎn)換過程發(fā)生在服務(wù)器端,用戶可以實時提交網(wǎng)頁url并立即獲取對應(yīng)的pdf文件,無需等待長時間的處理或渲染;
29、2、兼容性:使用chrome瀏覽器進(jìn)行渲染和轉(zhuǎn)換可以確保網(wǎng)頁內(nèi)容在轉(zhuǎn)換為pdf時能夠保持較高的兼容性,因為chrome支持多種網(wǎng)頁標(biāo)準(zhǔn)和格式;
30、3、無厘頭模式(headless?mode):通過設(shè)置chrome的無厘頭模式,可以在沒有圖形界面的情況下運行瀏覽器,這大大減少了系統(tǒng)資源的消耗,提高了轉(zhuǎn)換效率;
31、4、靈活性:通過配置瀏覽器參數(shù),可以針對pdf生成進(jìn)行特定的設(shè)置,如頁眉頁腳、頁邊距、紙張大小等,從而生成符合需求的pdf文件;
32、5、高保真:由于直接使用chrome瀏覽器進(jìn)行渲染,所以轉(zhuǎn)換后的pdf文件能夠較好地保留原始網(wǎng)頁的樣式、布局和交互性元素,保證轉(zhuǎn)換的高保真度;
33、6、自動化:整個轉(zhuǎn)換過程可以在服務(wù)器端自動完成,無需用戶手動操作,大大提高了工作效率;
34、7、可擴(kuò)展性:該方法可以很容易地集成到現(xiàn)有的app或系統(tǒng)中,通過提供api接口,其他應(yīng)用或服務(wù)也可以方便地調(diào)用該轉(zhuǎn)換功能;
35、8、安全性:通過app服務(wù)端控制pdf轉(zhuǎn)換過程,可以更好地保護(hù)用戶數(shù)據(jù)的安全性,避免在客戶端進(jìn)行敏感操作可能帶來的風(fēng)險;
36、9、跨平臺性:由于chrome瀏覽器支持多種操作系統(tǒng),因此該方法可以在不同的平臺上實現(xiàn)網(wǎng)頁到pdf的轉(zhuǎn)換,具有良好的跨平臺性;
37、10、可定制性:可以根據(jù)具體需求定制pdf文件的輸出格式、分辨率、顏色模式等參數(shù),以滿足不同場景下的使用需求。
38、11、提升網(wǎng)頁渲染速度:網(wǎng)頁中樣式可復(fù)用、無需寫行內(nèi)樣式,不會造成代碼臃腫,輕量簡潔提升網(wǎng)頁渲染速度大大提升用戶體驗。
39、12、在轉(zhuǎn)換pdf時對cpu無要求,移動互聯(lián)網(wǎng)下前端工程師無需寫兩份網(wǎng)頁來適配pc和手機(jī)端樣式。
40、下面結(jié)合附圖和具體實施方式對本發(fā)明作進(jìn)一步詳細(xì)說明。