新聞中心
一、需求分析,問(wèn)題描述
1、需求
點(diǎn)擊導(dǎo)出word按鈕,將頁(yè)面任意指定區(qū)域的內(nèi)容,導(dǎo)出為word文檔。

目前成都創(chuàng)新互聯(lián)公司已為上千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁(yè)空間、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、疏勒網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
2、問(wèn)題
- 如何獲取指定內(nèi)容?
- 如何將HTML內(nèi)容轉(zhuǎn)換為Word文檔?
- 如何導(dǎo)出下載Word文檔?
二、解決問(wèn)題,答案速覽
實(shí)現(xiàn)代碼如下,復(fù)制粘貼即可直接使用。
如果你有時(shí)間,具體問(wèn)題梳理、代碼分析、知識(shí)總結(jié),可見(jiàn)第三部分。
1、使用說(shuō)明
參考網(wǎng)上使用最多的方式,使用 FileSaver.js 和 html-docx-js 庫(kù)(或其它將HTML內(nèi)容轉(zhuǎn)換為Word文檔的庫(kù))來(lái)在Vue組件中導(dǎo)出內(nèi)容為Word文檔。
但是這種方式只能在服務(wù)端實(shí)現(xiàn),在瀏覽器端使用會(huì)報(bào)錯(cuò),這是因?yàn)闉g覽器的安全策略限制了對(duì)文件系統(tǒng)的直接訪問(wèn),以防止惡意腳本濫用用戶(hù)的文件系統(tǒng)。
為了避免報(bào)錯(cuò),您可以考慮以下解決方案:
- 服務(wù)器端導(dǎo)出【推薦】:將生成Word文檔的邏輯放在服務(wù)器端,通過(guò)Vue組件向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器生成并返回Word文檔的下載鏈接或文件。
- 使用其他導(dǎo)出方式:考慮使用其他導(dǎo)出方式,例如將內(nèi)容轉(zhuǎn)換為PDF格式或生成HTML格式的文件,以避免瀏覽器限制。
- 考慮使用專(zhuān)門(mén)的Word文檔生成庫(kù)【導(dǎo)出復(fù)雜Word】:如果您需要在瀏覽器中生成復(fù)雜的Word文檔,可以考慮使用專(zhuān)門(mén)的JavaScript庫(kù),例如docxtemplater或mammoth.js,它們提供了更完整的Word文檔生成功能。
- 考慮使用原生的方式實(shí)現(xiàn)【導(dǎo)出簡(jiǎn)單Word】。即我們下面要說(shuō)的,利用a元素的原生文件下載功能來(lái)實(shí)現(xiàn)Word導(dǎo)出。
2、代碼實(shí)例
在assets文件夾下新建js文件夾,然后在js文件夾下新建文件exportToWord.js,把下面代碼放進(jìn)去。
// 導(dǎo)出Word
export const exportToWord = (id, name) => {
// 獲取選中區(qū)域Html
const dom = document.getElementById(id)
const content = dom.innerHTML;
const convertedContent = convertToWordDocument(content);
// Html類(lèi)型數(shù)據(jù) 轉(zhuǎn)換為 文件類(lèi)型數(shù)據(jù)
const blob = new Blob([convertedContent], { type: 'application/msword' });
// 下載Word文檔
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = name+'.doc' || 'exported.doc';
link.click();
}
//完善Html格式
const convertToWordDocument = (content) => {
const header = `Exported Document `;
const footer = ``;
return `${header}${content}${footer}`;
}在需要的組件中引入exportToWord函數(shù),直接調(diào)用即可。函數(shù)接收兩個(gè)參數(shù),第一個(gè)是指定區(qū)域元素的id,第二個(gè)是導(dǎo)出Word文檔的名稱(chēng)。
標(biāo)題
綠色字
紅色字
藍(lán)色字
三、問(wèn)題解析,知識(shí)總結(jié)
1、如何獲取指定內(nèi)容?
這個(gè)比較簡(jiǎn)單,相信大家都會(huì),這里簡(jiǎn)單提一下。
對(duì)于組件可以用ref,對(duì)于元素可以用id。
2、如何將HTML內(nèi)容轉(zhuǎn)換為Word文檔?
通過(guò)new Blob對(duì)象,將Html類(lèi)型數(shù)據(jù)轉(zhuǎn)換為生成Word文檔的二進(jìn)制數(shù)據(jù)。
關(guān)于Blob對(duì)象:
簡(jiǎn)介:
Blob(Binary Large Object)是JavaScript中的一個(gè)接口,用于表示不可變的、原始數(shù)據(jù)的類(lèi)似文件的對(duì)象。
它通常用于處理二進(jìn)制數(shù)據(jù),例如圖像、音頻、視頻等。
Blob對(duì)象可以包含任意類(lèi)型的數(shù)據(jù),包括文本、數(shù)組緩沖區(qū)和其他Blob對(duì)象。
Blob對(duì)象在處理文件上傳、數(shù)據(jù)傳輸和媒體處理等場(chǎng)景中非常有用。您可以將Blob對(duì)象發(fā)送到服務(wù)器、保存到本地文件系統(tǒng)或使用其他API進(jìn)行進(jìn)一步處理。
Blob對(duì)象的構(gòu)造函數(shù)接受以下參數(shù):
Blob(blobParts, options):構(gòu)造函數(shù)接受兩個(gè)參數(shù)。
第一個(gè)參數(shù)blobParts是一個(gè)數(shù)組,其中包含將被包含在Blob對(duì)象中的數(shù)據(jù)。數(shù)組的元素可以是字符串、ArrayBuffer、ArrayBufferView、Blob對(duì)象或其他類(lèi)似對(duì)象。
第二個(gè)參數(shù)options是一個(gè)可選的對(duì)象,用于指定Blob對(duì)象的屬性。
在options參數(shù)中,可以使用以下屬性:
- type:指定Blob對(duì)象的MIME類(lèi)型。默認(rèn)值為空字符串。
- endings:指定以何種方式標(biāo)準(zhǔn)化換行符??赡艿闹凳莟ransparent、native和\r\n。默認(rèn)值是transparent。
以下是一些常用的Blob屬性和方法:
屬性:
- Blob.size:返回Blob對(duì)象的字節(jié)大小。
- Blob.type:返回Blob對(duì)象的MIME類(lèi)型。
方法:
Blob.slice(start, end, contentType):
創(chuàng)建并返回一個(gè)新的Blob對(duì)象,該對(duì)象包含原始Blob對(duì)象的指定字節(jié)范圍??蛇x參數(shù)contentType用于指定新Blob對(duì)象的MIME類(lèi)型。
Blob.arrayBuffer():
返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)ArrayBuffer對(duì)象,其中包含Blob對(duì)象的整個(gè)內(nèi)容。
Blob.text():
返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)字符串,其中包含Blob對(duì)象的文本內(nèi)容。
Blob.stream():
返回一個(gè)ReadableStream對(duì)象,可以用于流式讀取Blob對(duì)象的內(nèi)容。
Blob.text():
返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)字符串,其中包含Blob對(duì)象的文本內(nèi)容。
Blob.stream():
返回一個(gè)ReadableStream對(duì)象,可以用于流式讀取Blob對(duì)象的內(nèi)容。
3、如何導(dǎo)出下載Word文檔?
通過(guò)a元素的 download 屬性,來(lái)實(shí)現(xiàn)文件的導(dǎo)出下載。
在 HTML 中,a元素的 download 屬性用于指定一個(gè)下載鏈接,告訴瀏覽器該鏈接是要被下載而不是在瀏覽器中打開(kāi)。這樣,當(dāng)用戶(hù)點(diǎn)擊鏈接時(shí),瀏覽器會(huì)彈出一個(gè)下載對(duì)話框,提示用戶(hù)保存文件到本地設(shè)備。
download 屬性的值可以是一個(gè)文件名,用于指定用戶(hù)保存文件時(shí)的默認(rèn)文件名。當(dāng)用戶(hù)點(diǎn)擊下載鏈接時(shí),瀏覽器會(huì)使用該值作為默認(rèn)文件名,但用戶(hù)仍然可以選擇其他文件名保存。
請(qǐng)注意,download 屬性并不是所有瀏覽器都支持的新特性。特別是在移動(dòng)設(shè)備上,某些瀏覽器可能會(huì)忽略該屬性并在瀏覽器中打開(kāi)鏈接。因此,在使用 download 屬性時(shí),最好提供一個(gè)備用方案,例如在鏈接的文本或旁邊添加一段說(shuō)明,告訴用戶(hù)右鍵點(diǎn)擊鏈接并選擇 "保存鏈接" 或類(lèi)似選項(xiàng)來(lái)下載文件。
當(dāng)前名稱(chēng):Vue2問(wèn)題:如何在瀏覽器中導(dǎo)出Word文檔?四條解決方案!
轉(zhuǎn)載注明:http://www.dlmjj.cn/article/djipisj.html


咨詢(xún)
建站咨詢(xún)
