diff --git a/core/packages/js-docx/index.d.ts b/core/packages/js-docx/index.d.ts index 87196be..0dbb85e 100644 --- a/core/packages/js-docx/index.d.ts +++ b/core/packages/js-docx/index.d.ts @@ -19,10 +19,11 @@ export interface Options { } export interface JsDocxPreview { - preview: (src: string | ArrayBuffer | Blob) => Promise, - setOptions: (options: Options) => void, - setRequestOptions: (requestOptions?: any) => void, - destroy: ()=> void, + preview: (src: string | ArrayBuffer | Blob) => Promise; + download: (fileName?: string) => void; + setOptions: (options: Options) => void; + setRequestOptions: (requestOptions?: any) => void; + destroy: ()=> void; } declare const jsPreviewDocx: { init: (container: HTMLElement, options?: Options, requestOptions?: any) => JsDocxPreview; diff --git a/core/packages/js-docx/package.json b/core/packages/js-docx/package.json index e8179a0..26ebb21 100644 --- a/core/packages/js-docx/package.json +++ b/core/packages/js-docx/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/docx", "type" :"module", - "version": "1.0.3", + "version": "1.2.0", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/js-docx/src/main.js b/core/packages/js-docx/src/main.js index 7f37d90..62808db 100644 --- a/core/packages/js-docx/src/main.js +++ b/core/packages/js-docx/src/main.js @@ -1,10 +1,12 @@ import docx from '../../vue-docx/src/docx'; +import {download as downloadFile} from '../../../utils/url.js'; class JsDocxPreview { container = null; wrapper = null; wrapperMain = null; options = {}; requestOptions = {}; + fileData = null; constructor(container, options={}, requestOptions={}) { this.container = container; @@ -29,8 +31,9 @@ class JsDocxPreview { } preview(src){ return new Promise((resolve, reject) => { - docx.getData(src, this.requestOptions).then(res =>{ - docx.render(res, this.wrapperMain, this.options).then(() => { + docx.getData(src, this.requestOptions).then(async res =>{ + this.fileData = await docx.getBlob(res); + docx.render(this.fileData, this.wrapperMain, this.options).then(() => { resolve(); }).catch(e => { docx.render('', this.wrapperMain, this.options); @@ -42,6 +45,9 @@ class JsDocxPreview { }); }); } + download(fileName){ + downloadFile(fileName || `js-preview-docx-${new Date().getTime()}.docx`,this.fileData); + } destroy(){ this.container.removeChild(this.wrapper); this.container = null; diff --git a/core/packages/js-excel/index.d.ts b/core/packages/js-excel/index.d.ts index bc20efe..4b21631 100644 --- a/core/packages/js-excel/index.d.ts +++ b/core/packages/js-excel/index.d.ts @@ -4,10 +4,11 @@ export interface Options { } export interface JsExcelPreview { - preview: (src: string | ArrayBuffer | Blob) => Promise, - setOptions: (options: Options) => void, - setRequestOptions: (requestOptions?: any) => void, - destroy: ()=> void, + preview: (src: string | ArrayBuffer | Blob) => Promise; + download: (fileName?: string) => void; + setOptions: (options: Options) => void; + setRequestOptions: (requestOptions?: any) => void; + destroy: ()=> void; } declare const jsPreviewExcel: { init: (container: HTMLElement, options?: Options, requestOptions?: any) => JsExcelPreview; diff --git a/core/packages/js-excel/package.json b/core/packages/js-excel/package.json index 7c8c23c..9fd17f4 100644 --- a/core/packages/js-excel/package.json +++ b/core/packages/js-excel/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/excel", "type" :"module", - "version": "1.0.3", + "version": "1.2.0", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/js-excel/src/main.js b/core/packages/js-excel/src/main.js index 4087bc3..0b51396 100644 --- a/core/packages/js-excel/src/main.js +++ b/core/packages/js-excel/src/main.js @@ -3,6 +3,7 @@ import {getData, readExcelData, transferExcelToSpreadSheet} from '../../vue-exce import {renderImage, clearCache} from '../../vue-excel/src/media'; import {readOnlyInput} from '../../vue-excel/src/hack'; import {debounce} from 'lodash'; +import {download as downloadFile} from "../../../utils/url.js"; class JsExcelPreview { container = null; wrapper = null; @@ -18,6 +19,7 @@ class JsExcelPreview { xs = null; offset = null; observer = null; + fileData = null; constructor(container, options={}, requestOptions={}) { this.container = container; @@ -86,6 +88,7 @@ class JsExcelPreview { this.ctx = canvas.getContext('2d'); } renderExcel(buffer){ + this.fileData = buffer; return readExcelData(buffer).then(workbook => { if (!workbook._worksheets || workbook._worksheets.length === 0) { throw new Error('未获取到数据,可能文件格式不正确或文件已损坏'); @@ -133,6 +136,9 @@ class JsExcelPreview { }); })); } + download(fileName){ + downloadFile(fileName || `js-preview-excel-${new Date().getTime()}.xlsx`,this.fileData); + } destroy(){ this.observer.disconnect(); this.container.removeChild(this.wrapper); diff --git a/core/packages/js-pdf/index.d.ts b/core/packages/js-pdf/index.d.ts index 56a31fe..216a8e7 100644 --- a/core/packages/js-pdf/index.d.ts +++ b/core/packages/js-pdf/index.d.ts @@ -14,10 +14,11 @@ export interface Options { } export interface JsPdfPreview { - preview: (src: string | ArrayBuffer | Blob) => Promise, - setOptions: (options: Options) => void, - setRequestOptions: (requestOptions?: any) => void, - destroy: ()=> void, + preview: (src: string | ArrayBuffer | Blob) => Promise; + download: (fileName?: string) => void; + setOptions: (options: Options) => void; + setRequestOptions: (requestOptions?: any) => void; + destroy: ()=> void; } declare const jsPreviewPdf: { init: (container: HTMLElement, options?: Options, requestOptions?: any) => JsPdfPreview; diff --git a/core/packages/js-pdf/package.json b/core/packages/js-pdf/package.json index fcba9d0..021ebef 100644 --- a/core/packages/js-pdf/package.json +++ b/core/packages/js-pdf/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/pdf", "type" :"module", - "version": "1.0.3", + "version": "1.2.0", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/js-pdf/src/main.js b/core/packages/js-pdf/src/main.js index 5886e4a..fa07d34 100644 --- a/core/packages/js-pdf/src/main.js +++ b/core/packages/js-pdf/src/main.js @@ -1,6 +1,6 @@ import {worker} from '../../vue-pdf/src/worker'; import {pdfjsLib} from '../../vue-pdf/src/pdf'; -import {getUrl, loadScript} from '../../../utils/url'; +import {download as downloadFile, getUrl, loadScript} from '../../../utils/url'; import omit from 'lodash/omit'; const pdfJsLibSrc = `data:text/javascript;base64,${pdfjsLib}`; @@ -145,6 +145,11 @@ class JsPdfPreview{ }); })); } + download(fileName){ + this.pdfDocument && this.pdfDocument._transport && this.pdfDocument._transport.getData().then(fileData=>{ + downloadFile(fileName || `js-preview-pdf-${new Date().getTime()}.pdf`,fileData.buffer); + }); + } destroy(){ this.container.removeChild(this.wrapper); this.container = null; diff --git a/core/packages/vue-docx/package.json b/core/packages/vue-docx/package.json index 02974f5..0f511a0 100644 --- a/core/packages/vue-docx/package.json +++ b/core/packages/vue-docx/package.json @@ -1,6 +1,6 @@ { "name": "@vue-office/docx", - "version": "1.1.3", + "version": "1.2.0", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/vue-docx/src/docx.js b/core/packages/vue-docx/src/docx.js index df77a84..081e2d2 100644 --- a/core/packages/vue-docx/src/docx.js +++ b/core/packages/vue-docx/src/docx.js @@ -21,6 +21,18 @@ function fetchDocx(src, options) { }); } +async function getBlob(data){ + let blob; + if (data instanceof Blob) { + blob = data; + } else if (data instanceof Response) { + blob = await data.blob(); + } else if (data instanceof ArrayBuffer) { + blob = new Blob([data]); + } + return blob +} + function render(data, container, options = {}) { if (!data) { container.innerHTML = ''; @@ -39,5 +51,6 @@ function render(data, container, options = {}) { export default { getData, - render + render, + getBlob }; \ No newline at end of file diff --git a/core/packages/vue-docx/src/main.vue b/core/packages/vue-docx/src/main.vue index 9c8fd73..19dcf1d 100644 --- a/core/packages/vue-docx/src/main.vue +++ b/core/packages/vue-docx/src/main.vue @@ -1,6 +1,7 @@