MASA MAUI 预览Office文件

news2024/11/26 20:24:54

文章目录

  • 背景
  • 介绍
    • 1、新建MAUI Blazor项目
    • 2、创建OfficeViewer.razor组件
    • 3、使用安卓模拟器运行
    • 4、兼容iOS
  • 总结

背景

接到一个在Maui中预览Office文件的需求,包含excel、word、PDF三种常见的文件,经过技术选型,最后选择了微软原生支持的office在线预览Api,原因是此技术方案简单、跨平台。在开发过程中碰到了不少问题,所以在此分享在MAUI中预览Offic文件的经验,也希望大家少踩坑。

介绍

微软提供了一个浏览器在线预览Office的Api:在线预览Office文件Api,拼接自己的office文件地址参数后在浏览器中访问即可达到预览效果。

https://view.officeapps.live.com/op/view.aspx?src={your_office_url}

image.png

接下来我们按照这个思路在Maui中实现这个效果。

1、新建MAUI Blazor项目

OfficeViewerDemo
企业微信截图_1696840312740.png

企业微信截图_16969010278681.png

2、创建OfficeViewer.razor组件

在Index.razor页面写上demo视图
企业微信截图_16969018241364.png

<iframe src="@($"https://view.officeapps.live.com/op/view.aspx?src={Url}")" frameborder="0" style="height:100vh;width:100%;" />

@code {
    [Parameter]
    [EditorRequired]
    public string Url { get; set; }
}

image.png

@page "/"

<OfficeViewer Url="@_url" />

@code{
    string _url = "your_excel_url";
}

3、使用安卓模拟器运行

image.png

看似大功告成了,满心欢喜,然而在尝试浏览word文件时发现异常,无法正常访问

企业微信截图_16969038169158.png

通过用浏览器模拟移动设备调试后,发现微软这个Api会检测设备,这个Api在移动端下不适用。经过在网络上一番查找,最后发现微软有一个移动端设备使用的Api:在线预览Office文件Api,我们将OfficeViewer.razor组件代码中的Api替换后运行

https://view.officeapps.live.com/op/embed.aspx?src=={your_office_url}

企业微信截图_16969046046389.png

<iframe src="@($"https://view.officeapps.live.com/op/embed.aspx?src={Url}")" frameborder="0" style="height:100vh;width:100%;" />

@code {
    [Parameter]
    [EditorRequired]
    public string Url { get; set; }
}

一切似乎完美,然而现实很残酷,在打包给测试后,发现Iphone进入此页面会出现跳转浏览器的现象,在网上查阅资料后得知,这是苹果的安全策略,就是不允许App里直接使用iframe。最后尝试在webview中使用iframe,解决了此问题。

4、兼容iOS

关于MAUI WebView的内容请参考下面官方文档

https://learn.microsoft.com/zh-cn/dotnet/maui/user-interface/controls/webview?pivots=devices-ios

新建WebViewer.xaml文件,使用WebView组件

企业微信截图_16969086735360.png

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="OfficeViewrDemo.WebViewer"
             Title="WebViewer">
    <StackLayout>
        <WebView  x:Name="webView"  VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand">
        </WebView>
    </StackLayout>
</ContentPage>

image-20231010113216729.png

namespace OfficeViewrDemo;

public partial class WebViewer : ContentPage
{
    public WebViewer()
    {
        InitializeComponent();
    }

    public void Open(string url)
    {
        this.webView.Source = url;
    }
}

修改OfficeViewer.razor组件代码

image-20231010113319754.png

@code {
    [Parameter]
    [EditorRequired]
    public string Url { get; set; }

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            WebViewer webView = new WebViewer();
            webView.Open($"https://view.officeapps.live.com/op/embed.aspx?src={Url}");
            await Microsoft.Maui.Controls.Application.Current.MainPage.Navigation.PushModalAsync(webView);
        }
    }
}

如此这般就兼容解决了iOS。

总结

本文主要介绍了如何在Maui下预览Office文件,并分享开发过程正踩过的坑以及对应的解决方案。希望能帮助到遇到同样需求问题的朋友。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何避免输入中文拼音时触发input事件

如何避免输入中文拼音时触发 input 事件 html 结构 <input type"text" name"" id"" />js 定义了一个输入框并添加了三个事件监听器。以下是每个部分的解释&#xff1a; const input document.querySelector("input"); let i…

记一次U8登录异常问题

最近陆续有同事反映U8系统登录切换不同用户&#xff0c;在选择账套时U8长时间无反应。 一开始在经历二十多秒的等待后还会出现账套下拉列表选项&#xff0c;后来经历更长的时间等待后提示连接SQL服务器错误&#xff0c;如下图&#xff1a; 因为不切换用户时直接登录使用是没有…

leetcode-1.两数之和

1. 题目 2. 解答 遍历数组元素之和&#xff0c;由于只有唯一答案&#xff0c;并且数组中同一个元素不能重复出现&#xff0c; 因此可以使用双重遍历方式来计算所有可能&#xff1b; #include <stdio.h>void solve(int num[], int len, int target) {for (int i 0; i …

spring 注解: 更加简单的存储 Bean

目录 1. 更加简单的存储 Bean 1.1 添加注解 1.1.1 Controller【控制器存储】 1.1.2 Service【服务存储】 1.1.3 Repository【仓库存储】 1.1.4 Component【组件存储】 1.1.5 Configuration【配置存储】 1.1.6 类注解存储 Bean 的命名规则&#xff08;默认命名规则&…

浅谈精密配电多回路监控装置在轨道交通项目上的应用

安科瑞 须静燕 行业背景 轨道交通作为城市公共交通系统的一部分&#xff0c;在过去几十年中得到了广泛的发展和扩张。它在解决城市交通拥堵、减少环境污染、提高城市可持续性等方面发挥了重要作用。随着科技的进步&#xff0c;轨道交通系统也在不断引入新的技术和创新&#xff…

外汇天眼:本周监管警告名单更新,远离以下平台!

监管信息早知道&#xff01;外汇天眼将每周定期公布监管牌照状态发生变化的交易商&#xff0c;以供投资者参考&#xff0c;规避投资风险。如果平台天眼评分过高&#xff0c;建议投资者谨慎选择&#xff0c;因为在外汇天眼评分高不代表平台没问题&#xff01; 以下是监管牌照发生…

出差学知识No4:ubuntu vim中的各种必须掌握的经典操作(持续更新......)

1、给vim模式下打开的文档内容每行之前加上行号&#xff0c;便于问题定位 1、给vim模式下打开的文档内容每行之前加上行号&#xff0c;便于问题定位 摁一下Esc之后输入&#xff1a;set number

CentoS7 安装篇十二:mysql主从搭建(xtrackbackup不停机搭建)

一、mysql主从搭建使用mysql自身自己做&#xff0c;需要停止mysql服务进行&#xff0c;这种情况下面临以下问题 1.影响客户正在运行的软件&#xff0c;数据库比较大的情况下耗时时间长 2.如果不想影响客户使用体验&#xff0c;就是晚上加班搞 为了更好软件体验及避免加班情况&a…

Stm32_标准库_14_串口蓝牙模块_解决手机与蓝牙模块数据传输的不完整性

由手机向蓝牙模块传输时间信息&#xff0c;Stm32获取信息并将已存在信息修改为传入信息 测试代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Serial.h"uint16_t num…

可能是入门高阶数学的好通道 —— 很直观易记,又很难判断的真假的数学命题们

1. 有理数和无理数 实数轴上&#xff0c;2.0右侧的第一个实数b&#xff0c;b是无理数&#xff1b;&#xff08;么&#xff1f;&#xff09; 2. 点的个数 实数轴上0.0到2.0之间距离&#xff0c;是0.0到1.0之间距离的2倍&#xff0c;所以&#xff0c;显然&#xff0c;0.0到2.0之…

【LeetCode刷题(数据结构与算法)】:上下翻转二叉树

给你一个二叉树的根节点 root &#xff0c;请你将此二叉树上下翻转&#xff0c;并返回新的根节点 你可以按下面的步骤翻转一棵二叉树&#xff1a; 原来的左子节点变成新的根节点 原来的根节点变成新的右子节点 原来的右子节点变成新的左子节点 上面的步骤逐层进行。题目数据保…

大数据中间件——Kafka

Kafka安装配置 首先我们把kafka的安装包上传到虚拟机中&#xff1a; 解压到对应的目录并修改对应的文件名&#xff1a; 首先我们来到kafka的config目录&#xff0c;我们第一个要修改的文件就是server.properties文件&#xff0c;修改内容如下&#xff1a; # Licensed to the …

【每日一题】只出现一次的数字 III

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;位运算 其他语言cpython3 写在最后 Tag 【位运算】【数组】【2023-10-16】 题目来源 260. 只出现一次的数字 III 题目解读 找出数组中恰好只出现一次的连个元素&#xff0c;其余的所有元素均出现两次。要求算法的时间…

获取Steam余额的几种方式,及Steam余额被红锁的几种情况

今天就跟大家聊聊买余额的话题&#xff0c;获取Steam余额的几种方式&#xff0c;及Steam余额被红锁的几种情况。 什么是买余额呢&#xff1f; 指的就是卖家通过steam市场里面的饰品出售功能&#xff0c;把steam账号里的余额转移到买家账号中。 大家都知道&#xff0c;自从充值…

【前段基础入门之】=>CSS3新特性 2D 变换

导语&#xff1a; CSS3新特性&#xff0c;给我们带来了很多的丰富的过渡变换效果&#xff0c;这些效果使我们的页面效果变得更加的生动&#xff0c;这一章节&#xff0c;就给大家带来CSS3中的第一个变换效果&#xff1a;2D 变换 在正式了解2D 变换之前,我们需要了解&#xff0c…

啥?PS一秒成图?Adobe的逆天黑科技大公开

在日前举行的 Adobe MAX 创意大会上&#xff0c;Adobe Adobe Firefly Image 2&#xff08;萤火虫二代成像模型&#xff09;、Firefly Vector Model&#xff08;萤火虫矢量模型&#xff09;和Firefly Design Model&#xff08;萤火虫设计模型&#xff09;。 Firefly矢量模型是世…

155M传输分析仪 优劣势分析

D240S SDH测试模块&#xff0c;是FT100智能网络测试平台产品家族的一部分&#xff0c;是一个坚固耐用、锂电池超长供电的传统PDH/SDH测试解决方案&#xff0c;支持155Mbps到2.048Mbps速率的传输链路测试。支持在线和离线的传输链路的安装、维护和故障排除应用测试。 同时为经验…

分享一下微信小程序怎么添加抽奖活动

微信小程序是一种无需下载安装即可使用的应用&#xff0c;近年来在各行各业中得到了广泛应用。对于企业或商家而言&#xff0c;利用微信小程序开展抽奖活动可以吸引更多的用户关注&#xff0c;增加用户粘性并促进品牌传播。下面就以微信小程序添加抽奖活动为主题&#xff0c;探…

【Linux】环境下部署Nginx服务 - 二进制部署方式

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

SOLIDWORKS PDM—2024版本新增

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…