成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Vue2問題:如何在瀏覽器中導(dǎo)出Word文檔?四條解決方案!

開發(fā) 前端
Blob(Binary Large Object)是JavaScript中的一個(gè)接口,用于表示不可變的、原始數(shù)據(jù)的類似文件的對象。

一、需求分析,問題描述

1、需求

點(diǎn)擊導(dǎo)出word按鈕,將頁面任意指定區(qū)域的內(nèi)容,導(dǎo)出為word文檔。

2、問題

  • 如何獲取指定內(nèi)容?
  • 如何將HTML內(nèi)容轉(zhuǎn)換為Word文檔?
  • 如何導(dǎo)出下載Word文檔?

二、解決問題,答案速覽

實(shí)現(xiàn)代碼如下,復(fù)制粘貼即可直接使用。

如果你有時(shí)間,具體問題梳理、代碼分析、知識總結(jié),可見第三部分。

1、使用說明

參考網(wǎng)上使用最多的方式,使用 FileSaver.js 和 html-docx-js 庫(或其它將HTML內(nèi)容轉(zhuǎn)換為Word文檔的庫)來在Vue組件中導(dǎo)出內(nèi)容為Word文檔。

但是這種方式只能在服務(wù)端實(shí)現(xiàn),在瀏覽器端使用會報(bào)錯(cuò),這是因?yàn)闉g覽器的安全策略限制了對文件系統(tǒng)的直接訪問,以防止惡意腳本濫用用戶的文件系統(tǒng)。

為了避免報(bào)錯(cuò),您可以考慮以下解決方案:

  • 服務(wù)器端導(dǎo)出【推薦】:將生成Word文檔的邏輯放在服務(wù)器端,通過Vue組件向服務(wù)器發(fā)送請求,服務(wù)器生成并返回Word文檔的下載鏈接或文件。
  • 使用其他導(dǎo)出方式:考慮使用其他導(dǎo)出方式,例如將內(nèi)容轉(zhuǎn)換為PDF格式或生成HTML格式的文件,以避免瀏覽器限制。
  • 考慮使用專門的Word文檔生成庫【導(dǎo)出復(fù)雜Word】:如果您需要在瀏覽器中生成復(fù)雜的Word文檔,可以考慮使用專門的JavaScript庫,例如docxtemplater或mammoth.js,它們提供了更完整的Word文檔生成功能。
  • 考慮使用原生的方式實(shí)現(xiàn)【導(dǎo)出簡單Word】。即我們下面要說的,利用a元素的原生文件下載功能來實(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類型數(shù)據(jù) 轉(zhuǎn)換為 文件類型數(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 = `<!DOCTYPE html><html><head><meta charset='utf-8'><title>Exported Document</title></head><body>`;
const footer = `</body></html>`;

return `${header}${content}${footer}`;
}

在需要的組件中引入exportToWord函數(shù),直接調(diào)用即可。函數(shù)接收兩個(gè)參數(shù),第一個(gè)是指定區(qū)域元素的id,第二個(gè)是導(dǎo)出Word文檔的名稱。

<template>
<div>
<div id="word_demo">
<h1>標(biāo)題</h1>
<p style="color: green">綠色字</p>
<p style="color: red">紅色字</p>
<p style="color: dodgerblue">藍(lán)色字</p>
</div>
<button @click="downLoad('word_demo', '哈哈哈')">點(diǎn)擊導(dǎo)出word</button>
</div>
</template>

<script>
import { exportToWord } from '@/assets/js/exportToWord'

export default {
methods: {
downLoad(id, name) {
exportToWord(id, name)
},
}
}
</script>

三、問題解析,知識總結(jié)

1、如何獲取指定內(nèi)容?

這個(gè)比較簡單,相信大家都會,這里簡單提一下。

對于組件可以用ref,對于元素可以用id。

2、如何將HTML內(nèi)容轉(zhuǎn)換為Word文檔?

通過new Blob對象,將Html類型數(shù)據(jù)轉(zhuǎn)換為生成Word文檔的二進(jìn)制數(shù)據(jù)。

關(guān)于Blob對象:

簡介:

Blob(Binary Large Object)是JavaScript中的一個(gè)接口,用于表示不可變的、原始數(shù)據(jù)的類似文件的對象。

它通常用于處理二進(jìn)制數(shù)據(jù),例如圖像、音頻、視頻等。

Blob對象可以包含任意類型的數(shù)據(jù),包括文本、數(shù)組緩沖區(qū)和其他Blob對象。

Blob對象在處理文件上傳、數(shù)據(jù)傳輸和媒體處理等場景中非常有用。您可以將Blob對象發(fā)送到服務(wù)器、保存到本地文件系統(tǒng)或使用其他API進(jìn)行進(jìn)一步處理。

Blob對象的構(gòu)造函數(shù)接受以下參數(shù):

Blob(blobParts, options):構(gòu)造函數(shù)接受兩個(gè)參數(shù)。

第一個(gè)參數(shù)blobParts是一個(gè)數(shù)組,其中包含將被包含在Blob對象中的數(shù)據(jù)。數(shù)組的元素可以是字符串、ArrayBuffer、ArrayBufferView、Blob對象或其他類似對象。

第二個(gè)參數(shù)options是一個(gè)可選的對象,用于指定Blob對象的屬性。

在options參數(shù)中,可以使用以下屬性:

  • type:指定Blob對象的MIME類型。默認(rèn)值為空字符串。
  • endings:指定以何種方式標(biāo)準(zhǔn)化換行符。可能的值是transparent、native和\r\n。默認(rèn)值是transparent。

以下是一些常用的Blob屬性和方法:

屬性:

  • Blob.size:返回Blob對象的字節(jié)大小。
  • Blob.type:返回Blob對象的MIME類型。

方法:

Blob.slice(start, end, contentType):

創(chuàng)建并返回一個(gè)新的Blob對象,該對象包含原始Blob對象的指定字節(jié)范圍。可選參數(shù)contentType用于指定新Blob對象的MIME類型。

Blob.arrayBuffer():

返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)ArrayBuffer對象,其中包含Blob對象的整個(gè)內(nèi)容。

Blob.text():

返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)字符串,其中包含Blob對象的文本內(nèi)容。

Blob.stream():

返回一個(gè)ReadableStream對象,可以用于流式讀取Blob對象的內(nèi)容。

Blob.text():

返回一個(gè)Promise,該P(yáng)romise解析為一個(gè)字符串,其中包含Blob對象的文本內(nèi)容。

Blob.stream():

返回一個(gè)ReadableStream對象,可以用于流式讀取Blob對象的內(nèi)容。

3、如何導(dǎo)出下載Word文檔?

通過a元素的 download 屬性,來實(shí)現(xiàn)文件的導(dǎo)出下載。

在 HTML 中,a元素的 download 屬性用于指定一個(gè)下載鏈接,告訴瀏覽器該鏈接是要被下載而不是在瀏覽器中打開。這樣,當(dāng)用戶點(diǎn)擊鏈接時(shí),瀏覽器會彈出一個(gè)下載對話框,提示用戶保存文件到本地設(shè)備。

download 屬性的值可以是一個(gè)文件名,用于指定用戶保存文件時(shí)的默認(rèn)文件名。當(dāng)用戶點(diǎn)擊下載鏈接時(shí),瀏覽器會使用該值作為默認(rèn)文件名,但用戶仍然可以選擇其他文件名保存。

請注意,download 屬性并不是所有瀏覽器都支持的新特性。特別是在移動設(shè)備上,某些瀏覽器可能會忽略該屬性并在瀏覽器中打開鏈接。因此,在使用 download 屬性時(shí),最好提供一個(gè)備用方案,例如在鏈接的文本或旁邊添加一段說明,告訴用戶右鍵點(diǎn)擊鏈接并選擇 "保存鏈接" 或類似選項(xiàng)來下載文件。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2017-02-08 14:30:08

Chrome密碼瀏覽器

2010-08-11 15:17:51

瀏覽器兼容性問題

2025-02-12 09:57:55

2013-11-05 10:22:20

瀏覽器加密

2012-01-04 16:14:17

2013-06-03 14:20:34

2010-08-27 14:35:37

IEFirefox兼容

2020-09-09 07:00:00

TensorFlow神經(jīng)網(wǎng)絡(luò)人工智能

2011-04-01 15:09:08

MRTG亂碼

2021-10-13 14:53:50

UbuntuVivaldi瀏覽器

2016-08-03 15:21:03

UbuntuLinux易用性

2022-07-07 07:22:01

瀏覽器JavaScript工具

2022-09-16 07:33:52

瀏覽器深色模式Firefox

2010-11-20 09:47:01

2016-10-26 23:00:15

javascripttesttdd

2025-03-13 07:01:22

Edge瀏覽器插件

2010-09-15 09:43:24

Javascript瀏覽器兼容

2011-04-12 16:51:29

Javascript兼容性

2010-08-11 13:35:10

JavaScriptCSS

2009-03-05 09:37:19

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 午夜天堂精品久久久久 | 在线播放中文字幕 | 午夜丰满寂寞少妇精品 | 色综合天天综合网国产成人网 | 精品自拍视频在线观看 | 亚洲精品国产成人 | 精品久久国产老人久久综合 | 一级做a爰片性色毛片视频停止 | 精品一区久久 | 国产91在线 | 亚洲 | 艹逼网| 青青草精品 | 国产xxx在线观看 | 91麻豆精品国产91久久久更新资源速度超快 | 老司机久久 | 久久久久久精 | 一区二区精品视频 | 成人网在线观看 | 日韩欧美在线视频 | 国产精品99久久久久久大便 | 国产精品视频网站 | 久久国产亚洲 | 亚洲成人日韩 | 99re在线视频| 精品伊人| 国产精品久久久久久 | 国产农村一级国产农村 | 羞羞视频在线观看 | 日韩一区二区三区在线观看视频 | 九九综合 | 国产成人免费在线 | 人成在线视频 | 久久精品国产免费 | 夜夜爽99久久国产综合精品女不卡 | 在线a视频| 精品一区二区久久久久久久网站 | 亚洲高清一区二区三区 | 黄色香蕉视频在线观看 | 久久免费精品 | 国产成人福利视频 | 欧美在线一区视频 |