用js工具wordexport將頁面導(dǎo)出為Word文檔
最近工作方面接到新需求,要將頁面中的person信息導(dǎo)出為Word。
網(wǎng)上查了查,部分都是從JS入手。
親自試用了一些JS工具,發(fā)現(xiàn)稂莠不齊。
不過最終還是找到了一個中意的"flower"-->wordexport.js。
導(dǎo)出效果還是不錯的,詳情見下方。
目的:
一方面向大家推薦,另一方面希望大家可以不吝賜教,推薦一些更為好用的工具。
案例:
測試案例的結(jié)構(gòu),比較簡單。
(1) 下載必須的js文件
下面給出GitHub的下載地址
https://github.com/eligrey/FileSaver.js/
https://github.com/markswindoll/jQuery-Word-Export
(2) 導(dǎo)入js文件
一共需要導(dǎo)入3個js文件
后者依賴于jQuery的jquery.min.js
(3) 把需要導(dǎo)出的person信息放到div中
<div id="printTab">
<table>.......</table>
</div>
(4) 創(chuàng)建一個導(dǎo)出的按鈕
<button type="button" onClick="exportWord()" style="float: left;margin-left: 15px">
導(dǎo)出Word
</button>
(5) 導(dǎo)出Word事件
<script type="text/javascript">
function exportWord(){
$("#printTab").wordExport("odysee");
}
</script>
補充:
$("#printTab").wordExport("odysee");
這里的odysee為導(dǎo)出的Word的名字。
如果不傳入默認(rèn)為jQuery-Word-Export
其實可以打開源碼開一下。
如下圖:
(6) 測試
點擊導(dǎo)出Word按鈕
打開odysee文檔
效果還是可以接受的
總結(jié):
從網(wǎng)上找了幾個js工具,發(fā)現(xiàn)還是這個比較好用些。
同時希望大家可以不吝賜教,多多推薦一些更為好用的工具。
下面貼出word.html源碼(如果大家想要原文件請留言或私信)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
<html>
<head>
<title>人員信息</title>
<script type="text/javascript" src="./jquery.min.js"></script>
<script type="text/javascript" src="./FileSaver.js"></script>
<script type="text/javascript" src="./jquery.wordexport.js"></script>
<script type="text/javascript">
function exportWord(){
$("#printTab").wordExport("odysee");
}
</script>
</head>
<body>
<div style="height:40px">
<button type="button" onClick="exportWord()" style="float: left;margin-left: 15px">
導(dǎo)出Word
</button>
</div>
<!-- 打印表 -->
<div id="printTab">
<div align="center">
<div style="height:40px;font-size:20pt;font-family:Simsun;margin-top: 22px">
<label><font >odysee</font></label>
</div>
<table cellspacing=0 cellpadding=0 style='border-color:black; border-style:solid; BORDER-COLLAPSE:collapse;border:none;table-layout:fixed;word-break:break-all;'>
<tr>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;height:50px;width:60px; border:black 0.5pt solid;overflow:hidden;'>姓 名</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;width:90px; border:black 0.5pt solid;overflow:hidden;'>odysee</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;width:60px; border:black 0.5pt solid;overflow:hidden;'>性 別</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;width:110px; border:black 0.5pt solid;overflow:hidden;'>♂</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;width:75px; border:black 0.5pt solid;overflow:hidden;'>出生年月</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;width:110px; border:black 0.5pt solid;overflow:hidden;'>2019-6-13</td>
</tr>
<tr>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;height:50px;border:black 0.5pt solid;overflow:hidden;'>民 族</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>Linux</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>籍 貫</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>home/odysee/</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>出生地</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>Centos7</td>
</tr>
<tr>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;height:50px;border:black 0.5pt solid;overflow:hidden;'>入 學(xué)<br/>時 間</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>2017</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>參加工<br/>作時間</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>2018</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>健康狀況</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>開機中...</td>
</tr>
<tr>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;height:50px;border:black 0.5pt solid;overflow:hidden;'>電 話</td>
<td style='font-family: "Simsun";font-size: 13pt;text-align: center;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;border:black 0.5pt solid;overflow:hidden;' colspan="2" >call me odysee</td>
<td style='font-size:13pt;font-family:Simsun;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;vertical-align:middle;text-align:center;border:black 0.5pt solid;overflow:hidden;'>郵 箱</td>
<td style='font-family: "Simsun";font-size: 13pt;text-align: center;border-top:0.5pt solid;border-right:0.5pt solid;border-bottom:0.5pt solid;border-left:0.5pt solid;border:black 0.5pt solid;overflow:hidden;' colspan="2" >I am in toutiao</td>
</tr>
</table>
</div>
</div>
</div>
</body>
</html>
頁內(nèi)容導(dǎo)出word文檔的方法有很多,我們在工作生活中都會遇到需要將網(wǎng)頁上的內(nèi)容下載到本地文檔的需求,有時遇到一些網(wǎng)頁不支持復(fù)制,有些又需要翻頁,不能一次性下載。今天跟大家分享怎么將網(wǎng)頁上的內(nèi)容導(dǎo)出到我們的word文檔。
一、復(fù)制粘貼
作為最原始,也是最可靠的方法,復(fù)制粘貼操作簡單有手就行。缺點就是需要進(jìn)行大量機械操作。
二、通過瀏覽器導(dǎo)出
進(jìn)入瀏覽器,然后打開我們需要導(dǎo)出的網(wǎng)頁,點擊右側(cè)菜單à選擇“更多工具à網(wǎng)頁另存為我們能獲得一個html格式的文檔
在打開我們的wps或者word軟件,通過導(dǎo)入html格式的文檔,另存為word文檔。
通過這個方法,我們可以對整個網(wǎng)頁進(jìn)行導(dǎo)出,優(yōu)點是只需要鼠標(biāo)點選,工作強度變低,缺點是網(wǎng)頁內(nèi)容全部導(dǎo)出,包括頂部菜單欄,廣告等。
三、采集工具導(dǎo)出
使用采集工具,我們可以對我們想要的元素進(jìn)行選擇,只下載需要的內(nèi)容,例如只下載標(biāo)題內(nèi)容,只下載圖片、表格等。
通過采集工具選擇內(nèi)容后,支持對相同組成的頁面進(jìn)行批量采集,不需要我們再去翻頁面。
可視化的操作頁面,也只需要我們操作鼠標(biāo)完成點選,就可以將網(wǎng)頁需要的內(nèi)容一鍵導(dǎo)出本地word,批量導(dǎo)出不需要我們在去找軟件轉(zhuǎn)換格式。
四、編輯后導(dǎo)出
使用采集工具的SEO模板,可以對我們采集的網(wǎng)頁內(nèi)容進(jìn)行翻譯、同義詞替換、敏感詞刪除、圖片水印等操作,讓我們可以批量處理網(wǎng)頁內(nèi)容到我們本地文檔。
網(wǎng)頁內(nèi)容導(dǎo)出的三種方法分享就到這里了,每種方法都有自己的優(yōu)勢,對于需要批量采集、批量編輯翻譯的頁面,使用工具能幫我們完成重復(fù)機械的操作,減輕工作負(fù)擔(dān),如果大家有更好的意見或者建議,不妨留言討論哦。
前面一篇文章:「高頻面試題」瀏覽器從輸入url到頁面展示中間發(fā)生了什么 中,我們有對瀏覽器的渲染流程做了一個概括性的介紹,今天這篇文章我們將深入學(xué)習(xí)這部分內(nèi)容。
對于很多前端開發(fā)來說,平常做工主要專注于業(yè)務(wù)開發(fā),對瀏覽器的渲染階段可能不是很了解。實際上這個階段很重要,了解瀏覽器的渲染過程,能讓我們知道我們寫的HTML、CSS、JS代碼是如何被解析,并最終渲染成一個頁面的,在頁面性能優(yōu)化的時候有相應(yīng)的解決思路。
我們先來看一個問題:
HTML、CSS、JS文件在瀏覽器中是如何轉(zhuǎn)化成頁面的?
如果你回答不上來,那就往下看吧。
按照渲染的時間順序,渲染過程可以分為下面幾個子階段:構(gòu)建DOM樹、樣式計算、布局階段、分層、柵格化和合成顯示。
下面詳細(xì)看下每個階段都做了哪些事情。
HTML文檔描述一個頁面的結(jié)構(gòu),但是瀏覽器無法直接理解和使用HTML,所以需要通過HTML解析器將HTML轉(zhuǎn)換成瀏覽器能夠理解的結(jié)構(gòu)——DOM樹。
HTML文檔中所有內(nèi)容皆為節(jié)點,各節(jié)點之間有層級關(guān)系,彼此相連,構(gòu)成DOM樹。
構(gòu)建過程:讀取HTML文檔的字節(jié)(Bytes),將字節(jié)轉(zhuǎn)換成字符(Chars),依據(jù)字符確定標(biāo)簽(Tokens),將標(biāo)簽轉(zhuǎn)換成節(jié)點(Nodes),以節(jié)點為基準(zhǔn)構(gòu)建DOM樹。參考下圖:
打開Chrome的開發(fā)者工具,在控制臺輸入 document 后回車,就能看到一個完整的DOM樹結(jié)構(gòu),如下圖所示:
在控制臺打印出來的DOM結(jié)構(gòu)和HTML內(nèi)容幾乎一樣,但和HTML不同的是,DOM是保存在內(nèi)存中的樹狀結(jié)構(gòu),可以通過JavaScript來查詢或修改其內(nèi)容。
樣式計算這個階段,是為了計算出DOM節(jié)點中每個元素的表現(xiàn)樣式。
CSS樣式可以通過下面三種方式引入:
和HTML一樣,瀏覽器無法直接理解純文本的CSS樣式,需要通過CSS解析器將CSS解析成 styleSheets 結(jié)構(gòu),也就是我們常說的 CSSOM樹。
styleSheets結(jié)構(gòu)同樣具備查詢和修改功能:
document.styleSheets
屬性值標(biāo)準(zhǔn)化看字面意思有點不好理解,我們通過下面一個例子來看看什么是屬性值標(biāo)準(zhǔn)化:
在寫CSS樣式的時候,我們在設(shè)置color屬性值的時候,經(jīng)常會用white、red等,但是這種值瀏覽器的渲染引擎不容易理解,所以需要將所有值轉(zhuǎn)換成渲染引擎容易理解的、標(biāo)準(zhǔn)化的計算值,這個過程就是屬性值標(biāo)準(zhǔn)化。
white標(biāo)準(zhǔn)化后的值為 rgb(255, 255, 255)
完成樣式的屬性值標(biāo)準(zhǔn)化后,就需要計算每個節(jié)點的樣式屬性,這個階段CSS有兩個規(guī)則我們需要清楚:
樣式計算階段是為了計算出DOM節(jié)點中每個元素的具體樣式,在計算過程中需要遵守CSS的繼承和層疊兩個規(guī)則。
該階段最終輸出的內(nèi)容是每個DOM節(jié)點的樣式,并被保存在 ComputedStyle 的結(jié)構(gòu)中。
經(jīng)過上面的兩個步驟,我們已經(jīng)拿到了DOM樹和DOM樹中元素的樣式,接下來需要計算DOM樹中可見元素的幾何位置,這個計算過程就是布局。
在DOM樹中包含了一些不可見的元素,例如 head 標(biāo)簽,設(shè)置了 display:none 屬性的元素,所以我們需要額外構(gòu)建一棵只包含可見元素的布局樹。
構(gòu)建過程:從DOM樹的根節(jié)點開始遍歷,將所有可見的節(jié)點加到布局樹中,忽略不可見的節(jié)點。
到這里我們就有了一棵構(gòu)建好的布局樹,就可以開始計算布局樹節(jié)點的坐標(biāo)位置了。從根節(jié)點開始遍歷,結(jié)合上面計算得到的樣式,確定每個節(jié)點對象在頁面上的具體大小和位置,將這些信息保存在布局樹中。
布局階段的輸出是一個盒子模型,它會精確地捕獲每個元素在屏幕內(nèi)的確切位置與大小。
現(xiàn)在我們已經(jīng)有了布局樹,也知道了每個元素的具體位置信息,但是還不能開始繪制頁面,因為頁面中會有像3D變換、頁面滾動、或者用 z-index 進(jìn)行z軸排序等復(fù)雜效果,為了更方便實現(xiàn)這些效果,渲染引擎還需要為特定的節(jié)點生成專用的圖層,并生成一棵對應(yīng)的圖層樹(LayerTree)。
在Chrome瀏覽器中,我們可以打開開發(fā)者工具,選擇 Elements-Layers 標(biāo)簽,就可以看到頁面的分層情況,如下圖所示:
瀏覽器的頁面實際上被分成了很多圖層,這些圖層疊加后合成了最終的頁面。
到這里,我們構(gòu)建了兩棵樹:布局樹和圖層樹。下面我們來看下這兩棵樹之間的關(guān)系:
正常情況下,并不是布局樹的每個節(jié)點都包含一個圖層,如果一個節(jié)點沒有對應(yīng)的圖層,那么這個節(jié)點就從屬于父節(jié)點的圖層。
那節(jié)點要滿足什么條件才會被提升為一個單獨的圖層?只要滿足下面其中一個條件即可:
構(gòu)建好圖層樹之后,渲染引擎就會對圖層樹中的每個圖層進(jìn)行繪制。
渲染引擎實現(xiàn)圖層繪制,會把一個圖層的繪制拆分成很多小的繪制指令,然后將這些指令按照順序組成一個繪制列表。
繪制一個圖層時會生成一個繪制列表,這只是用來記錄繪制順序和繪制指令的列表,實際上繪制操作是由渲染引擎中的合成線程來完成的。
通過下圖來看下渲染主線程和合成線程之間的關(guān)系:
當(dāng)圖層的繪制列表準(zhǔn)備好后,主線程會把該繪制列表提交給合成線程,合成線程開始工作。
首先合成線程會將圖層劃分為圖塊(tile),圖塊大小通常是 256256 或者 512512。
然后合成線程會按照視口附近的圖塊來優(yōu)先生成位圖,實際生成位圖的操作是由柵格化來執(zhí)行的。所謂柵格化,是指將圖塊轉(zhuǎn)換為位圖。而圖塊是柵格化執(zhí)行的最小單位。渲染進(jìn)程維護(hù)了一個柵格化的線程池,所有的圖塊柵格化都是在線程池內(nèi)執(zhí)行的,運行方式如下圖所示:
一旦所有圖塊都被光柵化,合成線程就會生成一個繪制圖塊的命令——“DrawQuad”,然后將該命令提交給瀏覽器進(jìn)程。
瀏覽器進(jìn)程里面有一個名字叫做 viz 的組件,用來接收合成線程發(fā)過來的 DrawQuad 命令,然后根據(jù)命令執(zhí)行。 DrawQuad 命令,將其頁面內(nèi)容繪制到內(nèi)存中,最后再將內(nèi)存顯示在屏幕上。
多年開發(fā)老碼農(nóng)福利贈送:網(wǎng)頁制作,網(wǎng)站開發(fā),web前端開發(fā),從最零基礎(chǔ)開始的的HTML+CSS+JavaScript。jQuery,Vue、React、Ajax,node,angular框架等到移動端小程序項目實戰(zhàn)【視頻+工具+電子書+系統(tǒng)路線圖】都有整理,需要的伙伴可以私信我,發(fā)送“前端”等3秒后就可以獲取領(lǐng)取地址,送給每一位對編程感興趣的小伙伴
一個完整的渲染流程可以總結(jié)如下:
渲染過程中還有兩個我們經(jīng)常聽到的概念:重排和重繪。在這篇文章中就不細(xì)說了,下一篇文章再詳細(xì)介紹。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。