首页 > 其他分享 >Office文档在线预览方案

Office文档在线预览方案

时间:2024-04-29 09:37:39浏览次数:26  
标签:文件 fs Office 预览 文档 PDF

转载:Office文档在线预览方案

# Office文档在线预览方案

注意

本文中展示的代码均为关键代码,复制粘贴到您的项目中,按照实际的情况,例如文档路径,用户名等做适当修改即可使用。

在涉及到Office文档管理的各种Web项目中,时常会遇到用户阅读文档的时候,并不想将网站上的Office文档下载到本地,这时候就需要文档在线预览的功能。

目前常用的文档在线预览方案如下:

  • 转换为HTML文件。转换后的HTML格式可以直接用浏览器查看,但是无法完全保留原Word文档的格式和功能。例如,HTML不支持某些Word功能,转换时Word可能会自动更改或取消内容,而且另存HTML格式还会导致文档的布局、字体样式等发生变化,影响文档的可读性和专业性。

  • 调用第三方提供的在线预览接口。比如调用永中Office、金山文档、腾讯文档等在线预览服务,集成相对简单,开发工作量小,但是只能在公网环境使用,且对于超过一定大小的文件,预览速度会变得很慢,这意味着大文件的处理能力受限,可能会影响用户体验。在线预览文档需要先上传到第三方官方的服务器进行解析,然后下载到服务器中后实现在线预览,这种模式意味着对第三方服务的依赖,可能会因为第三方服务的问题而影响在线预览的稳定性和速度。但是如果Web系统中存储的是涉密文档,包含了技术秘密和经营秘密等商业秘密,甚至包含了国家机密,那么绝对不能使用第三方预览服务。

  • 转换为PDF文件(推荐)。通过转换为PDF格式,可以确保在大多数浏览器和平台上都能实现良好的兼容性。PDF是一种广泛支持的文件格式,几乎所有的现代浏览器都内置了对PDF的支持,这意味着用户可以在没有额外软件的情况下直接预览文件。PDF格式的文件具有很好的跨平台性,无论是在Windows、MacOS还是Linux操作系统上,用户都可以方便地打开和查看PDF文件,这一点对于需要在不同操作系统间共享和查看文档的用户来说非常重要。

用PageOffice实现的Office文档在线预览采用了转换为PDF文件的预览方案,可以在公网环境使用,也可以支持物理隔绝的内网环境。

第一步: 使用PageOffice在线编辑Office文件,可以在每次保存文件的时候同另存一份PDF格式的文件,如此一来,PDF文件和Office文件的内容总是完全同步的。实现PageOffice在线编辑Office,保存文件的同时转pdf的关键代码如下。

  • 后端代码:
  1. 在后端编写代码调用webOpen方法打开文件之前给SaveFilePage属性赋值(设置好保存时由哪个地址接口负责接收处理控件上传的文件流);
Java
PageOfficeCtrl poCtrl = new PageOfficeCtrl(request);
poCtrl.setSaveFilePage("saveFile"); // 设置保存文件的接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
poCtrl.webOpen("doc/test.docx", OpenModeType.docNormalEdit, "张佚名"); // 打开文件
.NetCore
PageOfficeNetCore.PageOfficeCtrl POCtrl = new PageOfficeNetCore.PageOfficeCtrl(Request);
POCtrl.SaveFilePage = "SaveDoc";// 设置保存文件的接口地址
//webOpen的第一个参数支持能够输出下载文件的Url相对地址或者文件在服务器上的磁盘路径两种方式
POCtrl.WebOpen("doc/test.docx", PageOfficeNetCore.OpenModeType.docNormalEdit, "tom");
  1. 在SaveFilePage属性指向的地址接口中,创建FileSaver对在线打开的Office文件和另存的pdf文件分别进行保存。
Java
FileSaver fs = new FileSaver(request, response);
if(fs.getFileExtName().equals(".pdf")){
    fs.saveToFile(request.getSession().getServletContext().getRealPath("pdf/") + fs.getFileName());
}else{
    fs.saveToFile(request.getSession().getServletContext().getRealPath("doc/") + fs.getFileName());
}
fs.close();
.NetCore
PageOfficeNetCore.FileSaver fs = new PageOfficeNetCore.FileSaver(Request, Response);
await fs.LoadAsync();
string webRootPath = _webHostEnvironment.WebRootPath;
if(fs.FileExtName == ".pdf"){
  fs.SaveToFile(webRootPath + "/pdf/" + fs.FileName);
}else{
  fs.SaveToFile(webRootPath + "/doc/" + fs.FileName);
}
fs.Close();
  • 前端代码:

使用AddCustomToolButton添加自定义保存按钮,实现保存文件的同时另存PDF。

JavaScript
function SaveFile() {
  pageofficectrl.WebSave(); //保存当前文件
  pageofficectrl.WebSaveAsPDF(); //另存当前文件为PDF格式
}
OnPageOfficeCtrlInit() {
  // PageOffice的初始化事件回调函数
  pageofficectrl.AddCustomToolButton("保存", "SaveFile()", 1);
}

第二步: 需要在线预览Office文档的环节,只需集成调用PageOffice的PDFCtrl组件在线打开PDF文件即可。如果还想实现只让用户浏览文件内容,不允许用户下载另存文件的功能,可以设置pdfCtrl对象的AllowCopy属性为false,禁止文件内容的拷贝操作,这样就能实现用户只能在线查看文件,而获取不到文件的下载地址,也无法另存PDF文件到本地,实现文件的安全浏览。

Java
PDFCtrl pdfCtrl = new PDFCtrl(request);
pdfCtrl.setAllowCopy(false);//禁止拷贝
pdfCtrl.webOpen("D:\\documents\\test.pdf");
// Linux服务器添加前缀:file://
// pdfCtrl.webOpen("file://"+"/root/documents/test.pdf");
.NetCore
PageOfficeNetCore.PDFCtrl PdfCtrl = new PageOfficeNetCore.PDFCtrl(Request);
PdfCtrl.AllowCopy = false; //禁止拷贝
PdfCtrl.WebOpen("doc/test.pdf");

提示

PageOffice内置了PDF阅读器,所以即使客户端电脑未安装Office或WPS软件也可以在线打开PDF文件。

标签:文件,fs,Office,预览,文档,PDF
From: https://www.cnblogs.com/lhl77/p/18164981

相关文章

  • OPENAI API应用文档
    相关链接:https://platform.openai.com/docs/introduction1、简介OpenAIAPI几乎可以应用于任何任务。我们提供一系列具有不同功能和价位的模型,并且能够微调定制模型。api-reference:https://platform.openai.com/docs/api-reference/introduction1.1、关键概念1.1.1、Textg......
  • JMeter响应文本输出为文档
      背景:当我们做压测时,需要模拟多用户访问操作,提前需要通过登录接口,批量生成TOKEN。在压测时,经常会遇到类似上面的这种情况,我们需要把接口响应的内容,输出到文件中,那么本文,就是来解决这个问题; 1、第一步,需要先准备好用户数据,比如登录用户需要的手机号,需要为txt文档,或者CSV(逗......
  • 如何写接口设计文档?
    小系统或单个模块的设计文档一、「一句话描述」的标题文件名或标题最好使用「一句话描述」,如:观测云新Event数据结构及处理逻辑设计观测云云关联处理逻辑设计二、业务流程对业务流程进行描述,具体写明「用户做了什么操作,系统进行了什么处理,最后发生了什么」。一般是流程图......
  • zabbix监控安装文档
    Zabbix安装部署文档https://blog.csdn.net/m0_56055257/article/details/131260948以上文档可以直接复制内容部署,写的非常好用在本教程中,展示如何在CentOS8/RHEL8/OracleLinux8/AlmaLinux8/RockyLinux8上安装最新的Zabbix6.4 版本。1、基本配置1.0关闭防火墙......
  • 探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
    DTD是文档类型定义(DocumentTypeDefinition)的缩写。DTD定义了XML文档的结构以及合法的元素和属性。为什么使用DTD通过使用DTD,独立的团体可以就数据交换的标准DTD达成一致。应用程序可以使用DTD来验证XML数据的有效性。内部DTD声明如果DTD在XML文件内声......
  • OpenWrt软件包各主题样式预览
     Openwrt软件包主题 luci-theme-alpha 登录界面:  主界面: luci-theme-Argon登录界面:主界面: luci-theme-Bootstrap登录界面:主界面: luci-theme-Bootstrap_mmdvm登录界面:主界面:  luci-theme-Design登录界面: 主界面: luci-theme-Edge......
  • [python省时间]处理文档,包括批量查找,替换,
    1、批量查找替换#-*-coding:utf-8-*-importosimportre#path=os.getcwd()str_old='insert'str_new='frs.event.queue'file_formate='init.sql'file_sql=open(r'F:\bak\init_all.sql','r+',encoding=......
  • 界面控件DevExpress Office File API中文教程 - 如何实现PDF转换?
    DevExpressOfficeFileAPI是一个专为C#,VB.NET和ASP.NET等开发人员提供的非可视化.NET库。有了这个库,不用安装MicrosoftOffice,就可以完全自动处理Excel、Word等文档。开发人员使用一个非常易于操作的API就可以生成XLS,XLSx,DOC,DOCx,RTF,CSV和SnapReport等企业级文......
  • .NET Aspire 预览版 6 发布
    .NETAspire预览版6引入了一系列重大更新,主要包括API的重大更改、安全性和可靠性的提升、新的资源和组件、应用程序主机的更新、测试支持、模板更新、组件更新、Azure配置包的更新以及Azure开发者CLI对多个端点的支持。这些更新旨在提高.NETAspire的性能和用户体验,同......
  • anythingllm构建专用知识库(问答增加个人文档)
    anythingllm构建专用知识库(问答增加个人文档)anythingllm的文档说明链接:https://docs.useanything.com/faq/why-is-llm-not-using-docs首先打开ollama的服务然后打开anythingllm,点击要用的工作区上的按钮(上传文件,支持多种文件类型(PDF,TXT,DOC等)点击Clicktouploadordrag......