首頁 > 軟體

js前端實現word excel pdf ppt mp4圖片文字等檔案預覽

2022-07-08 18:05:54

前言

因為業務需要,很多檔案需要在前端實現預覽,今天就來了解一下吧。

可以點選下面地址體驗喔

git倉庫地址 以及線上demo地址

實現方案

找了網上的實現方案,效果看起來不錯,放在下面的表格裡,裡面有一些是可以直接通過npm在vue中引入使用。

檔案格式老的開源元件替代開源元件
word(docx)mammothdocx-preview(npm)
powerpoint(pptx)pptxjspptxjs改造開發
excel(xlsx)sheetjs、handsontableexceljs(npm)、handsontable(npm)(npm)
pdf(pdf)pdfjspdfjs(npm)
圖片jquery.verySimpleImageViewerv-viewer(npm)

docx檔案實現前端預覽

程式碼實現

  • 首先npm i docx-preview
  • 引入renderAsync方法
  • 將blob資料流傳入方法中,渲染word檔案
import { defaultOptions, renderAsync } from "docx-preview";
renderAsync(buffer, document.getElementById("container"), null,
options: {
       className: string = "docx", // 預設和檔案樣式類的類名/字首
       inWrapper: boolean = true, // 啟用圍繞檔案內容渲染包裝器
       ignoreWidth: boolean = false, // 禁止頁面渲染寬度
       ignoreHeight: boolean = false, // 禁止頁面渲染高度
       ignoreFonts: boolean = false, // 禁止字型渲染
       breakPages: boolean = true, // 在分頁符上啟用分頁
       ignoreLastRenderedPageBreak: boolean = true,//禁用lastRenderedPageBreak元素的分頁
       experimental: boolean = false, //啟用實驗性功能(製表符停止計算)
       trimXmlDeclaration: boolean = true, //如果為真,xml宣告將在解析之前從xml檔案中刪除
       debug: boolean = false, // 啟用額外的紀錄檔記錄
   }
);

實現效果

pdf實現前端預覽

程式碼實現

  • 首先npm i pdfjs-dist
  • 設定PDFJS.GlobalWorkerOptions.workerSrc的地址
  • 通過PDFJS.getDocument處理pdf資料,返回一個物件pdfDoc
  • 通過pdfDoc.getPage單獨獲取第1頁的資料
  • 建立一個dom元素,設定元素的畫布屬性
  • 通過page.render方法,將資料渲染到畫布上
import * as PDFJS from "pdfjs-dist/legacy/build/pdf";
// 設定pdf.worker.js檔案的引入地址
PDFJS.GlobalWorkerOptions.workerSrc = require("pdfjs-dist/legacy/build/pdf.worker.entry.js");
// data是一個ArrayBuffer格式,也是一個buffer流的資料
PDFJS.getDocument(data).promise.then(pdfDoc=>{
    const numPages = pdfDoc.numPages; // pdf的總頁數
    // 獲取第1頁的資料
    pdfDoc.getPage(1).then(page =>{
     // 設定canvas相關的屬性
     const canvas = document.getElementById("the_canvas");
     const ctx = canvas.getContext("2d");
     const dpr = window.devicePixelRatio || 1;
     const bsr =
       ctx.webkitBackingStorePixelRatio ||
       ctx.mozBackingStorePixelRatio ||
       ctx.msBackingStorePixelRatio ||
       ctx.oBackingStorePixelRatio ||
       ctx.backingStorePixelRatio ||
       1;
     const ratio = dpr / bsr;
     const viewport = page.getViewport({ scale: 1 });
     canvas.width = viewport.width * ratio;
     canvas.height = viewport.height * ratio;
     canvas.style.width = viewport.width + "px";
     canvas.style.height = viewport.height + "px";
     ctx.setTransform(ratio, 0, 0, ratio, 0, 0);
     const renderContext = {
       canvasContext: ctx,
       viewport: viewport,
     };
     // 資料渲染到canvas畫布上
     page.render(renderContext);
    })
})

實現效果

excel實現前端預覽

程式碼實現

  • 下載exceljs、handsontable的庫
  • 通過exceljs讀取到檔案的資料
  • 通過workbook.getWorksheet方法獲取到每一個工作表的資料,將資料處理成一個二維陣列的資料
  • 引入@handsontable/vue的元件HotTable
  • 通過settings屬性,將一些設定引數和二維陣列資料傳入元件,渲染成excel樣式,實現預覽
// 載入excel的資料
(new ExcelJS.Workbook().xlsx.load(buffer)).then(workbook=>{
   // 獲取excel的第一頁的資料
   const ws = workbook.getWorksheet(1);
   // 獲取每一行的資料
   const data = ws.getRows(1, ws.actualRowCount);
 })
// 渲染頁面
import { HotTable } from "@handsontable/vue";
<hot-table  :settings="hotSettings"></hot-table>
hotSettings = {
   language: "zh-CN",
   readOnly: true,
   data: this.data,
   cell: this.cell,
   mergeCells: this.merge,
   colHeaders: true,
   rowHeaders: true,
   height: "calc(100vh - 107px)",
   // contextMenu: true,
   // manualRowMove: true,
   // 關閉外部點選取消選中時間的行為
   outsideClickDeselects: false,
   // fillHandle: {
   //   direction: 'vertical',
   //   autoInsertRow: true
   // },
   // afterSelectionEnd: this.afterSelectionEnd,
   // bindRowsWithHeaders: 'strict',
   licenseKey: "non-commercial-and-evaluation"
}

實現效果

pptx的前端預覽

主要是通過jszip庫,載入二進位制檔案,再經過一些列處理處理轉換實現預覽效果,實現起來比較麻煩,就不貼程式碼了,感興趣的可以下載程式碼檢視。

實現效果

總結

主要介紹了word、excel、pdf檔案實現預覽的方式,前端實現預覽最好的效果還是PDF,不會出現一些文字錯亂和亂碼的問題,所以一般好的方案就是後端配合將不同格式的檔案轉換成pdf,再由前端實現預覽效果,將會保留檔案的一些樣式的效果,對於圖片、txt檔案的實現,感興趣的可以看下程式碼。

前端vue-cropperjs實現圖片裁剪方案

參考資料

www.npmjs.com/package/v-v…

www.npmjs.com/package/vue…

以上就是js前端實現word excel pdf ppt mp4圖片文字等檔案預覽的詳細內容,更多關於js預覽mp4圖片文字檔案的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com