Skip to content

Commit 2b4e80b

Browse files
committed
feat: 增加微软提供的office文件在线访问接口支持
1 parent 812fb25 commit 2b4e80b

32 files changed

+235
-99
lines changed

README.md

+3-25
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,12 @@
22

33
❤️ ❤️ ❤️ 开源不易,请各位大佬给个 Start✨✨✨,同时欢迎提 PR 和 Issure!:smile:
44

5-
#### [在线示例文档](https://home.sharecorner.top/file-viewer-doc/index.html)
5+
#### 介绍:
66

77
该组件集成了市面上纯前端渲染多种常用文档格式的主流方案,如 pptx,docx,xlsx,pdf,mp4,纯文本和图片。
88

99
后期计划增加更多文件格式的在线浏览支持。
1010

11-
##### 这里 特别鸣谢 [小爬的老粉丝](https://blog.csdn.net/wybaby168)分享的文章、源码内核和思路,在此基础上进行了封包和优化
11+
##### [☞☞☞ 项目 api 文档和演示戳这里](https://home.sharecorner.top/file-viewer-doc/index.html)
1212

13-
### 安装
14-
15-
```
16-
yarn install
17-
```
18-
19-
### 启动本地演示调试
20-
21-
```
22-
yarn run serve
23-
```
24-
25-
### 打包成 npm 组件
26-
27-
```
28-
yarn run build
29-
```
30-
31-
### 打包项目提供 iframe 入口使用
32-
33-
```
34-
yarn run build:iframe
35-
```
13+
##### 这里 特别鸣谢 [小爬的老粉丝](https://blog.csdn.net/wybaby168) 分享的文章、源码内核和思路,在此基础上进行了封包和优化

doc/App.vue

-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ header {
8484
section {
8585
.section-content {
8686
margin: 0;
87-
padding-bottom: 10px;
8887
box-sizing: border-box;
8988
}
9089

doc/views/Start.vue

+105-31
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,49 @@
22
* @Author: zhanghan
33
* @Date: 2023-01-10 14:28:29
44
* @LastEditors: zhanghan
5-
* @LastEditTime: 2023-01-12 14:49:53
5+
* @LastEditTime: 2023-01-13 14:02:18
66
* @Descripttion: 快速上手
77
-->
88
<template>
99
<div class="page-home page">
10+
<h3>属性(组件和iframe传参都支持):</h3>
11+
<ul>
12+
<li>fileUrl: string 上传的地址(必传)</li>
13+
<li>
14+
useOfficeMicroOnline: boolean
15+
是否开启使用微软提供的office文件在线访问接口(内网无效,可选,默认false关闭)
16+
</li>
17+
</ul>
18+
<h3>注意事项:</h3>
19+
<h4>* 被浏览的文件链接必须同源或本身支持跨域才能访问和下载文件。</h4>
20+
<h4>
21+
*
22+
若发布生产的项目不在服务器域名根目录,记得配置打包的前缀路径,打包后资源才能被正常引用。(以vue-cli为例,配置
23+
<code>vue.config.js</code>
24+
25+
<code>publicPath: './'</code>
26+
; 其他框架请自行选择合适的配置文件进行配置)
27+
</h4>
28+
<h4>
29+
*
30+
由于office系列格式的文件解析微软不开源,无法保证百分百还原文档效果,若实际需求没有严格要求百分百还原一致,您可以使用纯前端渲染office文件的这种方式,否则建议通过后端统一转为PDF或者图片格式进行浏览,PDF和图片格式的文件浏览效果最佳,内核渲染方案也较为成熟。
31+
</h4>
32+
<h4>
33+
* 或者您也可以通过iframe或者组件形式传递
34+
<code>useOfficeMicroOnline = true</code>
35+
这个属性开启office系列文件使用内置的微软文档在线访问接口,浏览效果会比纯前端渲染好。
36+
</h4>
1037
<h2>iframe方式示例(推荐):</h2>
1138
<h3>使用说明:</h3>
1239
<h4>
13-
推荐独立部署
14-
{{ config.name }}
15-
的编译构建产物,并使用iframe方式引入以减少引入构建代价,提升构建效率。
40+
推荐独立部署本项目的编译编译构建产物
41+
<a
42+
href="https://github.com/zyl-ui/vue-file-viewer/tree/master/public/file-viewer"
43+
target="_blank"
44+
>
45+
file-viewer
46+
</a>
47+
,并使用iframe方式引入以减少引入构建代价,提升构建效率。
1648
</h4>
1749
<h4>此种方式支持跨框架使用。</h4>
1850
<h3>使用步骤:</h3>
@@ -25,28 +57,12 @@
2557
file-viewer
2658
</a>
2759
28-
<br />
29-
</h4>
30-
<h4>
31-
2、将下载后的file-viewer文件夹整个放在项目公共文件夹中作为外部公共资源使用。
32-
<br />
33-
(以vue-cli为例,放置在项目public文件夹下;其他框架自行选择合适的公共路径放置)
3460
</h4>
35-
<h3>注意事项:</h3>
36-
<h4>* 本项目示例链接随时失效,请勿直接用于生产环境。</h4>
37-
<h4>* 被浏览的文件链接必须同源或本身支持跨域才能访问和下载文件。</h4>
3861
<h4>
39-
*
40-
若发布生产的项目不在服务器域名根目录,记得配置打包的前缀路径,打包后资源才能被正常引用。(以vue-cli为例,配置
41-
<code>vue.config.js</code>
42-
43-
<code>publicPath: './'</code>
44-
; 其他框架请自行选择合适的配置文件进行配置)
62+
2、将下载后的 file-viewer
63+
文件夹整个放在项目公共文件夹中作为外部公共资源使用。 (以 vue-cli
64+
为例,放置在项目 public 文件夹下;其他框架自行选择合适的公共路径放置)
4565
</h4>
46-
<h4>
47-
由于office系列格式的文件解析微软不开源,无法保证百分百还原文档效果,若实际需求没有严格要求百分百还原一致,您可以使用纯前端渲染office文件的这种方式,否则建议通过后端统一转为PDF或者图片格式进行浏览,PDF和图片格式的文件浏览效果最佳,内核渲染方案也较为成熟。
48-
</h4>
49-
<br />
5066

5167
<h3>一般url传入使用</h3>
5268
<section class="demo">
@@ -66,7 +82,36 @@
6682
</Collapse>
6783
</section>
6884

69-
<h3>支持二进制文件流消息推送</h3>
85+
<h3>
86+
可通过
87+
<code>useOfficeMicroOnline = true</code>
88+
开启微软文档在线访问接口,该接口兼容不带后缀x的低版本文档,如:doc或者docx;
89+
开启后属于office的文件会通过微软提供的api接口进行访问
90+
<code>http://view.officeapps.live.com/op/view.aspx?src=文件地址</code>
91+
(隐私文件不推荐开启,该选项内网无联网时不可用)
92+
</h3>
93+
<section class="demo">
94+
<div class="section-content">
95+
<iframe
96+
src="./file-viewer/index.html?useOfficeMicroOnline=true&fileUrl=https://home.sharecorner.top/fileTest/doc.doc"
97+
scrolling="auto"
98+
style="border:0;height: 500px;width:100%"
99+
/>
100+
</div>
101+
</section>
102+
<section class="snippets">
103+
<Collapse>
104+
<div class="section-content">
105+
<CodeSnippet
106+
class="snippet"
107+
:code="useOfficeMicroOnlineSnippet"
108+
lang="html"
109+
/>
110+
</div>
111+
</Collapse>
112+
</section>
113+
114+
<h3>支持接收二进制文件流消息推送</h3>
70115
<h3>注意事项:</h3>
71116
<h4>
72117
*
@@ -94,11 +139,17 @@
94139

95140
<h2>组件方式示例:</h2>
96141
<h3>安装:</h3>
97-
<CodeSnippet class="snippet" :code="installSnippet" lang="js" />
142+
<CodeSnippet class="snippet" :code="installSnippet1" lang="js" />
143+
<CodeSnippet class="snippet" :code="installSnippet2" lang="js" />
144+
<div>或者页面内单独引入:</div>
145+
<CodeSnippet class="snippet" :code="installSnippet3" lang="js" />
98146
<h3>使用:</h3>
99147
<section class="demo">
100148
<div class="section-content">
101-
<vue-file-viewer :file="file" style="height: 500px;overflow: auto;" />
149+
<vue-file-viewer
150+
:fileUrl="file"
151+
style="height: 500px;overflow: auto;"
152+
/>
102153
</div>
103154
</section>
104155
<section class="snippets">
@@ -127,6 +178,14 @@ const iframeSnippet = `
127178
/>
128179
`
129180

181+
const useOfficeMicroOnlineSnippet = `
182+
<iframe
183+
src="./file-viewer/index.html?useOfficeMicroOnline=true&fileUrl=https://home.sharecorner.top/fileTest/doc.doc"
184+
scrolling="auto"
185+
style="border:0;height: 500px;width:100%"
186+
/>
187+
`
188+
130189
const blobIframeSnippet1 = `
131190
<div id="blobIframe" style="height: 500px"></div>
132191
`
@@ -202,19 +261,31 @@ export default {
202261
}
203262
`
204263

205-
const installSnippet = `
264+
const installSnippet1 = `npm install --save '${config.name}'`
265+
266+
const installSnippet2 = `
206267
import Vue from 'vue'
207268
import App from './App.vue'
208-
import vueFileViewer from '${config.name}'
269+
import VueFileViewer from '${config.name}'
209270

210-
Vue.use(vueFileViewer)
271+
Vue.use(VueFileViewer)
211272

212273
new Vue({
213274
el: '#app',
214275
render: h => h(App)
215276
});
216277
`
217278

279+
const installSnippet3 = `
280+
import { VueFileViewer } from '${config.name}'
281+
282+
export default {
283+
components: {
284+
VueFileViewer
285+
}
286+
}
287+
`
288+
218289
const componentSnippet2 = `
219290
data () {
220291
return {
@@ -224,7 +295,7 @@ data () {
224295
`
225296

226297
const componentSnippet1 = `
227-
<vue-file-viewer :file="file" style="height: 500px;overflow: auto;" />
298+
<vue-file-viewer :fileUrl="file" style="height: 500px;overflow: auto;" />
228299
`
229300
export default {
230301
name: 'Home',
@@ -237,9 +308,12 @@ export default {
237308
return {
238309
config,
239310
iframeSnippet,
311+
useOfficeMicroOnlineSnippet,
240312
blobIframeSnippet1,
241313
blobIframeSnippet2,
242-
installSnippet,
314+
installSnippet1,
315+
installSnippet2,
316+
installSnippet3,
243317
componentSnippet2,
244318
componentSnippet1,
245319
file: 'https://home.sharecorner.top/fileTest/word.docx',

docs/file-viewer/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
margin: 0;
66
width: 100%;
77
height: 100%;
8-
}</style><link href="static/css/chunk-vendors.14348074.css" rel="preload" as="style"><link href="static/css/index.c60bbbd9.css" rel="preload" as="style"><link href="static/js/chunk-vendors.101c5e96.js" rel="preload" as="script"><link href="static/js/index.b742b920.js" rel="preload" as="script"><link href="static/css/chunk-vendors.14348074.css" rel="stylesheet"><link href="static/css/index.c60bbbd9.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but @zuiyouliao/vue-file-viewer doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.101c5e96.js"></script><script src="static/js/index.b742b920.js"></script></body></html>
8+
}</style><link href="static/css/chunk-vendors.14348074.css" rel="preload" as="style"><link href="static/css/index.afdd19c2.css" rel="preload" as="style"><link href="static/js/chunk-vendors.101c5e96.js" rel="preload" as="script"><link href="static/js/index.de133c4c.js" rel="preload" as="script"><link href="static/css/chunk-vendors.14348074.css" rel="stylesheet"><link href="static/css/index.afdd19c2.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but @zuiyouliao/vue-file-viewer doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.101c5e96.js"></script><script src="static/js/index.de133c4c.js"></script></body></html>

docs/file-viewer/static/css/index.c60bbbd9.css renamed to docs/file-viewer/static/css/index.afdd19c2.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/file-viewer/static/js/index.b742b920.js

-2
This file was deleted.

docs/file-viewer/static/js/index.b742b920.js.map

-1
This file was deleted.

docs/file-viewer/static/js/index.de133c4c.js

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/file-viewer/static/js/index.de133c4c.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/index.html

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
margin: 0;
66
width: 100%;
77
height: 100%;
8-
}</style><link href="static/css/chunk-vendors.690dbe2c.css" rel="preload" as="style"><link href="static/css/index.0c036bce.css" rel="preload" as="style"><link href="static/js/chunk-vendors.e1710af5.js" rel="preload" as="script"><link href="static/js/index.92e28a18.js" rel="preload" as="script"><link href="static/css/chunk-vendors.690dbe2c.css" rel="stylesheet"><link href="static/css/index.0c036bce.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but @zuiyouliao/vue-file-viewer doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.e1710af5.js"></script><script src="static/js/index.92e28a18.js"></script></body></html>
8+
}</style><link href="static/css/chunk-vendors.690dbe2c.css" rel="preload" as="style"><link href="static/css/index.3487c7c1.css" rel="preload" as="style"><link href="static/js/chunk-vendors.e1710af5.js" rel="preload" as="script"><link href="static/js/index.263cc237.js" rel="preload" as="script"><link href="static/css/chunk-vendors.690dbe2c.css" rel="stylesheet"><link href="static/css/index.3487c7c1.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but @zuiyouliao/vue-file-viewer doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="static/js/chunk-vendors.e1710af5.js"></script><script src="static/js/index.263cc237.js"></script></body></html>

docs/static/css/index.0c036bce.css

-1
This file was deleted.

docs/static/css/index.3487c7c1.css

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/static/js/index.263cc237.js

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/static/js/index.263cc237.js.map

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/static/js/index.92e28a18.js

-2
This file was deleted.

docs/static/js/index.92e28a18.js.map

-1
This file was deleted.

examples/App.vue

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @Author: zhanghan
33
* @Date: 2022-11-24 00:16:12
44
* @LastEditors: zhanghan
5-
* @LastEditTime: 2023-01-10 17:03:09
5+
* @LastEditTime: 2023-01-13 13:13:16
66
* @Descripttion: APP主入口文件
77
-->
88
<template>
@@ -12,7 +12,11 @@
1212
</template>
1313

1414
<script>
15+
import { VueFileViewer } from '../packages'
1516
export default {
17+
components: {
18+
VueFileViewer
19+
},
1620
data() {
1721
return {}
1822
},

examples/main.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
* @Author: zhanghan
33
* @Date: 2022-11-27 19:21:21
44
* @LastEditors: zhanghan
5-
* @LastEditTime: 2023-01-09 15:52:52
5+
* @LastEditTime: 2023-01-13 13:13:14
66
* @Descripttion: 主入口文件
77
*/
88

99
import Vue from 'vue'
1010
import App from './App.vue'
1111

12-
import VueFileViewer from '../packages'
13-
Vue.use(VueFileViewer)
12+
// import VueFileViewer from '../packages'
13+
// Vue.use(VueFileViewer)
1414

1515
Vue.config.productionTip = false
1616

package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "@zuiyouliao/vue-file-viewer",
3-
"version": "1.1.4",
3+
"version": "1.2.4",
44
"private": false,
55
"author": "zly <[email protected]>",
66
"license": "MIT",
7-
"description": "一个基于vue的跨框架、多格式、纯前端渲染的文件浏览查看器(支持格式:pptx,docx,xlsx,pdf,mp4,纯文本和图片)",
7+
"description": "一个基于vue的跨框架、多格式、纯前端渲染的文件浏览解决方案(支持格式:pptx,docx,xlsx,pdf,mp4,纯文本和图片)",
88
"directories": {
99
"doc": "docs",
1010
"example": "examples",

packages/index.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
* @Author: zhanghan
33
* @Date: 2023-01-04 13:49:25
44
* @LastEditors: zhanghan
5-
* @LastEditTime: 2023-01-09 21:59:26
5+
* @LastEditTime: 2023-01-13 13:15:34
66
* @Descripttion: 注册组件
77
*/
88
import VueFileViewer from './index.vue'
99

1010
VueFileViewer.install = (Vue) =>
1111
Vue.component(VueFileViewer.name, VueFileViewer)
1212

13+
export { VueFileViewer }
1314
export default VueFileViewer

packages/index.scss

+4
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,8 @@
9696
.scale_reduce {
9797
margin-right: 15px;
9898
}
99+
100+
/deep/ .output > div {
101+
height: 100%;
102+
}
99103
}

0 commit comments

Comments
 (0)